在渗透行动中,目标往往是获得整个内网的控制权,从而发动 APT(高级持续性威胁)攻击。但在更多时候,我们的起点只是一两台通过 0day / 1day 漏洞攻陷的机器。
横向渗透,就是在已经攻占部分内网主机的前提下,利用既有的资源尝试获取更多的凭据、更高的权限,进而达到控制整个内网、拥有最高权限、发动 APT 的目的
在横向渗透中,最先得到的主机,以及之后新得到的主机,会成为突破口、跳板。如同一个不断扩大的圆形,获得的主机越多,圆能触及之处越大,让其周遭的「横向」部分由未知成为已知。
在发动横向渗透时,你已经拿到了目标内网中至少一台机子,即已经进入对方的内网环境。在内网网络环境,你至少会有以下优势:
在内网行动时,同样需要蹑手蹑脚,小心行动,否则难免翻车。尤其是在初期,掌握资源不牢的时候,翻车很容易全盘出局。以下是一些需要时刻牢记的警惕之处:
横向渗透需要在保证自己安全的前提下将已攻占的主机最大化地利用。
常用姿势根据我自己对利用方式的分类,可以分为数据挖掘类、后门类、攻击类三大类,其危险性逐级递增。
这一类姿势注重的是主机上已保存的凭据等信息。在其中可能发现:
大家都爱勾选「保存密码」这个框框,对吧?管理员也有这个冲动。他可能在这个服务器上连了另一个服务器、登了某个管理后台,然后图方便勾了「保存密码」——你就有福了。
常见保存的密码:
利用方式: 使用各种保存的密码对应的提取工具(有的甚至不需要提取工具,直接在配置文件里明文储存的),得到更多的凭据。
Windows 10、Windows Server 2016 以前,任何已登录的账户都会在内存里缓存明文密码,据说是为了向下兼容性。而只要你有机子的管理员权限,就能够把它们从内存里面扯出来。
这样,如果你看到系统已经登录了其他用户,或者你当前是 0day 拿到的 SYSTEM 权限不知道管理员密码而管理员帐户在线,就可以用工具把他们的密码拖出来,充实密码库。
利用方式: 使用 mimikatz 提取内存中缓存的明文密码,得到更多凭据。对于虚拟机,可以 dump 其内存并用相关工具提取。
备注:
最新的系统(Windows 10、Windows Server 2016)中,明文密码缓存默认关闭,但仍然可以通过修改注册表相应配置开启,详情请 Google。
备注2:
即使不能导出明文密码,获得的 hash 在域环境中依然可以作为凭据使用。
有时候你能够以某个管理员帐户登录 Windows 系统,但是其他管理员账户并不在线,那就不能直接提取明文密码了。但是依然可以使用工具,虽然得不到明文,但是可以得到密码的 hash。
破解 Windows 的密码 hash 难度差异很大。对于Windows Server 2008 以前的系统,储存密码加密算法较弱,一个密码同时以 NTLM 与 LM 两种形式储存。以现有的彩虹表水平,14位(可能有误)以内的 NTLM 与 LM 哈希对可以秒破,无论其复杂度。但是对于之后的系统,默认只有 NTLM 哈希,只有简单的能破解。
利用方式:
使用哈希导出工具,导出系统所有用户的密码哈希,使用彩虹表、暴力方式或在线服务破解。
备注: 新的系统也可以通过修改系统配置致使密码由 LM 弱加密储存,但只在下次修改密码时生效。
与「保存密码」一样,「自动登录」也是一个具有诱惑力的框框。看看网管浏览器的历史记录,能不能发现一些奇怪的网址?
利用方式: 可以直接提取 cookies 并分析,但建议以浏览记录为导向。
数据库凭据,除了第一个中在数据库管理工具中偷懒保存的凭据,还有一些实在是不得不保存的:比如的确需要连接到一个数据库。
而拿到数据库凭据,不光可以充实密码库、拖库和删库跑路,如果是远程数据库,还可能拿下另一台主机。
利用方式: 寻找各种软件的配置文件、网站的配置文件,挖掘其中的数据库凭据。
备注: 很多情况下,拿到数据库的管理员账户,可以得到机子的管理员权限。更多请参见日数据库的旁门姿势 ,和Google 特定数据库远程执行 shell 的方法。
Linux 的 bash 也会出卖你的……你看看你主目录下有啥?看不到?给 ls 加上 -a 参数再看看。一个名叫 .bash_history 的文件记录了你所有在 bash 里的输入。
所以在拿到 shell 的情况下,就能很容易看到当前用户执行过的命令。要是里面有密码,那就爽歪歪了。
利用方式: cat 一下用户目录下的命令历史记录。
备注: 有的其他软件也会记录命令,用 ls -la 看看吧,反正不吃亏。
对,就是把密码写在上面的小本本。对,它真的存在,我遇到过。
利用方式: 全盘寻找奇怪的小本子,运气好能捡到一堆凭据。
资料文档往往不包含凭据,但是能提供更多网络架构之类的线索,为 APT 提供方便。
利用方式: 全盘寻找资料文档,常常与服务安装包或服务程序长在一起。
下载目录、QQ 下载文件里面都可能藏着有趣的东西。对我说的就是 QQ,你会遇到装 QQ 的服务器的。
利用方式: 找呗。
这里的姿势主要是在已攻占的主机上安装一些自己的程序,从而达到保有-扩展的目的。
最烦人的事之一,就是锅里的鸭子飞了,拿到手的服务器跑了。曾经拥有却不曾珍惜,直到失去才后悔莫及。多个主机多条路,保持已有的权限是很重要的。
方法其实不少,主要是不要懒得去搞。各种高精尖的后门暂且不提,有一个好用又简单的方法:关闭 Windows 远程桌面的强制网络级别的身份认证(对于 Windows 2008 及以后的系统),然后把辅助工具里的放大镜或者屏幕键盘什么的程序换成后门程序,乃至直接换成 cmd.exe,这样就能够在用不支持 NLA 的客户端时进入登录界面,打开辅助工具,得到一个 SYSTEM 权限的 shell。
有的网管克制住了保存密码的欲望,不过一旦部署了键盘记录器,只要他输入了密码就呜呼哀哉了。理想的键盘记录器应该自动启动、隐藏运行,然而现成的都不怎么符合。
以上的都是被动姿势,有的时候需要反攻主动出击。这些姿势潜在的收益很大,当然风险也更大。
因为同一子网内的主机之间的通信是二层的,所以在没有 ARP 表防污染措施的情况下,可以通过 ARP 协议固有的缺陷进行 ARP 污染,从而中间人攻击。
ARP 污染中间人攻击的原理不再赘述。在污染成功后,可以实现以下操作:
监听网络流量: 你可以监听到所有目标服务器到网关(或其他被污染目标)之间的所有网络流量。例如目标是一台没有使用 HTTPS 的网页登录服务器,则可以抓获所有登录凭据。
篡改网络流量:
你可以对网络流量进行任意篡改,实现增添删减流量内容,或者替换 SSL 证书监听加密通信。当然你的 SSL 证书不被接受的话很容易触发警告。
对于在内网环境中没有暴露在公网上的主机而言,网管很容易放松警惕。尤其是对于纯内网的机器,打补丁、软件升级较为繁琐,导致可能大量 0day 漏洞没有修补。于是可以进行漏洞扫描,用 0day 轻松拿下新的主机。
反向渗透,即在被攻占的主机上放置特殊程序,导致之后连上此服务器的主机(如网关机)被攻击。
这种操作包括但不限于使用病毒并祈求管理员把它下载下来并运行。也有利用协议漏洞或缺陷实现的。一个例子是 RDPInception。
还有一些其他的姿势,也有着相当作用。比如常规的 XSS 等。以下是一些内网渗透中的备忘录。
怎能忘了撞库!人都有惰性,网管也是人,他们总是倾向于在不同系统上使用同一个密码,或者有规律的密码。因此一个凭据的使用之处可能并不止一处。
所以,有事没事撞撞库(安全的前提下),可能有惊喜的发现。
在系统日志里面,你可以知道网管的在线高峰期是哪些,从而避开这些时间段,尽量减少撞车的可能。
域环境的渗透有很多其他的姿势,但因为我遇到的很少,经验不足以分享,所以也就没有提到。
有一点值得注意的是,如果一个账户在某台机子上改了密码,但是另一台机子上的先前的会话没有注销,那么抓下来的将会是旧密码。
社会工程学也是在渗透中常用的方法。我主观将其分为被动社工与主动社工。被动社工则是撞库、查库、搜索等手段,主动社工则是主动出击类似诈骗。具体方式已经超过了本文范围何况我也不熟,但还是可以拿密码库去撞撞网管的邮箱之类的。
内网渗透是很好玩的事情(尤其是对方比较菜的时候),有如一场解谜游戏,你需要用很少的已知发掘更多的线索,最终得到整局游戏的胜利。
同时,这也是一场有风险的游戏,尤其是没有得到对方允许而进行非法渗透的时候。本文并没有介绍如何保护自己的安全,因为这不是本文的重点。但希望搞事的时候,安全第一,怀有良心。
文由微信公众号:乌云安全