站長資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        深入淺析PHP文件包含漏洞

        本篇文章給大家?guī)黻P(guān)于PHP的相關(guān)知識,其中主要介紹了關(guān)于文件包含漏洞的相關(guān)問題,文件包含漏洞的產(chǎn)生原因是在通過PHP的函數(shù)引入文件時(shí),由于傳入的文件名沒有經(jīng)過合理的校驗(yàn),從而操作了預(yù)想之外的文件,希望對大家有幫助。

        深入淺析PHP文件包含漏洞

        推薦學(xué)習(xí):《PHP視頻教程》

        漏洞描述

        文件包含漏洞的產(chǎn)生原因是在通過PHP的函數(shù)引入文件時(shí),由于傳入的文件名沒有經(jīng)過合理的校驗(yàn),從而操作了預(yù)想之外的文件,就可能導(dǎo)致意外的文件泄露甚至惡意的代碼注入。
        PHP中引發(fā)文件包含漏洞的通常是以下四個(gè)函數(shù):
        1、include()當(dāng)使用該函數(shù)包含文件時(shí),只有代碼執(zhí)行到include()函數(shù)時(shí)才將文件包含進(jìn)來,發(fā)生錯(cuò)誤時(shí)只給出一個(gè)警告,繼續(xù)向下執(zhí)行。
        2、include_once()功能和include()相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次。
        3、require()只要程序一執(zhí)行就會(huì)立即調(diào)用文件,發(fā)生錯(cuò)誤的時(shí)候會(huì)輸出錯(cuò)誤信息,并且終止腳本的運(yùn)行
        4、require_once()它的功能與require()相同,區(qū)別在于當(dāng)重復(fù)調(diào)用同一文件時(shí),程序只調(diào)用一次。

        漏洞危害

        攻擊者可利用該漏洞進(jìn)行任意文件包含讀取,獲取服務(wù)器敏感信息。

        漏洞影響版本

        此漏洞的存在與版本無關(guān)

        漏洞分析

        在給PHP發(fā)送POST數(shù)據(jù)包時(shí),如果數(shù)據(jù)包里包含文件區(qū)塊,無論你訪問的代碼中有沒有處理文件上傳的邏輯,PHP都會(huì)將這個(gè)文件保存成一個(gè)臨時(shí)文件(通常是/tmp/php[6個(gè)隨機(jī)字符]),文件名可以在$ _FILES變量中找到。這個(gè)臨時(shí)文件,在請求結(jié)束后就會(huì)被刪除。
        同時(shí),因?yàn)閜hpinfo頁面會(huì)將當(dāng)前請求上下文中所有變量都打印出來,所以我們?nèi)绻騪hpinfo頁面發(fā)送包含文件區(qū)塊的數(shù)據(jù)包,則即可在返回包里找到$_FILES變量的內(nèi)容,自然也包含臨時(shí)文件名。
        在文件包含漏洞找不到可利用的文件時(shí),即可利用這個(gè)方法,找到臨時(shí)文件名,然后包含之。
        但文件包含漏洞和phpinfo頁面通常是兩個(gè)頁面,理論上我們需要先發(fā)送數(shù)據(jù)包給phpinfo頁面,然后從返回頁面中匹配出臨時(shí)文件名,再將這個(gè)文件名發(fā)送給文件包含漏洞頁面,進(jìn)行g(shù)etshell。在第一個(gè)請求結(jié)束時(shí),臨時(shí)文件就被刪除了,第二個(gè)請求自然也就無法進(jìn)行包含。
        這個(gè)時(shí)候就需要用到條件競爭,具體流程如下:
        1)發(fā)送包含了webshell的上傳數(shù)據(jù)包給phpinfo,這個(gè)數(shù)據(jù)包的header,get等位置一定要塞滿垃圾數(shù)據(jù)。
        2)phpinfo這時(shí)會(huì)將所有數(shù)據(jù)都打印出來,其中的垃圾數(shù)據(jù)會(huì)將phpinfo撐得非常大。
        3)PHP默認(rèn)緩沖區(qū)大小是4096,即PHP每次返回4096個(gè)字節(jié)給socket連接。
        4)所以,我們直接操作原生socket,每次讀取4096個(gè)字節(jié),只要讀取到的字符里包含臨時(shí)文件名,就立即發(fā)送第二個(gè)數(shù)據(jù)包。
        5)此時(shí),第一個(gè)數(shù)據(jù)包的socket連接其實(shí)還沒有結(jié)束,但是PHP還在繼續(xù)每次輸出4096個(gè)字節(jié),所以臨時(shí)文件還未被刪除。
        6)我們可以利用這個(gè)時(shí)間差,成功包含臨時(shí)文件,最后getshell。

        環(huán)境搭建

        1. 啟動(dòng)docker:
          service start docker
        2. 在docker-compose.yml文件所在的路徑執(zhí)行:
          docker-compose build
          docker-compose up -d
          深入淺析PHP文件包含漏洞

        漏洞復(fù)現(xiàn)

        1. 訪問http://your-ip:8080/phpinfo.php,可以看到頁面出現(xiàn)phpinfo頁面
          深入淺析PHP文件包含漏洞2. 再訪問http://your-ip:8080/lfi.php?file=/etc/passwd,可以看到該頁面是存在文件包含漏洞的。
          深入淺析PHP文件包含漏洞POC驗(yàn)證:
          使用方法:python3 PHP文件包含漏洞_poc.py –target-url http://192.168.60.244:8080
          深入淺析PHP文件包含漏洞

        修復(fù)建議

        設(shè)置白名單。

        推薦學(xué)習(xí):《PHP視頻教程》

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
        主站蜘蛛池模板: 中文字幕亚洲精品| 精品久久久久中文字幕一区| 国产精品一区二区av不卡| 亚洲精品无码久久一线| 精品国产亚洲男女在线线电影 | 国产精品www| 亚洲精品国产精品乱码不卡√| 91精品福利在线观看| 国产综合精品女在线观看| 亚洲综合国产精品第一页 | 国产AV午夜精品一区二区三区| 亚洲精品乱码久久久久久不卡| 精品97国产免费人成视频| 97国产视频精品| 国产精品中文字幕在线观看| 国产精品污WWW在线观看| 一本一道精品欧美中文字幕 | 久久久久99精品成人片| 国产精品福利片免费看| 3级黄性日本午夜精品| 国产在线不卡午夜精品2021| 国产精品毛片VA一区二区三区| 亚洲av永久无码精品漫画 | 四虎精品免费永久免费视频| 久久精品无码免费不卡| 国内精品久久久久影院网站| 国产玖玖玖九九精品视频| 国产成人毛片亚洲精品| 91麻精品国产91久久久久| 欧美精品亚洲精品日韩1818| 久久久久免费精品国产| 四虎国产精品永久地址51| 久久精品男人影院| 日韩一级精品视频在线观看| 9999国产精品欧美久久久久久| 四虎国产精品免费久久5151| 一本一道久久精品综合| 亚洲国产精品婷婷久久| 亚洲国产精品人久久| 国产精品美女久久久网AV| 国产精品无码不卡一区二区三区|