<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/web/13249

                    0x00 簡介


                    php本地文件包含漏洞相關知識,烏云上早有相應的文章,lfi with phpinfo最早由國外大牛提出,可參考下面兩篇文章。利用的原理是利用php post上傳文件產生臨時文件,phpinfo()讀臨時文件的路徑和名字,本地包含漏洞生成1句話后門。

                    此方式在本地測試成功,為了方便大家學習,減小學習成本,已構建docker環境,輕松測試。將構建好的docker放在國外VPS上,使用github項目 lfi_phpinfo 中poc文件夾下的腳本,本地運行,依然可以getshell。說明這種方式是可行的,對網絡要求不是很高。

                    源碼存放在 code目錄下, 可使用docker再現,poc目錄下存放利用腳本

                    paper:

                    http://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

                    http://www.insomniasec.com/publications/LFI%20With%20PHPInfo%20Assistance.pdf

                    0x01 php 上傳


                    向服務器上任意php文件post請求上傳文件時,都會生成臨時文件,可以直接在phpinfo頁面找到臨時文件的路徑及名字。

                    php post方式上傳任意文件,服務器都會創建臨時文件來保存文件內容。

                    在HTTP協議中為了方便進行文件傳輸,規定了一種基于表單的 HTML文件傳輸方法

                    其中要確保上傳表單的屬性是 enctype=”multipart/form-data,必須用POST 參見: php file-upload.post-method

                    其中PHP引擎對enctype=”multipart/form-data”這種請求的處理過程如下:

                    1. 請求到達
                    2. 創建臨時文件,并寫入上傳文件的內容
                    3. 調用相應PHP腳本進行處理,如校驗名稱、大小等
                    4. 刪除臨時文件

                    PHP引擎會首先將文件內容保存到臨時文件,然后進行相應的操作。臨時文件的名稱是 php+隨機字符 。

                    在PHP中,有超全局變量$_FILES,保存上傳文件的信息,包括文件名、類型、臨時文件名、錯誤代號、大小

                    0x02 手工測試phpinfo()獲取臨時文件路徑


                    文件 upload.html

                    #!html
                    <!doctype html>
                    <html>
                    <body>
                        <form action="phpinfo.php" method="POST" enctype="multipart/form-data">
                        <h3> Test upload tmp file</h3>
                        <label for="file">Filename:</label>
                        <input type="file" name="file"/><br/>
                        <input type="submit" name="submit" value="Submit" />
                    </form>
                    </body>
                    </html>
                    

                    得到tmp_name 路徑

                    0x03 python腳本 upload file


                    #!python
                    import requests
                    
                    host = '127.0.0.1'
                    url = 'http://{ip}/LFI_phpinfo/phpinfo.php'.format(ip=host)
                    file_ = '/var/www/LFI_phpinfo/file.txt'
                    
                    response = requests.post(url, files={"name": open(file_, 'rb')})
                    
                    print(response.text)
                    

                    0x04 本地搭建環境


                    說明getshell成功,之后就可以自由發揮了~~

                    0x05 使用 docker 構建環境

                    docker的基本用法,這里就不闡述了,可自行google。這里提供了兩種構建鏡像源的方式,使用github lfi_phpinfo 中Dockerfile自行構建,或使用我已經構建好的鏡像 janes/lfi_phpinfo

                    -- [php 1="官方源" 2="2="2="2="2="language=":5.6-apache"""""\"][/php]/php5

                    -- janes/lfi_phpinfo

                    獲取 github lfi_phpinfo 的源碼,切換到web目錄下,開始構建環境進行測試。這里提供三種方式運行

                    1. 方式1 使用php官方源運行測試

                      #!bash
                      docker run --rm -v code/:/var/www/html -p 80:80 php:5.6-apache
                      
                    2. 方式2 使用構建好的鏡像 janes/lfi_phpinfo 運行測試

                      #!bash
                      docker pull "janes/lfi_phpinfo"
                      docker run --rm -p "80:80" janes/lfi_phpinfo
                      
                    3. 方式3 使用docker-compose

                      #!bash  
                      docker-compose up
                      

                    接下來就可以使用python腳本 getshell 了

                    #!bash
                    python lfi_phpinfo.py docker_host_ip
                    

                    0x06 結束語


                    動手實踐 LFI with PHPInfo利用的過程,其實并不像看文章過程那樣順利,期間多多少少會碰見一些與環境有關的問題,而解決這些問題會耗費精力,這正是催生我用docker來構建測試環境想法的來源,希望能給網絡安全的熱愛者們提供更方便的學習環境。最后感謝[LFI with PHPInfo本地測試過程]文章的作者,給我研究LFI with phpinfo提供了不少幫助。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频