使用靶場前,先配置php版本為5.2,和下列對應配置。
php.ini
magic_quotes_gpc Off
php<5.3.4
httpd.conf
AddType application/x-httpd-php .php .phtml .php1 .php2 .php3 .php4 .php5 .php6 .php8 .php9 .htaccess .phP .Php
Pass1: 前端js過濾攔截,直接一句話木馬更改后綴名為jpg,抓包修改包中的一句話木馬的后綴為php即可完成繞過並且上傳。
Pass2:①源碼中可以看出增加了對文件類型的一個判斷和傳輸,上傳木馬1.php.png,抓包修改后綴名即可。②直接上傳php為后綴的木馬,抓包修改Content-Type: application/octet-stream為Content-Type: image/gif 或png或jpeg都可以繞過並且上傳。
Pass3:根據源碼內容可以發現這次的過濾規則采用了黑名單的機制。通過分析源碼得知一些危險的腳本解析文件后綴並沒有得到過濾。可采用更改后綴名為php1或php2或php3即可繞過並且上傳。
Pass4:根據源碼內容發現采用了黑名單規則,並且比起pass3,過濾掉的后綴名規則更多更完善,但是它並沒有過濾掉.htaccess,可更改webshell文件后綴為htaccess即可繞過並且上傳。
Pass5:根據源碼發現htaccess后綴名也被設為黑名單。根據源碼對應的過濾規則得出payload為.php. .,抓取數據包后在在文件名末尾加上點空點即可進行過濾。
Pass6:根據源碼內容發現沒有過濾規則為文件名是否為大小寫,將webshell文件的后綴名改為大寫,即可繞過並且上傳。
Pass7:根據源碼內容,發現過濾規則並沒有對文件名末尾的空格進行過濾,抓取數據包,在webshell文件名末尾加上空格,即可繞過並且上傳。
Pass8:根據源碼內容,發現過濾規則並沒有對文件名末尾的點進行過濾,抓取數據包,在webshell文件名末尾加上點,即可繞過並且上傳。
Pass9:根據源碼內容,發現過濾規則並沒有對::$DATA進行過濾,抓取數據包,在webshell文件名末尾加上::$DATA,即可繞過並且上傳。在使用webshell連接工具連接時須要刪除::$DATA后才可以正常連接,因為在windows中文件名規則中::$DATA是會被丟棄掉的。具體www.baidu.com。
Pass10:和pass5一樣的規律,可以. .方式進行過濾。
Pass11:根據源碼內容發現了這次時對關鍵字的直接替換為空(空值),可通過算雙寫繞過法,webshell文件名為1.pphphp即可繞過並且上傳。
Pass12:通過源碼發現該點是利用了白名單的上傳法,使用的是get的方法進行對數據的一個傳參。並且通過save_path文件進行傳參,內容中發現有”/”和$file_ext說明該參數為可控的。可采用%00截斷法,通過抓取數據包,更改save_path=../upload/ 為 save_path=../upload/1.php%00,即可繞過並且上傳。
Pass13:和pass12一樣是使用的是白名單,但是這邊采用的是post的傳參方式,也一樣通過%00截斷的方式,但是在這兒要對%00先進行一個編碼,抓取到數據包后,,它的傳參地方是在下面,和pass12不一樣,更改save_path=../upload/ 為 save_path=../upload/1.php%00,選中%00,右擊convert selection>url>url_decode,即可繞過並且上傳webshell。
Pass14:根據提示說須要文件包含漏洞的方式並且上傳.jpg.png.gif三種后綴的webshell才可過關,通過御劍進行對upload-labs進行掃目錄,發現一個include.php文件,打開發現該文件用於測試圖片馬的,通過源碼分析得到include.php是以file參數進行傳參,更改webshell文件名為圖片的后綴名,復制連接得到自動更改的文件名,得到payload 為http://192.168.43.204/upload-labs/include.php?file= 4520201217222329.gif,通過webshell連接工具即可過關。
Pass15:根據源代碼發現該過濾規則是檢查文件的前兩個字節,更改webshell文件的后綴名為gif,在webshell文件中添加GIF89即可繞過並且上傳。再利用文件包含即可繞過並且上傳。
Pass16:上傳文件后發現無法上傳,這里直接拉一張圖片來做圖片馬,經過測試圖片馬可用,上傳后發現無法連接到shell,通過源碼發現每上傳一次圖片則都會生成另外一個圖片,通過上傳webshell,進行對比,發現webshell語句已經沒了,嘗試正常文件上傳一次,將上傳成功的圖片進行下載下來,制作成圖片馬再次上傳,發現依舊無法,直接用網絡中某位大神的腳本。
Pass17:通過源碼發現過濾規則是先以move進行判斷,符合白名單的就重命名,不符合的就unlinke進行刪除,可以利用競爭條件,不斷發送php webshell一句話木馬,直到成功訪問,以webshell連接工具連接成功即可過關。
Pass18:和pass17同樣是先move再rename,繼續競爭條件但是有白名單,要利用解析漏洞或文件包含,如果文件名簡單可以嘗試爆破,這里難以爆破文件名。所以利用apache解析漏洞,傳1.php.rar 因為rar並不會被解析,可以改為7z。
Pass19:根據源碼發現是一個黑名單過濾的方式,抓包,再webshell下面進行更改,可以以大小寫、./、. .、::$DATA進行繞過
Pass20:通過源碼發現該過濾方式是以explode()函數把字符串打散為數組,end() 函數將數組內部指針指向最后一個元素,並返回該元素的值(如果成功),這里是取post參數數組中的最后一個文件名。reset() 函數將內部指針指向數組中的第一個元素並輸出。可控點為save_name。save_name[3]=conn19.php,save_name[5]=jpg,$ext=jpg過白名單,
reset($file)=conn19.php $file[1]=nul,就成功上傳conn19.php.(多出個點但是windows自動去掉了沒影響)。還可以嘗試,1=conn19,2=php,3=jpg,或者Pass19的00截斷,0=conn19.php(0x00),1=jpg