SQL注入-盲注篇,获取数据库的连接用户等信息(1)
一、概述
最近在工作时,发现某系统有SQL注入漏洞,post请求,但由于有安全监控,因此不敢直接使用SQLMAP跑,因此手工进行注入验证。
二、具体详情
根据源代码审计,发现xxx.java文件存在大量sql注入漏洞,通过对其中一个进行验证(其他类似),跟踪数据流,构造其请求是http:// ****:**/**/**/**Detail.json,参数是serialNo。
1、正常构造请求如下,serialNo的内容是0,可发现返回查询结果,且长度是364047
2、修改serialNo的内容为0' ,可发现返回结果异常。
3、修改serialNo的内容为0' and 1=1--#,可发现结果正常,长度为131691。
因此可判定该参数确实存在sql注入漏洞。因此开始获取数据库信息。
4、利用length函数,获取数据库当前用户的长度,该长度可以手工尝试,或者爆破。
可发现,当设置长度大于7时返回正常,设置长度大于8时返回异常,因此,可判定当前user的长度为8。
5、接下来,利用substr函数,获取user的具体内容,此处以前两个字母为例,其他类似。可以利用爆破,也可以手工一个个尝试。
1)第一个字母,当设置起大于“l”时正常,大于“m”时异常,可判断第一个字母是m;
2)同理获取,第二个字母,当设置起大于“c”时正常,大于“d”时异常,可判断第二个字母是d;
同理可获取其他字母,因此当前user是:mdcq****,数据库类型是DB2
6、利用上述方式,可进一步获取数据库表名、字段名、字段内容等信息。当然如果无需逃避监控,可直接使用sqlmap进行脱库。
三、后续
这次未遇到基于时间的盲注,下次遇到后再增加。