上面講過了黑名單繞過,白名單就是只允許規定的文件后綴能上傳,所以要比黑名單安全
一、%00繞過(.php終止符.jpg)
原理:白名單過濾肯定是從后往前讀取后綴,所以讀取到.jpg在白名單里就放通了。
但是在調用文件的時候讀取文件名是從前往后讀,所以看到.php后面的終止符的時候就停止讀取了,最終讀取的文件名的后綴就是.php
這個%00是什么意思呢?看到有%,那么首先就應該想到的是URL編碼。然而%00只針對GET傳參,所以POST傳參不能識別URL編碼
原理就是:一般上傳的文件不是直接就送到服務器上的,而是先放到臨時目錄里,然后再重命名(經常我們看到的網頁上的圖片都是一串數字,那就是重命名之后的),最后再發往服務器
我們可以看到,最后重命名之后的文件的存儲路徑是用的GET傳參
這個就是上傳包
這個時候就用%00截斷
來看上傳之后的圖片地址:雖然最后有數字.jpg但是已經不會執行了
二、0x00截斷
其實就是post傳參的00截斷,因為post傳參不走URL欄,所以就不用%00
在這里我們先這樣修改,然后再進入hex界面
將a對應的十六進制值修改為00就可以了
三、圖片馬繞過
利用cmd命令:copy 123.jpg/b + aaa.php 666.jpg 可以將aaa.php中的一句話木馬寫入123.jpg,生成一張長得一模一樣的圖片666.jpg,再配合解析漏洞就可以拿到shell
四、二次渲染
二次渲染就是會改變圖片的一部分十六進制數值,所以圖片馬中的馬最好寫在第三四排,並且最好用.gif
五、條件競爭繞過(針對先上傳再檢測的web網站)
簡述一下理想模型:上傳一個1.php的文件,1.php文件里的內容是生成2.php(木馬)的語句,在網站刪除1.php之前,訪問到它,然后就生成了2.php,隨后1.php被刪除了,但是2.php還存在,因為2.php不是通過上傳來的,所以可以繞過檢測機制。
夢想照進現實,我們需要抓一個上傳包,和一個訪問包,然后用BP瘋狂的跑就行了
需要用到語句:file_put_contents('2.php','<?php eval($_REQUEST[8])?>');