<address id="pjjhp"></address>

<form id="pjjhp"></form>
    <noframes id="pjjhp"><address id="pjjhp"></address>
        <listing id="pjjhp"></listing>

        <address id="pjjhp"><listing id="pjjhp"><meter id="pjjhp"></meter></listing></address>

        <noframes id="pjjhp">
        <address id="pjjhp"><menuitem id="pjjhp"><menuitem id="pjjhp"></menuitem></menuitem></address>

            專業軟件下載站,為您提供無病毒無木馬的純凈綠色軟件

            下載排行榜

            教程信息

            利用PHAR協議進行PHP反序列化攻擊

            發布時間:2021-06-29
            PHAR ( "Php ARchive" ) 是 PHP 中的打包文件,相當于 Java 中的 JAR 文件,在 php5.3 或者更高的版本中默認開啟。PHAR 文件缺省狀態是只讀的,當我們要創建一個 Phar 文件需要修改 php.ini 中的 phar.readonly,修改為:phar.readonly = 0
             
            當通過 phar:// 協議對 phar 文件進行文件操作時,將會對 phar 文件中的 Meta-data 進行反序列化操作,可能造成一些反序列化漏洞。
             
            本文由錦行科技的安全研究團隊提供,從攻擊者的角度展示了 PHAR 反序列化攻擊的原理和過程。
             
            PHAR 文件結構
             
            stub phar:文件標識,格式為 xxx
             
            manifest:壓縮文件的屬性等信息,其中的 Meta-data 會以序列化的形式存儲。
             
            利用PHAR協議進行PHP反序列化攻擊
            contents:壓縮文件的內容
             
            signature:簽名,放在文件末尾
             
            生成 PHAR 文件
             
            生成程序如下:
            利用PHAR協議進行PHP反序列化攻擊
             
            生成 phar 文件,使用 16 進制工具查看,可以看到 Meta-data 中的序列化對象
             
            利用PHAR協議進行PHP反序列化攻擊
            測試反序列化
             
            測試程序如下:
             
            利用PHAR協議進行PHP反序列化攻擊
            運行結果,可以看到打印了‘ test ’,證明對象被反序列化創建后銷毀。
             
            雖然在創建 PHAR 文件時后綴是固定的,但完成創建后我們是可以修改 phar 的后綴名的,例如修改成 .jpg,當執行 include ( 'phar://phar.jpg' ) ; 時也可觸發反序列化。
             
            幾乎所有文件操作函數都可觸發 phar 反序列化
             
            利用PHAR協議進行PHP反序列化攻擊
            CTF 演示
             
            題目地址: [ CISCN2019 華北賽區 Day1 Web1 ] Dropbox(鏈接:https://buuoj.cn/challenges#%5BCISCN2019%20%E5%8D%8E%E5%8C%97%E8%B5%9B%E5%8C%BA%20Day1%20Web1%5DDropbox)
             
            進入題目后,隨意注冊賬號上傳文件,上傳點只能上傳圖片后綴
             
            利用PHAR協議進行PHP反序列化攻擊
            點擊下載,有任意文件讀取,但是不能讀取 flag.txt
             
             
            于是讀取網頁源碼,傳入 filename=../../xxx.php
             
            detele.php
             
             
            class.php
             
            分析源代碼
             
            可以看到刪除文件時使用了 File 類的 delete 函數,File 類的 delete 使用了 unlink 函數,可以觸發 phar 反序列化。
             
            繼續看到 class.php 的 File 類的 close ( ) 函數中調用了 file_get_contents 函數,可以讀取文件。但是要怎么觸發呢,我們可以看到 FileList 的 __call 函數,如果我們可以讓 FileList 參數 files 為數組且數組中一個類為 File,只要有類可以執行 $FileList->close ( ) ,就可以讀取文件并在 FileList 的析構函數中顯示出來了。我們看到 User 類的析構函數,執行了 $db->close ( ) 。so,我們讓 User 的 $db 參數等于 FileList 就行了。
             
            利用鏈:User 類的 $db 賦值為 FileList 類,User 類的析構函數執行 close 方法 ->觸發 FileList 的 __call 函數,讓 $file 值為 File,執行 $file 的 close 函數 ->File 執行 close 讀取文件,控制 $filename 為想讀取的文件 ->FileList 對象銷毀,執行析構函數,回顯結果。
             
            生成 phar 文件代碼:
             
             
            生成 phar 文件,修改后綴為 jpg,上傳
             
            刪除文件處修改 filename 為‘ phar://phar.jpg ’ , 讀取到 flag 文件
            利用PHAR協議進行PHP反序列化攻擊
            本文鏈接地址: http://www.blahblahmagazine.com/ddjc/ctjc/32466.html
            18禁看AV
            <address id="pjjhp"></address>

            <form id="pjjhp"></form>
              <noframes id="pjjhp"><address id="pjjhp"></address>
                  <listing id="pjjhp"></listing>

                  <address id="pjjhp"><listing id="pjjhp"><meter id="pjjhp"></meter></listing></address>

                  <noframes id="pjjhp">
                  <address id="pjjhp"><menuitem id="pjjhp"><menuitem id="pjjhp"></menuitem></menuitem></address>