文件上传之黑名单绕过
黑名單繞過方法:
1、大小寫繞過
windows對大小寫不敏感,所以上傳大小寫混寫的php進行繞過
(因為后端一般驗證后綴字符串是否和‘php’相等,(前提是沒有將你傳入的字符串進行小寫轉換后再對比),大寫字母和小寫字母肯定不相等,所以可以利用這一點進行繞過,又因為windows對大小寫不敏感,所以.PhP文件被當成php文件解析)
2、重寫繞過:
服務端將黑名單的后綴名替換為空,但是僅替換一次,所以可以上傳.phphp p后綴,替換后就成了.php
3、特殊可解析后綴繞過:
黑名單規則不嚴謹,在某些特定環境中某些特殊后綴仍會被當作php文件解析
php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml
如,基于debian和ubuntu的apt-get安裝apache,默認對于文件的解析規則如下:
4、. htaccess繞過:
在apache中,該文件作為一個配置文件,可以用來控制所在目錄的訪問權限以及解析設置。即,可以通過設置 使將該目錄下的所有文件作為php文件來解析
.htaccess可以寫入apache配置信息,改變當前目錄以及子目錄的apache配置信息
5、使用Windows特性繞過:
Windows對文件和文件名有限制,當以下字符放在結尾時,不符合操作系統的命名規范,在最后生成文件時會自動去掉字符
file.php[空格]
file.php[.] (多少個 . 都可以)
file.php[%80-%99] (用bp抓包,在文件名結尾輸入%xx,CTRL+SHIFT+U進行URL解碼,或者增加一個空格,在hex視圖中把20修改為xx)雖然解碼后和空格長得一樣,但是他真的不是空格!)
還有另外兩種windows特性,原理比較復雜,可以簡單理解為自動去掉后面的字符串
6、%00截斷
%00是chr(0),不是空格,是NULL,空字符
當程序在輸出含有chr(0)變量時,chr(0)后面的數據會被停止,換句話說,就是誤把它當成結束符,后面的數據直接忽略,這就導致漏洞產生
在文件上傳中,利用%00截斷,在文件擴展名驗證時,是取文件的擴展名來做驗證,但是最后文件保存在本地時,%00會截斷文件名,只保存%00之前的內容
但是這個漏洞要求php版本<5.3.34
目標:讀取實驗室根目錄下flag.php文件里面key的內容。
key內容為DBApp{}內的字符串
1、 找一張圖片,寫入一句話木馬,使用命令將一句話粘貼到圖片后面
2、上傳生成的圖片,使用bp抓包,將上傳文件后綴改為php
3、發送數據包后頁面返回信息:不允許上傳xxxx
猜測是設置了黑名單
將數據包中文件后綴改為一個不存在的后綴,重新發送
發現新文件成功上傳(果然是黑名單)
4、使用大小寫繞過
上傳成功!訪問一下
可以訪問
5、使用蟻劍連接
現在我們可以訪問他的目錄了
讀到了根目錄下flag.php中的key
總結
以上是生活随笔為你收集整理的文件上传之黑名单绕过的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 停息挂账一定要付首付款吗_什么是停息挂账
- 下一篇: 开发实用Linux命令