文件上傳——不為人知的木馬上傳大法


 

文件上傳第一式(禁JS)

(1)來到第一關,我們查看源代碼:

上圖可以發現,上傳的限制代碼塊寫在js函數內,因此我們可以考慮將js的開關禁掉,直接上傳木馬的方式,其實,似乎也可以不禁js,直接burp抓包后修改圖片類型,一樣可以上傳成功。

 

(2)上傳一句話木馬.php,發現直接上傳成功,然后在頁面進行復制圖像地址,可以查看到上傳的

<?php eval($_POST['kkk']);?>

 

 

 

(3)使用菜刀對木馬進行連接,發現連接成功,第一關順利通關

 

 

 

 


 

文件上傳第二式(改Content-Type) 

 (1)來到第二關卡,這一關又該如何突破呢?老實說如果純說技術的話,這關能很快速就做出來,但是,我們不能做腳本小子,我們需要了解原理,為什么只需要改一下Content-Type就能繞過上傳呢?首先,我們可以觀察一下我們上傳php木馬的回顯是什么。

 

 

結果顯示:文件類型不正確,請重新上傳!

(2)關於Content-Type,這是一種內容類型,一般是指網頁中存在的Content-Type,用於定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件,這就是經常看到一些Asp網頁點擊的結果卻是下載到的一個文件或一張圖片的原因。(菜鳥教程詳解)

 

 

 (3)而原來的文件類型是怎樣的呢?Content-Type:multipart/form-data     這又是一種常見的 POST 數據提交的方式。我們使用表單上傳文件時,必須讓 form 的 enctyped 等於這個值。首先生成了一個 boundary 用於分割不同的字段,為了避免與正文內容重復,boundary 很長很復雜。然后 Content-Type 里指明了數據是以 mutipart/form-data 來編碼,以及本次請求的 boundary 是什么內容。

 

 

 (4)然后,Content-Type:application/octet-stream( 文件以二進制流傳輸,不知道下載文件類型)修改為image/gif就可以上傳圖片類型,這里我們是將要上傳的php文件模擬為圖片操作,當然,圖片類型有很多種,比如:

 

 

嘗試了一下jpeg與png都可以上傳成功!

 

可以借鑒一下別人博客的內容:

1.1 application/json:消息主體是序列化后的 JSON 字符串 1.2 application/x-www-form-urlencoded:數據被編碼為名稱/值對。這是標准的編碼格式 1.3 multipart/form-data: 需要在表單中進行文件上傳時,就需要使用該格式。常見的媒體格式是上傳文件之時使用的 1.4 text/plain:數據以純文本形式(text/json/xml/html)進行編碼,其中不含任何控件或格式字符。
 
        

 (5)然后,上傳成功,使用菜刀直接連接就好!這里我使用的是png類型的!


 

 

 

  如圖,連接成功!




 
        

文件上傳第三式(.htaccess) 

(1)第三關的繞過技巧也特別簡單,它的源碼顯示為不可上傳asp、aspx、php、jsp

而第三關的解題思路就是上傳一個包含有.htaccess的系統文件,讓系統允許上傳17kkk.jpg這類木馬圖片並解析其內容!這一關主要學習文件解析。

 

注明:

.htaccess文件(或者"分布式配置文件"),全稱是Hypertext Access(超文本入口)。提供了針對目錄改變配置的方法, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件, 以作用於此目錄及其所有子目錄

 

配置指令是如何被接收的?
一個.htaccess文件中的配置指令會應用於.htaccess文件的當前目錄以及所有子目錄。然而,不要忘了可能還有更上層的文件目錄中的.htaccess文件。配置指令按照它們被發現的順序被應用。因此,一個.htaccess文件中的配置指令可能會覆蓋更上層的.htaccess文件,以及apache的主配置文件中的配置指令。

 

<FilesMatch "17kkk.jpg">
SetHandler application/x-httpd-php
</FilesMatch>


 (2)此時上傳的文件是成功的,同時,它也被重新命名了!這點是由於源代碼中對上傳的文件進行了重命名操作!

 

(3)此時我們繼續上傳一個名為17kkk.php的文件,為了與.htaccess文件對應解析,注意將17kkk的后綴修改為jpg進行上傳

 

我們的木馬圖片被上傳成功,查看是否能被解析!

 

 

 

 


 

 

文件上傳第四式(正則匹配相等性)

首先聲明一下環境:php的后端開發+windows系統

雙引號" = 點號.
大於符號> = 問號?
小於符號< = 星號*

源代碼進行了各種腳本語言的過濾,並且還很惡俗的加上了文件重命名!

 

 (1)因此為我們可以使用這樣的正則替換,比如,可以將這個文件修改為任意的文件!先上傳一個名為17kkk.php:.jpg的文件,上傳成功后會生成17kkk.php的空文件,大小為0KB.然后使用17kkk.<17kkk.<<<17kkk.>>>17kkk.>><后再次上傳,重寫17kkk.php文件內容,Webshell代碼就會寫入原來的17kkk.php空文件中。

然后寫:test.>>>(重定向符號)

<表示所有 ,test表示test.*

 

(2)將17kkk.php抓包修改為:17kkk.php:.jpg    ,在我們的upload文檔內,能很明顯地看到一個名為:17kkk.php的空php文檔,此時我們將一句話寫入到這個php文檔內即可!

 

 

 

內容重定向寫入的操作似乎相當有用呢!

 

 

(3)此時直接訪問此木馬文件即可成功獲得webshell,注:我的php使用的是5.2.17版本的,當然,現在我們來演示一下高版本是否會觸發此類漏洞!

 

(4)附加測試,只報告結果,可以自行測試!Apache+Win的解析漏洞

php-5.4.45親測有效

。。。。。。。。。。。。。。。省略無數更高版本

      php-5.5.38親測有效

。。。。。。。。。。。。。。。省略無數更高版本

      php-7.2.10-NTS親測有效


免責聲明!

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



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