快捷搜索:  网络  后门  扫描  渗透  CVE  木马  黑客  as

高收益的笨办法:暴破在Windows提权中的应用

*

千辛万苦拿下的 webshell 不是 www-data 用户就是 networkservice 权限,要想拓铺攻击面、扩铺战果,提权,是必经之路,也是后渗透排泄阶段成功的症结。windows 提权,我经常使用的伎俩包括 DB 命令执行提权、内核 exp 提权、dll 挟制提权、路径未带引号的服务提权、滥用高权 token 提权、三方软件提权,每一个伎俩有各自的使用门槛及适用处景,通常需要多种措施并举,才能拿下目标。

小我私人而言,习性先从 DB 入手,不管是否站库星散,web 终于得有 DB,一方面,DB 内部自带命令执行模块,另一方面,DB 常以 system 权限运行,那么,一旦拿下 DB,至关于获患了以 system 权限执行命令的能力,变向完成提权。要进入 DB,最直观的方式使用正确的账号/暗码登录,账号/暗码通常位于 web.config 中,有 webshell 就有 web.config,有 web.config 就有 DB 的账号/暗码,要是再有一点小运气运限,找到的是 SA 账号的暗码,基本上,你已经成功一半了。现在,用 SA 账号进入 DB 的 xp_cmdshell 模块执行命令“whoami”,得到报错信息“调用 CreateProcess 失败,错误代码: 5”,刚刚的阳光灿烂立马阴转暴雨,显著,治理员禁用了 DB 的命令执行功能(该模块仍可走访)。后续,把余下的攻击模型逐个尝试,无果。

抛却是不可能的。再琢磨琢磨,既然有 DB 的 SA 账号,何不用相同的暗码登录 OS 的 administrator 账号试试?先找到 web.config,由于该 web 连接了多个 DB,所以设置文件中出现了多项 DB 信息:

image.png

剔重后得到 5 个暗码:victim@201四、victim、victim201五、sf0618@sf061八、xtepxscm。怎么验证?用 administrator 作为用户名、上述五个暗码作为暗码字典,用 hydra 暴破 RDP,方便快捷。

不幸的是,目标环境没有将 3389 暴露至公网,好吧,只得端口转发。

端口转发大概需要三步,先在本人的 VPS 上确立端口对应,再在攻击端连接 VPS 上的转发端口,最后在 webshell 上转发。详细而言:第一步,用 sSocks(https://sourceforge.net/projects/ssocks/)在 VPS 上确立 3388 与 3389 端口对应关系,完成流量互通:

image.png

第二步,从攻击端连接 VPS 的 3388 端口,第一次尝试 administrator/victim@2014。建议用 freerdp 而非 rdesktop,因为前者支持遥程与内陆连接守候、文本复制粘贴、挂载遥程文件体系:

image.png

第三步,立即在大马上执行端口转发,可能需要连续多次点击 start:

image.png

注意,全部过程对步骤前后顺序敏感,VPS 上 rcsocks 端口映照好之后就可以不论了,先在攻击端执行 xfreerdp,让其会话保持,再在 webshell 上转发内网的 3389。

要是看到以下报错,则说明账号或暗码错误:

image.png

逐个尝试余下四个暗码,均失败。

administrators 群组中还有其他 6 成员,那么要尝试 5 × 6 次:

image.png

咬咬牙,虽然累但十来分钟也能试完,无果。都到这个节目眼了,要再也不试试常见弱口令?天,这不是累不累的问题了,哪怕只是 top100 的弱口令,手工验证也完全不可行!我需要自动化。

自动化,想到的第一个思路,尝试用 hydra 暴破内陆归环 127.0.0.1 的 RDP。hydra 官方再也不支持 windows,所以,我只得在 cygwin 中源码构建可执行程序。我把 hydra.exe 及相干依靠打包到单独目录,离开 cygwin 环境,在命令行中可正常运行 hydra.exe:

image.png

但,将 IP 配置为 127.0.0.1 后暴破 RDP 一直失败,原来,RDP 禁止从 127.0.0.1 登录。此路不通。

第二个思路,将前面提到的三步封装到脚本中,调用 xfreerdp 遥程登录(将用户名以及暗码作为字典)、调用 curl 驱动 webshell 端口转发。大概半小时,写了个 bash 脚本,验证其功能,发现即便正确的暗码,也不是 100% 成功,无线黑客,为何?前面提过,webshell 上转发端口流量的功能不太稳定,需要连续多试几次,那么将 curl 多调用几次或许能解决这个问题,详细几次合适,不好说。总感觉这类遥程验证的方式,不仅麻烦、效劳也低,我得想个更优的思路。

第三个思路,缕一缕,我要的是效劳高、无依靠、高精准、体积小的工具,嗯,win32 原生程序直接在目标机器上内陆暴破所有 OS 用户的暗码,就它。这个工具要能帮我找到 are you admin? 的谜底,所以,命名为 ruadmin。你知道,我移居 linux 多年,win32 忘得差不久不多了,所以,我找 MSDN 帮忙,花了两个晚上,基本上,我付予了 ruadmin 几个核心能力:高效精准验证账号暗码、自动获取 OS 账号、内置高掷中率弱口令、绿色无依靠不查杀、兼容 NT 架构的全版本体系。

高效验证账号暗码方面,调用 LogonUser(),不通过任何收集协定,直接内陆验证:

image.png

甚至能验证空暗码的账号。另外,一个账号对应一个暴破线程,进一步提高效劳:

image.png

自动获取 OS 账号方面,调用 NetUserEnum() 获取包括隐躲账号(如 yangyangwithgnu$)在内的所有效户账号:

image.png

要是以为破解所有账号耗时太长,你有两个选择,一是用 –user 指定暴破单一账号、二是用 –one-quit 告诉 ruadmin 只需暴破出任一账号立即结束。

内置高掷中率弱口令方面,我把常见弱口令字典集成进 ruadmin,字典包含中国人弱口令、外国人弱口令、黑客经常使用口令等近 4W 条:

image.png

不满意,你可以用 –passwds-file 指定本人的字典文件。

其他方面。纯 win32 完成,无任何依靠;没用恶意代码,不会触发 AV 报警;平台无关,x64 以及 x86 都能运行;同时,在生成可执行文件时,我将 VS 工程配置为 project – properties – configuration properties – general – general – platform toolset – vs2015 – windows xp (v140_xp),如许,ruadmin 就能支持客户端体系 winXP~win十、服务端体系 server_2003~server_2016。

归到先前的目标环境中,看我怎么样用 ruadmin 完成提权。

上传 ruadmin。有 webshell,上传文件轻而易举,但我们上传的不是一般文件,而是可执行程序,得绝可能为程序运行展平道路。从经验来看,有两点建议:一是上传目录方面,程序运行时可能生成暂且文件,所以上传的目录最佳具有读写权限,如 C:\Windows\Temp\ 或 %temp% 是个选择;二是文件名方面,招考虑到 AV 的反应,基础名不要用 exp、agent、xxxx、info、hack、admin 等等这种带有显然攻击性的字样,可以随机化(如,用 mneo 就不错),扩台甫方面,先在攻击端将其改成 txt,上传成功后再改归 exe,甚至,若目标环境禁止改名,采用未关联任何关上程序的扩台甫(如,*.128),windows 允许在命令行中直接 *.128 如许的文件。详细而言,我将 ruadmin.exe 改成 amneo.128,进入 webshell 的 File Manager 模块,上传目录定为 C:\Windows\Temp\,选择攻击端文件 amneo.128 上传:

image.png

采用内置暗码暴破。进入 webshell 的 CmdShell 模块,不带任何命令行选项直接运行 amneo.128:

image.png

ruadmin 采用默认选项,采用 39526 个字典项暴破自动获取的 8 个操作体系账号,半分钟后,显示未找到任何暗码。

采用 web.config 中的暗码暴破。显著,内置字典无效,前面阐发过 web.config 中含有多个 DB 的暗码:victim@201四、victim、victim201五、sf0618@sf061八、xtepxscm,我将其写入目标上的 p0.txt 中,指定使用 p0.txt 作为暗码字典文件,运行后仍旧无果:

image.png

采用社工暗码暴破。我得根据该目标的属型,重新制造一个具有社工型的字典。简单阐发发现,该网站域名含有 victim,而 DB 的暗码出现过 victim@201四、victim2015,那么,我可以合理猜测治理员暗码由 victim、特殊字符、年份等三部分组成,然则 victim 有大小写、特殊字符有十来个、年份也不确定,排列组合效果太多,必须找个工具基于规则自动生成。暗码字典生成,我推荐两个工具 hashcat、crunch,这里从前者为例。对滴,hashcat 不仅是哈希暴破神器,也支持基于规则生成暗码字典,规则库位于 hashcat/rules:

image.png

其中,dive.rule 含有我需要的规则,选之。我把 victim@201四、victim、victim201五、sf0618@sf061八、xtepxscm 视为基础信息存入 base.txt 中作为输入,让 dive.rule 模仿学习生成类似的暗码字典,保存至 passwds.txt:

image.png

生成的字典有 26w 个,目标上有 8 个账号,也就要枚举 268446 × 8 次,通过 webshell 执行耗时较长的命令时,页面将报超时错误,没法正常显示程序运行效果,所以,将命令执行效果重定向到文本中:

image.png

大概十分钟以后 foo.txt 体积达到 1k 左右,说明命令执行实现,查看 foo.txt:

image.png

成功暴破出两个治理员账号的暗码。

以治理员身份登录遥程桌面,完成提权。组合使用目标上的 webshell、VPS 上的 rcsocks、攻击端上的 xfreerdp 将内网的 RDP 端口转发至公网后,输入 administrator/Victim@2017 成功登录目标:

image.png

某些环境限制了 RDP 源 IP,即便做了端口转发也没法登录。没关系,既然我有治理员的暗码,那么只需找到类似 linux 上的 su 命令,也能够以治理员身份执行任意命令。windows 上的 runas 就具备这个功能,但它无法将暗码作为命令行参数中,所以,用支持在命令行参数中输入暗码的开源版本 cpau(http://www.joeware.net/freetools/tools/cpau/)。详细要执行什么命令?根据各人喜欢,我会直接反弹一个治理员权限的 meterpreter。运行 cpau:

image.png

其中,我将 cpau.exe 重命名为 asdf.64,tybdf.16 为 msfvenom 生成的反弹 payload。很快将获得治理员的 meterpreter:

image.png

当然,ruadmin 并不完善,两个致命伤你有必要了解,以评估是否具备使用环境。第一,对于开启试错锁定账号策略的环境,ruadmin 极可能导致账号被锁,存在影响营业的危害,我建议你用 –user 指定一个普通账号先测试体系是否开启锁定账号的策略,再做下一步打算;第二,ruadmin 使用的暗码验证机制将导致生成大批登录失败的日记,可能引起治理员、AV 的注意,我没啥能建议,自求多福。

从近期把 ruadmin 投入实战中的结果来看,成绩喜人!针对提权,大部份攻击者也就会 DB 命令执行、内核 exp 这两招,略微有一定道行的会翻下存放明文暗码的文件、找下存在设置缺点的服务,再高端点的会盗用特权 token、攻击万能钥匙,而低门槛的内陆暴破,却很少被纳入“正统”提权伎俩名录中,究其缘故起因,大概有三:一是,完全没想这个意识,至多用 hydra 遥程暴破下 RDP;二是,有这个意识,但缺乏类似 ruadmin 这种不依靠任何协定的内陆暴破工具;三是,暴破乃是脚本小子的举动,进不了大黑阔的法眼。目标驱动,为了完成提权,暴破这个高收益的笨办法,你最少应该尝试。

后记

a、谢谢 Shad0wpf、qglfnt 两位就细节的讨论;

b、hydra4win.exe、ruadmin.exe 请自取,ruadmin 代码将绝快开源

*

您可能还会对下面的文章感兴趣: