实验吧web-加了料的报错注入

题目地址:http://ctf5.shiyanbar.com/web/baocuo/index.php

看到题目提示“Please login!”以及参数tips,可以得知传参为username和password

输入username=1'得到报错

也就是说,单引号没有被吃掉,以及后台应该是类似于"select ??? from ??? where username=??? and password=???"的SQL语句

输入username='or '1,password='or '1,看到如下画面

在源代码里可以看到一点点小提示(不过也没有什么用)

告知了后台的SQL语句

先简单地试一下回显,可以知道一般的username,password错误是Login failed,而触发WAF则是红色字体的回显 

接下来就开始试后台的过滤逻辑,实验中发现:username中不允许使用(),也就是说无法使用函数,那报错注入岂不是没有办法做了?

那用password注入呢?因为后台逻辑要查询两个字段,所以password字段在这道题里也可以注入。发现password中不允许使用floor、extractvalue等这些报错函数,也就是说报错注入在password这里也做不了了。

也就是说,我们可以username里写报错函数名,password里写剩下的语句,但是这样会有多余的'and password='那要怎么做呢?

记得我们得知的SQL语句格式嘛?  where username='???' and password='???'   而sql语句中可以使用/**/注释掉中间的SQL语句。也就是说,我们可以使用/**/来解决这个问题,而且/**/也没有被吃掉,这叫做HTTP分割注入。

构造语句username='or extractvalue /*,password=*/(1, concat(0x5c,(select user()))) or',这样一结合就是

select * from users where username=''or extractvalue /*' and password='*/(1, concat(0x5c,(select database()))) or'' 报错出数据库名


接下来就是继续报错出表名了,需要注意一点的是=被吃掉了,可以用in或者regexp来绕过


然后是字段名(列名)


getflag





==================================================================

the end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容