通过漏洞利用模版使漏洞利用自动化

xiaohui Web安全 2019年3月25日发布
Favorite收藏

导语:在去年的USENIX安全会议上,我发表了一篇题为《堆布局操作的自动化》的文章。这篇论文中含有一个想法,这个想法就是通过漏洞利用模版使漏洞利用自动化,因此我认为该思想可能在将自动漏洞利用生成系统扩展到更现实的问题上很有用。

堆布局操作的自动化

在去年的USENIX安全会议上,我发表了一篇题为《堆布局操作的自动化》的文章。该文的主要思想是,我可以将堆布局操作从生成漏洞所涉及的其他工作中分离出来,并使用黑盒搜索自动解决它。这篇论文中还有另一个想法,这个想法就是通过漏洞利用模版使漏洞利用自动化,因此我认为该思想可能在将自动漏洞利用生成系统扩展到更现实的问题上很有用。

漏洞利用模板只是一个部分完成的漏洞,其中不完整的部分将由某种自动推理机制填充。在论文中,我提到自动填充的部分是将堆放入特定布局所需的输入。下面是一个示例模板,显示了PHP解释器的一部分漏洞。漏洞利用程序开发人员希望将imagecreate所做的分配放在quoted_printable_encode所做的分配旁边。

$quote_str = str_repeat("\xf4", 123);
 
#X-SHRIKE HEAP-MANIP 384
#X-SHRIKE RECORD-ALLOC 0 1
$image = imagecreate(1, 2); 
 
#X-SHRIKE HEAP-MANIP 384 
#X-SHRIKE RECORD-ALLOC 0 2 
quoted_printable_encode($quote_str); 
 
#X-SHRIKE REQUIRE-DISTANCE 1 2 384

SHRIKE(解析模板并搜索堆布局问题的解决方案的机制)将把包含部分完成的漏洞利用的.php文件作为输入,并搜索它应自动解决的问题。用于与机制通信的指令以字符串X-SHRIKE开头。它们在我的论文中中有完整的解释,但是过程相当简单,就是HEAP-MANIP告诉机制它可以在这个位置插入堆操作代码,此时RECORD-ALLOC会告诉机制它应该记录从这一点开始发生的第n个分配。另外,REQUIRE-DISTANCE告诉机制,在执行PHP程序时,与指定ID相关联的分配必须彼此相距一定的距离。机制接受此输入后,然后才开始寻找将堆放入所需布局的方法。上面的代码片段来自CVE-2013-2110漏洞(堆缓冲区溢出漏洞),此视频显示了SHRIKE解决自动运行堆布局问题的漏洞的过程。

那么,这种方法有什么好处呢?由于搜索是在黑盒子中进行的,不要求漏洞利用开发人员分析目标应用程序或分配器,如果搜索成功,则输出一个新的PHP文件,该文件实现了所需的布局,然后可以继续完成攻击。这会产生连锁反应,使得开发人员更容易针对特定的堆溢出探索不同的开发策略。在正常的软件开发中,人们普遍认为长构建周期是糟糕的,而REPL(交互式解释器环境)通常是好的,其中R(read)、E(evaluate)、P(print)、L(loop) ,交互式解释器会读取输入内容并对它求值,再返回结果,并重复此过程。原因是后者支持形成假设,测试,精炼和重复的紧密循环,而长构建周期则破坏了这个过程。 漏洞利用的自动化就具有类似的细REPL过程,任何可以使这个循环更紧密的技术将使该过程更有效。

关于通过漏洞利用模版使漏洞利用自动化,目前还有很多有趣的工作要做。在洞利用自动化研究中,有一种趋势是专注于完全自动化,但经过实践,要让所有的利用都实现自动化是不可能的。

另外如果漏洞利用自动化后,那网络犯罪成本将大大降低。

网络犯罪成本解析

应该说网络犯罪的分工目前是相当精细的,各有专攻,互相协作。即使执法机构端掉一些恶意论坛的窝点或查封某个肆虐的恶意软件,那这个市场空缺也会很快被其它产品补上。

在过去的二十多年里,网络犯罪逐渐成为一个包括工具、方法等高度复杂的生态系统。今天的网络犯罪,可以说是全球化合作,不同地域,不同专业的人都加了进来,既能满足基本的攻击需要,也可以定制非常复杂的攻击策略。

银行木马犯罪示例

银行木马就是最好的示例,它可以被不断的利用,以便实现最大的盈利。我会在下面的示例中说明前期开发和后期运营的成本,以及运营后的回报。

银行木马是网络犯罪活动中最抢手的产品,一般来说开发一个这样的产品,价格为3000至5000美元。产品开发完后,用户还要为每个目标金融机构的网络注入单独付费,大概每个是150-1000美元。为了保持对整个操作的全程管理,后台服务需要随时对这些攻击进行监控,而数据中心的网络服务器的月租金通常为150至200美元。

为了确保一致的有效载荷交付,并避开杀毒软件,可执行文件必须是“干净的”和日常混淆。这种服务的价格是每个单一有效载荷20至50美元。稳定的网络流量重定向到受感染的资源或垃圾电子邮件活动是恶意载荷的两个主要传送工具。一旦恶意软件成功种植,银行证书被截获,犯罪者必须与一连串的骡经营者和洗钱中介合作才能获得最终的回报。具有良好声誉,能够快速周转的洗钱者,将从受害者帐户转移的每笔款项中收取高达50%至60%的佣金。在某些情况下,可能需要额外5-10%的佣金来清洗资金,并通过比特币等优先支付方式将其交付给主要运营商。

五种寻找 "Domain Admin" 运行的进程的方法

本文在大多数情况下,都将重点关注运行域管理进程的系统。不过即便如此,我还是要介绍一下很多渗透测试人员用来获取域管理员权限的标准过程。

1.识别目标系统和应用程序;

2.识别潜在的漏洞;

3.利用漏洞获取初始访问权限;

4.升级受感染系统的权限;

5.在本地或远程系统上找到域管理进程或身份验证令牌;

6.通过发送本地管理员的密码哈希,破解密码或使用mimikatz这样的工具来转储密码,来对运行域管理进程的远程系统进行身份验证;

7.进入到域管理过程;

8.创建一个域管理;

本地检查

请务必首先检查最初被破坏的系统,如果你已经存在于域管理进程中,那么在网络上运行真的没什么意义了。以下是使用本机命令检查是否有任何域管理进程正在运行的简单方法:

1.运行以下命令以获取域管理员列表:net group “Domain Admins” /domain;

2.运行Tasklist /v命令以列出进程和进程用户,运行该过程的帐户应该在第7列;

3.将任务列表与域管理员列表交叉引用,查看你是否进入域管理进程中;

如果域管理进程始终是在最初受到攻击的系统上运行,那就太好了,但这属于理想的情况。所以接下来的四种技术将帮助你在各种情况下的远程域系统上找到域管理进程。

查询域控制器的活动域用户会话

下面是我提供的一些基本步骤,以获得具有域用户权限的活动域管理会话的系统列表。

1.使用LDAP查询或net命令从“域控制器”OU中收集域控制器的列表,以下是我用过的一个net命令:net group “Domain Controllers” /domain。

请注意:虽然OU是域控制器列表的最佳来源,但前提是,你要对受信任域完成枚举并监控这些域控制器的过程。或者,你可以通过DNS查找它们:Nslookup –type=SRV _ldap._tcp.

2.使用LDAP查询或net命令从“域管理员”组中收集域管理员的列表。以下是我用过的一个net命令:net group “Domain Admins” /domain。

3.通过使用Netsess.exe查询每个域控制器,收集所有活动域会话的列表。 Netsess工具是Joe Richards提供的一个很棒的工具,它里面包含了本地Windows函数“netsessionenum”。该函数可以返回活动会话的IP地址,域帐户,会话启动时间和空闲时间。以下是我用过的一个net命令:Netsess.exe –h。

4.将Domain Admin列表与活动会话列表交叉引用,以确定哪些IP地址上有活动的域令牌。在更安全的环境中,你可能需要等待具有域管理员权限的域管理员或服务帐户在网络上执行此操作。不过这意味着我需要多次运行这个过程,或者把它编写出来。下面是一个使用了netsess的非常快速和具有攻击力的Windows命令行脚本。

FOR /F %i in (dcs.txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul > sessions.txt && 
FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a

不过请注意,dcs.txt有一个域控制器列表,admins.txt有一个Domain Admins列表。

为此,我编写了一个名为Get Domain Admins(GDA)的基本批处理脚本,它可以自动下载整个过程。readme文件中列出了其中的依赖关系,我还为Windows Dictionary攻击创建了一个名为Get Domain Users(GDU)的批处理文件,相似的选项,不过具有更多的依赖关系。如果你感兴趣,可点击上面的链接下载。

扫描用于运行任务的远程系统

当你在域系统上作为共享的本地管理员帐户运行时,就可以通过以下的脚本来扫描系统域管理任务。与以上的技术类似,你需要首先枚举Domain Admins。在下面的脚本中,ips.txt包含目标系统的列表,而names.txt包含域管理员的列表。

FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt &&
FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause

扫描NetBIOS信息的远程系统

某些Windows系统仍然允许用户通过NetBIOS查询查询登录用户,你可以使用本机nbtstat工具查询信息,在nbtstat结果中,用户名由“<03>”表示。

1.下面是另一个快速而具有攻击的Windows命令行脚本,它将扫描远程系统,找到活动的Domain Admins会话。注意:该脚本可以作为非域用户运行。

for /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

2.你也可以使用运行速度稍快的nbtscan工具,下面是另一个基本的脚本命令:

for /F %i in (ips.txt) do @echo[+] Checking %i && nbtscan -f %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i

用于身份验证令牌远程系统的PSExec Shell喷洒技术

Psexec“Shell spray”是在Metasploit中的Psexec模块的数百个系统上安装Shell(通常是meterpreter),从而使用共享的本地管理凭证。许多测试人员使用此方法与其他Metasploit功能一起来识别域管理令牌。虽然这是我最不喜欢的技术,但由于pentest社区的很多人都在积极使用它,我觉得我需要把它包括进来。

本文翻译自:https://sean.heelan.io/2019/03/05/automation-in-exploit-generation-with-exploit-templates/如若转载,请注明原文地址: https://www.4hou.com/web/16902.html
点赞 2
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论