buuctf CISCN2019 华北赛区 Day2 Web1]Hack World
这道题是一道比较经典的布尔盲注的题目,也就全当作是学习了。
题目表示flag在flag表里的flag字段里 这点就很可疑
输入 1,2都有正确的回显
输入1'
时显示
显示布尔(错误),这里就可以判断是布尔注入了
好好学习一下布尔盲注的知识:
这里有篇布尔盲注的的文章:https://blog.csdn.net/wangyuxiang946/article/details/123486880 可以学习学习
substr(string,开始1,长度)函数 用于截取字符串的部分字符串
asscii() 用于将字符转化成ascii编码
这里本地搭了一个环节测试
在题目测试一下
1 | select ascii(substr((select flag from flag),1,1)) |
发现被过滤了 fuzz一下哪些被过滤了
发现一些常用的 空格 or union
都被过滤了 /**/
绕过空格也被过滤了 所以只能用()
来绕过
构造payload:
1 | select(ascii(substr((select(flag)from(flag),1,1))) |
正常回显了
这里再用到mysql 的if语句
if(条件,成功回显,失败回显)
本地测试
这是为什么条件等于84 是因为 我本地flag的第一个字母为T ascii编码为84
构造payload:if(ascii(substr((select(flag)from(flag)),1,1))=102,1,0)
成功回显 至于为什么是102 因为flag开头f 的ascii编码为102
那么就可以借助脚本,这里因为我python没怎么学,脚本不会写
但是整体脚本思路为 当匹配字符ascii 与题目相同时回显1 否则回显0 脚本根据题目回显的语句进行判断
然后遍历整个32-126 ascii编码字符
这里放一下大佬的脚本:
1 | import requests |
以后有时间要滚去学习写写脚本了qwq