burpsuite爆破

1.什么是解析漏洞

以其他格式執行出腳本格式的效果。

2.解析漏洞產生的條件

1.命名規則

2.搭建平臺

3.常見的解析漏洞

(一)IIS5.x-6.x解析漏洞

使用iis5.x-6.x版本的服務器,大多為windows server 2003,網站比較古老,開發語句一般為asp;該解析漏洞也只能解析asp文件,而不能解析aspx文件。

1)目錄解析(6.0)

形式:www.xxx.com/xx.asp/xx.jpg

原理: 服務器默認會把.asp,.asp目錄下的文件都解析成asp文件。

2)文件解析

形式:www.xxx.com/xx.asp;.jpg

原理:服務器默認不解析;號后面的內容,因此xx.asp;.jpg便被解析成asp文件了。

3)解析文件類型

IIS6.0 默認的可執行文件除了asp還包含這三種 :

/test.asa

/test.cer

/test.cdx

(二)IIS7.5解析漏洞

IIS7.5的漏洞與nginx的類似,都是由于PHP配置文件中,開啟了cgi.fix_pathinfo,而這并不是nginx或者iis7.5本身的漏洞。

(三)apache解析漏洞

漏洞原理

Apache 解析文件的規則是從右到左開始判斷解析,如果后綴名為不可識別文件解析,就再往左判斷。比如test.php.qwe.asd “.qwe”和”.asd” 這兩種后綴是apache不可識別解析,apache就會把wooyun.php.qwe.asd解析成php。

漏洞形式

www.xxxx.xxx.com/test.php.php123

其余配置問題導致漏洞

(1)如果在 Apache 的 conf 里有這樣一行配置 AddHandler php5-script .php 這時只要文件名里包含.php 即使文件名是 test2.php.jpg 也會以 php 來執行。

(2)如果在 Apache 的 conf 里有這樣一行配置 AddType application/x-httpd-php .jpg 即使擴展名是 jpg,一樣能以php 方式執行。

修復方案

1.apache配置文件,禁止.php.這樣的文件執行,配置文件里面加入

2.用偽靜態能解決這個問題,重寫類似.php.*這類文件,打開apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so

把#號去掉,重啟apache,在網站根目錄下建立.htaccess文件

(四)Nginx解析漏洞

漏洞原理

Nginx默認是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通過正則匹配設置SCRIPT_FILENAME。當訪問www.xx.com/phpinfo.jpg/1.php這個URL時,$fastcgi_script_name會被設置為“phpinfo.jpg/1.php”,然后構造成SCRIPT_FILENAME傳遞給PHP CGI,但是PHP為什么會接受這樣的參數,并將phpinfo.jpg作為PHP文件解析呢?這就要說到fix_pathinfo這個選項了。 如果開啟了這個選項,那么就會觸發在PHP中的如下邏輯:

PHP會認為SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就會將phpinfo.jpg作為PHP文件來解析了

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php

www.xxxx.com/UploadFiles/image/1.jpg%00.php

www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php

另外一種手法:上傳一個名字為test.jpg,然后訪問test.jpg/.php,在這個目錄下就會生成一句話木馬shell.php。

總結:

IIS6.0(x和腳本格式可以自定義)

文件命名形式:

正常命名:www.xxx.com/logo.jpg

觸發解析漏洞命名:www.xxx.com/logo.asp;.jpg或logo.asp;.x.jpg

文件夾命名形式:

正常命名:www.xxx.com/images/qq.jpg

觸發解析漏洞命名:www.xxx.com/image.asp/qq.jpg

IIS7.X(x自定義,只能執行php)

正常命名:www.xxx.com/logo.jpg

觸發解析漏洞命名:www.xxx.com/logo.jpg/x.php

Apache(xxxx代表任意后綴,向上識別解析)

正常命名:www.xxx.com/a.php

觸發解析漏洞命名:www.xxx.com/a.php.xxxx

Nginx同iis7.x一致

4.一個簡單的解析例子

測試環境為:windwos2003+iis6.0 注意:測試環境必須是在windwos2003+iis6.0的情況下才能成功解析,不能是小旋風之類的軟件來測試。

1)文件解析

直接訪問圖片地址:http://192.168.87.129:8067/6.jpg

改變圖片后戳名為:6.asp;.jpg 再次訪問,就會發現,jpg格式的圖片被解析成了asp格式的腳本語言。

還可以改成:6.asp;1234.jpg 效果是一樣的。

2)目錄解析

將文件改為一個正常的圖片格式文件,然后把它復制到一個test.asp的目錄下,然后方法,發現也能正常解析。

5.解析漏洞利用場景

解析漏洞主要用在文件上傳,上傳一些圖片什么的,然后通過解析漏洞,解析為動態語言。而上傳很重要的一點就是命名規則,因為如果你不知道,服務器的文件命名規則的話,解析漏洞就不好利用,因為我們要獲取我們上傳文件名,只有獲取到了上傳的文件名,才能進行下一步操作,而命名規則無非就是以下兩種。

測試源碼:http://download.csdn.net/detail/u011781521/9766646下載好之后,在服務器中新建一個網站,并復制進去。

然后訪問首頁:http://192.168.87.129:8898/Index.asp

后臺登錄地址:http://192.168.87.129:8898/Tcnet/Admin_Login.asp

文件上傳地址:http://192.168.87.129:8898/Upload.asp?formname=myform&editname=bookpic&uppath=upfile&&filelx=jpg用戶名與密碼: admin admin 注意:必須先要登錄才能使用文件上傳功能。

1.本地,服務端命名一致

1)filepath上傳利用

直接上傳解析漏洞命名的后門文件

訪問這個地址:http://192.168.87.129:8898/Upload.asp?formname=myform&editname=bookpic&uppath=upfile&&filelx=jpg

先直接上傳一個asp的文件試試看能否上傳

發現并不能上傳。那我們就利用解析漏洞來試下看,把asp改為fk.asp;.jpg(注:這里是圖片一句話)

OK能上傳。復制上傳好的地址,然后訪問

圖片能查看,但是asp并沒有被解析。。。這是時候怎么辦,從新上傳xxx.asp;.jpg,然后用Burp來抓包,進行修改。

右鍵發送到Repeater中去

修改其中的"filepath"在upfile/后面加上aaa.asp;. 然后Go一下你就會發現,這里就成了一個解析漏洞了

然后訪問下這個地址,asp成功的被解析了。

然后用菜刀進行連接。

密碼就是"include";對應的asp一句話<%execute request("include")%> ?然后點擊添加。。

連接成功。

2.本地,服務端命名不一致,基于時間,日期等命名

1)filetype突破

這里采用DVWA來測試,

然后點擊"View Source"查看源碼。

Low代碼:

[html]view plaincopy


if(?isset(?$_POST[?'Upload'?]?)?)?{??//判斷是否是post傳過來的,也就是判斷upload是否為空

$target_path=DVWA_WEB_PAGE_TO_ROOT.?"hackable/uploads/";???//取得網站絕對路徑,然后用絕對路徑+相對路徑得到一個完整的路徑。

$target_path.=basename(?$_FILES[?'uploaded'?][?'name'?]?);???//根據上面得到的完整路徑+得到的文件名。

if(?!move_uploaded_file(?$_FILES[?'uploaded'?][?'tmp_name'?],?$target_path?)?)?{??//判斷你上傳的圖片是否成功移動到完整路徑中

//?No

echo?'

Your?image?was?not?uploaded.

';

}

else?{

//?Yes!

echo?"

{$target_path}?succesfully?uploaded!

";

}

}

?>

$_FILES['uploaded']['name']:取得$_FILES全局文件變量的上傳文件名

該源碼存在的問題:

第一個沒有驗證后綴格式

什么格式得可以上傳。。

第二個客戶端,服務端文件命名一致

Medium代碼:

[html]view plaincopy


if(?isset(?$_POST[?'Upload'?]?)?)?{

//?我們要往哪里寫?

$target_path=DVWA_WEB_PAGE_TO_ROOT.?"hackable/uploads/";

$target_path.=basename(?$_FILES[?'uploaded'?][?'name'?]?);

//?文件信息

$uploaded_name=?$_FILES[?'uploaded'?][?'name'?];

$uploaded_type=?$_FILES[?'uploaded'?][?'type'?];

$uploaded_size=?$_FILES[?'uploaded'?][?'size'?];

//?判斷這是一個圖片嗎?

if(?(?$uploaded_type==?"image/jpeg"?||?$uploaded_type==?"image/png"?)?&&

(?$uploaded_size<100000)?)?{

//?我們可以移動文件到上傳文件夾嗎?

if(?!move_uploaded_file(?$_FILES[?'uploaded'?][?'tmp_name'?],?$target_path?)?)?{

//?No

echo?'

Your?image?was?not?uploaded.

';

}

else?{

//?Yes!

echo?"

{$target_path}?succesfully?uploaded!

";

}

}

else?{

//?Invalid?file

echo?'

Your?image?was?not?uploaded.?We?can?only?accept?JPEG?or?PNG?images.

';

}

}

?>

$_FILES['uploaded']['name'];取得$_FILES全局文件變量的上傳文件名

$_FILES['uploaded']['type'];取得$_FILES全局文件變量的上傳文件類型

$_FILES['uploaded']['size'];取得$_FILES全局文件變量的上傳大小

驗證文件上傳類型及大小,還是本地,服務端命名一致

然后我們來上傳個asp文件用Burp抓包,看是否能成功上傳。

攔截到之后發送到Repeater,然后go一下

上傳失敗。。。這就很好奇了,明明這里沒有驗證文件后戳名,為什么還是上傳不了???? 但是,他這里驗證了文件類型!!我們看下上傳的文件是什么類型的

看它上傳的類型為:application/octet-stram 所以他把上傳的asp當做application來處理里。

然后我們改一下content-type的類型為:image/jpeg

再次GO一下,發現上傳成功了。

2)%00截斷:截斷字符

注意:數據包修改%00,務必進行url編碼

把6.asp;.jpg改為6.asp%00.jpg

然后選中右鍵把%00進行url編碼下。

這樣的話,就把.jpg給截斷了,然后就變成了6.asp。

High代碼:

[html]view plaincopy


if(?isset(?$_POST[?'Upload'?]?)?)?{

//?我們要往哪里寫?

$target_path=DVWA_WEB_PAGE_TO_ROOT.?"hackable/uploads/";

$target_path.=basename(?$_FILES[?'uploaded'?][?'name'?]?);

//?文件信息

$uploaded_name=?$_FILES[?'uploaded'?][?'name'?];

$uploaded_ext=substr(?$uploaded_name,?strrpos(?$uploaded_name,?'.'?)?+?1);

$uploaded_size=?$_FILES[?'uploaded'?][?'size'?];

$uploaded_tmp=?$_FILES[?'uploaded'?][?'tmp_name'?];

//?判斷是否是圖片?

if(?(?strtolower(?$uploaded_ext?)?==?"jpg"?||?strtolower(?$uploaded_ext?)?==?"jpeg"?||?strtolower(?$uploaded_ext?)?==?"png"?)?&&

(?$uploaded_size<100000)?&&

getimagesize(?$uploaded_tmp?)?)?{

//?我們可以移動文件到上傳文件夾嗎?

if(?!move_uploaded_file(?$uploaded_tmp,?$target_path?)?)?{

//?No

echo?'

Your?image?was?not?uploaded.

';

}

else?{

//?Yes!

echo?"

{$target_path}?succesfully?uploaded!

";

}

}

else?{

//?Invalid?file

echo?'

Your?image?was?not?uploaded.?We?can?only?accept?JPEG?or?PNG?images.

';

}

}

?>

strrpos( $uploaded_name, '.' ) + 1 的作用就是去文件的最后一個點

例如:

www.jpg.zip.txt.asp

他就會截取最后一個點,所以是繞不過的。

然后下面又是一個判斷。格式必須是圖片型的才能執行下面的代碼。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 文件上傳漏洞是指用戶上傳了一個可執行的腳本文件,并通過此腳本文件獲得了執行服務器端命令的能力。這種攻擊方式是最為直...
    付出從未后悔閱讀 1,186評論 0 4
  • (源自摘抄整理)https://www.91ri.org/11494.html Webshell實現與隱藏探究 一...
    JackyTsuuuy閱讀 20,947評論 2 13
  • 漏洞挖掘與利用 測試環境的搭建 引言 為什么要搭建本地測試環境?我想下面的東西能夠回答你的疑惑。 第二百八十五條 ...
    作業沒寫完閱讀 3,252評論 0 4
  • 文/Screalling 社交與交友,看似都是與人打交道,但其實當中的區別十分微妙,毫不夸張的來說,不少的我們將這...
    蒼木幽林閱讀 1,192評論 0 2
  • 【上一章】超凡探長(五)(目錄) 這天譚銘去局里報到去了,孟凡來到偵探社,喝著牛奶吃著三明治。早餐還沒吃完就接到警...
    熊六閱讀 278評論 0 2