文件上傳高級利用與繞過技巧
###重繪圖
正常圖片上傳后會重新渲染,會抹去代碼加入部分。具體繞過方法可以參考上一篇upload-labs總結
使用工具繞過。
項目地址
https://github.com/RickGray/Bypass-PHP-GD-Process-To-RCE
用法
php codeinj.php demo.gif "<?php phpinfo();?>"
結合phpinfo與本地文件包含利用
某站點存在本地文件包含及phpinfo,可以利用其執行腳本。
1.php在解析multipart/form-data請求時,會創建臨時文件,并寫入上傳內容,腳本執行后即刪除
2.phpinfo可以輸出$_FILE信息
3.通過多種方式爭取時間,在臨時文件刪除前進行執行包含
1)通過在數據報文中加入大量的垃圾數據,似phpinfo頁面過大,導致phpinfo頁面過大,導致php輸出進入流式輸出,并不一次輸出完畢
2)通過大量請求來延遲php腳本的執行速度
項目地址
http://github.com/hxer/vulnapp.git
<Directory "D:/www/ichunqiu/upload"> <FilesMatch "\.(?i:php|php3|php4)$" Order Allow.Deny Deny from all </FilesMatch> </Directory>
以上代碼為在upload下無權限訪問php,php3,php4等文件
首先判斷目錄是否為權限限制
訪問如下url顯示Forbidden

上傳圖片正常訪問如下

訪問不存在的圖片顯示Not Found

以上訪問過程可判斷次目錄無法訪問php文件
繼續向上級目錄訪問

以上圖片判斷upload目錄也沒有php訪問權限
直道測試到ichunqiu目錄有訪問權限
上傳圖片bp抓包,file處修改為file/../../進行目錄穿越上傳成功

如果碰到waf情況攔截../可以使用.././../進行繞過./代表當前目錄

在線解壓縮
Webshll打包到壓縮包中
1.模板上傳處常用壓縮包上傳后進行自動解壓
1.1.部分此類有監測壓縮包中的內容的,可嘗試建立目錄進行壓縮
2.使用目錄穿越../的方法向上一級目錄進行上傳
將php文件直接壓縮為zip,然后用notepad++打開壓縮文件如下

講phpinfo改為../info,如下圖

文件上傳

成功上傳并穿越目錄

將文件軟鏈接打包到壓縮包
文件軟鏈接到/etc/passwd等文件,達到任意文件讀取
ln -s /etc/passwd ./a #文件/etc/pawwsd軟鏈接到a zip --symlinks -r 1.zip ./a #將a文件壓縮為1.zip
上傳成功

點擊a查看到/etc/passwd文件

文件軟鏈接到/文件
ln -s / b #/軟鏈接到b zip --symlinks 2.zip b #將b壓縮為2.zip
上傳2.zip,上傳成功

點擊b顯示目錄

其他技巧
圖片文件頭十六進制匹配
一般檢查文件頭內容是加入gif89a即可,但部分后臺有可能需要強制匹配文件頭的16進制數據
如需要匹配下圖中的\xff\xd8\xff

中bp抓包,文件中加入已url編碼的%ff%d8%ff
上傳過程
講%ff%d8%ff進行urldecode

可成功上傳

雙寫filename
部分waf會監測第一個filename中的內容,而忽略第二個filename內容

注:filename="oh-info.png";之后加一個空格再跟上第二個filename
