1. 程式人生 > 實用技巧 >檔案上傳漏洞繞過

檔案上傳漏洞繞過

檔案上傳漏洞是使用者上傳了一個可執行的指令碼檔案,並通過此指令碼檔案獲得了執行伺服器端命令的能力。這種攻擊方式是最為直接和有效的,“檔案上傳”本身沒有問題,有問題的是檔案上傳後,伺服器怎麼處理、解釋檔案。

繞過方法:

繞過服務端檢測:

服務端的程式碼常檢測request包中的三個點:MIME型別、檔案字尾、檔案內容。

  • 繞過MIME型別檢測

原理:檢測圖片型別檔案上傳過程中http包的Content-type欄位的值,來判斷上傳檔案是否合法。

繞過方法:用burpsuite擷取並修改資料包中檔案的content-type型別,或者用大小寫進行繞過;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
text/plain(純文字)
text/html(HTML文件)
text/javascript(js程式碼)
application/xhtml+xml(XHTML文件)
image/gif(GIF影象)
image/jpeg(JPEG影象)
image/png(PNG影象)
video/mpeg(MPEG動畫)
application/octet-stream(二進位制資料)
application/pdf(PDF文件)
application/(程式語言) 該種語言的程式碼
application/msword(Microsoft Word檔案)
message/rfc822(RFC 822形式)
multipart/alternative(HTML郵件的HTML形式和純文字形式,相同內容使用不同形式表示)
application/x-www-form-urlencoded(POST方法提交的表單)
multipart/form-data(POST提交時伴隨檔案上傳的表單)

不完善的黑名單副檔名:

副檔名在黑名單中為不合法,一般有個專門的blacklist檔案,裡面會包含常見的危險指令碼檔案。

繞過方法:

  • 字尾大小寫繞過:在對字尾的判斷中,如果只是對字串進行單獨的比較來判斷是不是限制檔案,可以採用字尾名大小寫繞過形式。
  • 空格繞過:如果黑名單沒有對字尾名進行去空處理,可以通過在後綴名後加空格進行繞過。
  • 雙寫繞過:如果黑名單是將問題字尾名替換為空,可以利用雙寫繞過。
php2, php3, php4, php5, phps, pht, phtm, phtml

繞過中介軟體檢測:

iis解析漏洞
1 目錄解析
以*.asp命名的資料夾裡的檔案都將會被當成ASP檔案執行。
2 檔案解析
*.asp;.jpg 像這種畸形檔名在“;”後面的直接被忽略,也就是說當成 *.asp檔案執行。
IIS6.0 預設的可執行檔案除了asp還包含這三種 *.asa *.cer *.cdx
3 預設解析
.asp .aspx .ashx .asa .cer這是系統默預設的字尾名
Apache解析漏洞

漏洞原理:Apache 解析檔案的規則是從右到左開始判斷解析,如果字尾名為不可識別檔案解析,就再往左判斷。比如 test.php.owf.rar “.owf”和”.rar” 這兩種字尾是apache不可識別解析,apache就會把wooyun.php.owf.rar解析成php。

nginx解析漏洞
開啟cgi:SCRIPT_NAME FASTCGI:
www.xx.com/a.jpg/.php(任何不存在檔案)-----可以解析為.php檔案
a.jpg:<?php phpinfo();?>
a.php%00.jpg----解析為a.php

配置問題導致漏洞:

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

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

3.修復漏洞方法
1.apache配置檔案,禁止.php.這樣的檔案執行,配置檔案裡面加入

1
2
3
4
<Files ~ “.(php.|php3.)”>
Order Allow,Deny
Deny from all
</Files>