知了堂《web安全-上傳漏洞》課程講解文檔(上)
文章來源:知了堂馮老師

0 聲明
1.本課程涉及的所有信息安全攻擊技術(shù)等內(nèi)容均作為教育和學(xué)習(xí)之用,不得用于其他用途,否則后果自付。
2.本課程中所涉及的所有軟件工具均來自互聯(lián)網(wǎng),本著互聯(lián)網(wǎng)的共享精神可以提供給學(xué)員,但僅限于教育和學(xué)習(xí)之用,不得用于其他用途。
1?中華人民共和國(guó)網(wǎng)絡(luò)安全法(2017年6月1日施行)
第十二條
任何個(gè)人和組織使用網(wǎng)絡(luò)應(yīng)當(dāng)遵守憲法法律,遵守公共秩序,尊重社會(huì)公德,不得危害網(wǎng)絡(luò)安全,不得利用網(wǎng)絡(luò)從事危害國(guó)家安全、榮譽(yù)和利益,煽動(dòng)顛覆國(guó)家政權(quán)、推翻社會(huì)主義制度,煽動(dòng)分裂國(guó)家、破壞國(guó)家統(tǒng)一,宣揚(yáng)恐怖主義、極端主義,宣揚(yáng)民族仇恨、民族歧視,傳播暴力、淫穢色情信息,編造、傳播虛假信息擾 亂經(jīng)濟(jì)秩序和社會(huì)秩序,以及侵害他人名譽(yù)、隱私、知識(shí)產(chǎn)權(quán)和其他合法權(quán)益等活動(dòng)。
第四十四條
任何個(gè)人和組織不得竊取或者以其他非法方式獲取個(gè)人信息,不得非法出售或者非法向他人提供個(gè)人信息。
2?中華人民共和國(guó)刑法(節(jié)選)
第二百八十五條
【非法侵入計(jì)算機(jī)信息系 統(tǒng)罪】 違反國(guó)家規(guī)定,侵入國(guó)家事務(wù)、國(guó)防建設(shè)、尖端科學(xué)技術(shù)領(lǐng)域的計(jì)算機(jī)信息系統(tǒng)的, 處三年以下有期徒刑或者拘役。
第二百八十六條
【破壞計(jì)算機(jī)信息系統(tǒng)罪】 違反國(guó)家規(guī)定,對(duì)計(jì)算機(jī)信息系統(tǒng)功能進(jìn)行刪除、修改、增加、干擾,造成計(jì)算機(jī)信息 系統(tǒng)不能正常運(yùn)行,后果嚴(yán)重的,處五年以下有期徒刑或者拘役;后果特別嚴(yán)重的,處五年以上有期徒刑。
3?本課程面向的主要群體:
本課程主要面向立志從事網(wǎng)絡(luò)安全相關(guān)崗位,立志從事安全行業(yè)人員,對(duì)web安全及滲透測(cè)試有興趣的入坑人員。本課程初步設(shè)計(jì)主要對(duì)象為零基礎(chǔ)入坑學(xué)員,由于技術(shù)有限,請(qǐng)多多指正。

0 上傳漏洞介紹
在現(xiàn)代互聯(lián)網(wǎng)的web應(yīng)用程序中,上傳文件是一種常見的功能,因?yàn)樗兄谔岣邩I(yè)務(wù)效率,比如企業(yè)的OA系統(tǒng),允許用戶上傳圖片、視頻、頭像和許多其他類型的文件。然而向用戶提供的功能越多,web應(yīng)用受到攻擊的風(fēng)險(xiǎn)就越大,如果web應(yīng)用存在文件上傳漏洞,那么惡意用戶就可以利用文件上傳漏洞將可執(zhí)行腳本程序上傳到服務(wù)器中,獲取網(wǎng)站的權(quán)限,或者進(jìn)一步危害服務(wù)器。
·為什么文件上傳存在漏洞
上傳文件時(shí),如果服務(wù)器代碼未對(duì)客戶端上傳的文件進(jìn)行嚴(yán)格的驗(yàn)證和過濾,就容易造成可以上傳任意文件的情況,包括上傳腳本文件(asp、aspx、php、jsp等格式的文件)。
·危害
非法用戶可以利用上傳的惡意腳本文件控制整個(gè)網(wǎng)站,甚至控制服務(wù)器。這個(gè)惡意的腳本文件,又稱之為webshell,也可將webshell腳本稱為一種網(wǎng)頁后門,webshell腳本具有強(qiáng)大的功能,比如查看服務(wù)器目錄,服務(wù)器中的文件,執(zhí)行系統(tǒng)命令等。
1 案例講解
2 JS檢測(cè)繞過攻擊
JS檢測(cè)繞過上傳漏洞常見于用戶選擇文件上傳的場(chǎng)景,如果上傳文件的后綴不被允許,則會(huì)彈框告知,此時(shí)上傳文件的數(shù)據(jù)包并沒有發(fā)送到服務(wù)器端,只是在客戶端。覽器使用JavaScript對(duì)數(shù)據(jù)包進(jìn)行檢測(cè)。


這時(shí)有兩種方法可以繞過客戶端JavaScript的檢測(cè)
·使用瀏覽器的插件,刪除檢測(cè)文件后綴的JS代碼,然后上傳文件即可繞過。
·把需要上傳文件的后綴改稱允許上傳的,如JPG,PNG等,繞過JS的檢測(cè),再抓包,把后綴名改成可執(zhí)行文件的后綴即可上傳成功。
(注:除了刪除代碼這個(gè)繞過方法,還有很多,比如ie的禁用腳本功能或者火狐的noscript插件或者刪除代碼中的JS引用)

3 JS檢測(cè)繞過攻擊分析

客戶端上傳文件的HTML代碼如下,在選擇文件時(shí),會(huì)調(diào)用JS的selectFile函數(shù),函數(shù)的作用是先將文件名轉(zhuǎn)換為小寫,然后通過substr獲取文件名最后一個(gè)點(diǎn)號(hào)后面的后綴(包括點(diǎn)號(hào))。如果后綴不是”jpg”,則會(huì)彈窗提示“請(qǐng)選擇jpg格式的照片上傳”。
服務(wù)器處理上傳文件的代碼如下所示。如果上傳文件沒有錯(cuò),再通過file_exists判斷在upload目錄下文件是否已存在,不存在的話就通過move_uploaded_file將文件保存到upload目錄。此PHP代碼中沒有對(duì)文件后綴做任何判斷,所以只需要繞過前端JS校驗(yàn)就可以上傳webshell

4 文件后綴繞過攻擊
文件后綴繞過攻擊是服務(wù)器代碼中限制了某些后綴的文件不允許上傳,但是有些apache是允許其他文件后綴的,例如在http.conf中,如果配置有如下代碼,則能夠解析php和phtml文件AddType application/x-httpd-php .php .phtml。
所以可以上傳一個(gè)后綴為phtml的webshell如 abc.php.phtml。
在apache的解析順序中,是從右到左開始解析文件后綴的,如果最右側(cè)的擴(kuò)展名不識(shí)別,就繼續(xù)往左判斷,直到遇到可以解析的文件為止,所以如果上傳的文件名類似abc.php.xxx,因?yàn)楹缶Yxxx不可以解析,所以向左解析后綴php。
服務(wù)端處理上傳文件的代碼如下所示。通過函數(shù)pathinfo()獲取文件后綴,將后綴,將后綴轉(zhuǎn)換為小寫之后,判斷是不是“php”,如果上傳文件的后綴是php,則不允許上傳,所以此處可以通過利用apache解析順序或上傳phtml等后綴的文件繞過該代碼限制。

5 文件類型繞過攻擊
在客戶端上傳文件時(shí),通過burp suite抓取數(shù)據(jù)包,當(dāng)上傳一個(gè)php格式的文件時(shí),可以看到數(shù)據(jù)包中的Content-Type的值是application/octet-stream,而上傳jpg格式的文件時(shí),數(shù)據(jù)包中的content-Type的值是image/jpeg。

如果服務(wù)器端代碼是通過content-type的值來判斷文件的類型,那么就存在被繞過的可能,因?yàn)閏ontent-type的值是通過客戶端傳遞的,是可以任意修改的。所以當(dāng)上傳一個(gè)php文件時(shí),在burpsuite中將content-type修改為image/jpeg,就可以繞過服務(wù)端的檢測(cè)。

今天就先更新到這兒了,未完待續(xù)?。?!請(qǐng)持續(xù)關(guān)注~~
