ruadmin windows渗透
|
1 缘由 千辛万苦拿下的 webshell 不是 www-data 用户就是 networkservice 权限,要想拓展攻击面、扩大战果,提权,是必经之路,也是后渗透阶段成功的关键。windows 提权,常用手法包括搜寻本地明文密码、DB 命令执行提权、内核 exp 提权、dll 劫持提权、路径未带引号的服务提权、滥用高权 token 提权、三方软件提权,每种手法有各自的使用门槛及适用场景,通常需要多种措施并举,才能拿下目标。 其中,若能在目标上搜寻到密码,后续有几种利用方式:一是,可能为操作系统的密码,尝试登录系统账号,获取管理员的远程会话,如,RDP、telnet 等等;二是,可能为系统软件的密码,且这类软件内部具有命令执行模块,间接获得高权执行命令的能力,如,MSSQLServer、FTP 等等;三是,可能为远程管理软件的密码,从这类软件的客户端登录目标,获取管理员的远程控制权限,如,VNC、teamviewer 等等。但是,即便找到第二、三种方式的密码,对于稍微有运维经验的系统管理员来说,都可以轻松阻拦你的提权企图,比如,对 MSSQLServer 的 xp_cmdshell 模块降权,或,设置 VNC 的信任源 IP。相对而言,第一种方式,一旦找到密码,几乎没有门槛即可成功提权。 现在,我把焦点放在如何找出操作系统账号的密码上面。通常来说,我会先翻阅各类软件的配置文件,找到其中记录的明文密码,如,保存无人值守安装操作的密码文件(autounattend.xml)、保存 web 连接 DB 的密码文件(web.config);然后,用这些密码尝试登录 administrator 账号的远程桌面,若运气好,简单几步,已实现提权;最后,若无果,用这些密码尝试登录 administrators 群组内其他账号的远程桌面。这个流程中有三个问题,一是若目标未将 3389 暴露至公网将导致无法验证密码是否正确,二是用多个密码验证多个账号太过耗时,三是也想尝试常见弱口令却缺乏自动手段。 那么,我需要一个效率高、无依赖、体积小的本地账号密码暴破工具。嗯,win32 原生程序直接在目标机器上本地暴破所有操作系统账号,就它。这个工具要能帮我找到 are you admin? 的答案,所以,命名为 ruadmin: 2 实现 你知道,我移居 linux 多年,win32 忘得差不多了,所以,我找 MSDN 帮忙,花了两个晚上,基本上,我付予了 ruadmin 几个核心能力:高效精准验证账号密码、自动获取 OS 账号、内置高命中率弱口令、绿色无依赖不查杀、兼容 NT 架构的全版本系统。 高效验证账号密码。调用 LogonUser(),不通过任何网络协议,直接本地验证: 甚至能验证空密码的账号。另外,一个账号对应一个暴破线程,进一步提高效率: 自动获取操作系统用户名。调用 NetUserEnum() 获取包括隐藏账号(如 yangyangwithgnu$)在内的所有用户名: 其中,默认不暴破 guest。 内置高命中率基础弱口令字典。 我把常见弱口令字典集成进 ruadmin,包含中国人弱口令、外国人弱口令、黑客常用口令等近 4W 条: 自动生成社工密码字典。从经验来看,若常见弱口令暴不出来,十有八九管理员使用了与环境相关的字符作为密码,最常见的是,以社工关键字(的大小写组合)、特殊字符、基础弱口令等三部分组合而成的字符串作为密码。比如,某网站的域名为 foo.com,其中 foo 为关键字,administrator 的密码为 Foo@2017;又如,某主机名为 bar-web,其中 bar 为关键字,administrator 的密码为 BAR-8888;再如,administrators 群组内的一账号名为 admin_liucc,其中 liucc 为关键字,admin_liucc 的密码为 LiucC1qaz2wsx。为增加暴破成功率,我为 ruadmin 实现了自动生成这类模式的社工密码字典的功能。 社工关键字的所有大小写组合。以 abcd 为例,在各字母位置不变的情况下,大小写排列组合有 abcd、abcD、abCd、abCD、…、ABCD 共计 16 个。再一分析,每位有大写、小写两种可能,这与二进制非常类似。所以,我将字符串映射成相同位数的二进制,对应位若为 1 则应大写、否则小写。比如,字符串 abcd 有 2 ** 4 = 16 种大小写组合:0 – 0b0000 – abcd、1 – 0b0001 – abcD、2 – 0b0010 – abCd、3 – 0b0011 – abCD、4 – 0b0100 – aDcd、5 – 0b0101 – aBcD、…、15 – 0b1111 – ABCD。基于此算法,实现起来就容易了: 若字符串中的某些字符非字母,将导致生成重复项,所以采用 set 容器以自动剔重。 社工关键字的常见大小写组合。管理员采用社工属性的密码,目的肯定是方便记忆,对于 aBCdEf 这类大小写组合完全记不住,所以,并不需要将所有大小写排列组合都纳入密码字典中,经验来看,有八种非常好记:全小写(abcdef)、全大写(ABCDEF)、第一个小写其余大写(aBCDEF)、最后一个小写其余大写(ABCDEf)、第一个大写其余小写(Abcdef)、最后一个大写其余小写(abcdeF)、两头小写中间大写(aBCDEf)、两头大写中间小写(AbcdeF)。实现如下: 这是 ruadmin 当前选用的方式,如果原意,你可以调整代码,选用全量大小写排列组合。 特殊字符。键盘上能直接输入的特殊字符包括 共 31 个,为了不让生成的社工字典过余庞大,我只选用了其中最常见的 18 个,外加空格和空字符共计 20 个: 为什么不用一个字符串字面常量表示所有特殊字符?空字符。 生成社工字典。有了社工关键字(8 种常见大小写排列组合)、特殊字符(20 个常用)、基础弱口令字典(内置 4w),大概计算下生成的社工字典记录约 8 * 20 * 40,000 = 6,400,000,虽然不会超过 vector 的容量上限(max_size()),但也是不小的内存消耗,所以,我以时间换空间,在暴破密码时动态生成社工密码项: 另外,只用社工关键字作为密码项、只用基础弱口令作为密码项、只用社工关键字加基础弱口令(无特殊字符)作为密码项等三种需求也已函盖,其实每个增加空项即可: 其他。纯 win32 实现,无任何依赖;体积小,方便上传;没用恶意代码,不会触发 AV 报警;平台无关,x64 和 x86 都能运行;同时,在生成可执行文件时,我将 VS 工程设置为 project – properties – configuration properties – general – general – platform toolset – vs2015 – windows xp (v140_xp),这样,ruadmin 就能支持客户端系统 winXP~win10、服务端系统 server2003~server2016。 3 使用 即便默认参数,ruadmin 也能为你做很多事了: 你看,它自动帮你找出所有用户,甚至,剔掉了无用的 guest、加上了隐藏账号 homegroupuser$;另外,内置 4w 常见弱口令。在不给任何命令行参数情况下,1 分钟左右,暴破完毕,得到 3 个账号的密码:test1/000111222 使用常见弱口令、test0/test0 将用户名作为密码、administrator 为空密码。 如果觉得没必要暴破所有账号,只要暴破出一个即可,那么,可指定 –one-quit: 内置弱口令字典不够强悍,你可以用 –base-passwds-file 加载自己独家典藏的字典: 效果不错,又找暴出一个密码 yang/LOVE5201314。 单纯的常见弱口令字典还不够,无法暴破出其他账号,我得制作一个与目标环境相关的规则密码字典,然后用 –base-passwds-file 指定使用。规则密码字典生成工具,我推荐 hashcat、crunch,现以前者为例。对,hashcat 不仅是哈希暴破神器,也支持基于规则生成密码字典,规则库位于 hashcat/rules: 其中,dive.rule 内含规则最为丰富,选之。翻阅目标环境上的配置文件,找到个密码 h.t.j.d,与用户名 htjd 很对应,试过无果后,我将 h.t.j.d 视为基础信息存入 base.txt 中作为输入,让 dive.rule 模仿学习生成类似的规则密码字典,保存至 passwds.txt: 然后用 –user 指定暴破账号 htjd,并使用刚生成的规则密码字典 passwds.txt: 很快暴出密码 h/t.j.d!。 ruadmin 也具备一定社工字典生成能力。前面提过,大部份管理员习惯以社工关键字(的大小写组合)、特殊字符、基础弱口令等三部分组合而成的字符串作为密码。你把社工关键字 annil 放入 se.txt 中,结合一个外部小弱口令字典,尝试暴破 annil: 哇哦,这密码够长,且含大小写、特殊字符、数字,这么复杂都能暴出来,挺好,呵呵。不知道你注意到没,仅指定一个社工关键字、使用 1k 左右的基础小字典,通过 ruadmin 生成的社工字典居然达到 20w 左右,完全是级数暴增。所以,一旦使用 –se-keywords-file,我建议基础字典尽可能精简,否则暴破时间将非常长。 4 攻击 不要纸上谈兵,看我如何用 ruadmin 实现提权。 不论是命令注入、任意文件上传、代码执行,总之假设通过各种手段已经获得据点(webshell)。 上传 ruadmin。有 webshell,上传文件易如反掌,但我们上传的不是一般文件,而是可执行程序,得尽可能为程序运行铺平道路。从经验来看,有两点建议:一是上传目录方面,程序运行时可能生成临时文件,所以上传的目录最好具有读写权限,如 C:WindowsTemp 或 %temp% 是个选择;二是文件名方面,应考虑到 AV 的反应,基础名不要用 exp、agent、xxxx、info、hack、admin 等等这类带有明显攻击性的字样,可以随机化(如,用 amneo 就不错),扩展名方面,先在攻击端将其改为 txt,上传成功后再改回 exe,甚至,若目标环境禁止改名,采用未关联任何打开程序的扩展名(如,*.128),windows 允许在命令行中直接运行 *.128 这样的文件(这两条建议在你上传 exp 时也适用)。具体而言,我将 ruadmin.exe 改为 amneo.128,进入 webshell 的 File Manager 模块,上传目录定为 C:WindowsTemp,选择攻击端文件 amneo.128 上传: 采用内置密码暴破。进入 webshell 的 cmdShell 模块,不带任何命令行选项直接运行 amneo.128: ruadmin 默认选项,采用 39526 个字典项暴破自动获取的 8 个操作系统账号,半分钟后,显示未找到任何密码。 采用 web.config 中的密码暴破。显然,内置字典无效,前面分析过 web.config 中含有多个 DB 的密码:victim@2014、victim、victim2015、sf0618@sf0618、xtepxscm,我将其写入目标上的 p0.txt 中,指定使用 p0.txt 作为密码字典文件,运行后仍然无果: (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Win2003下IIS+PHP+MySQL+Zend配置步骤详解
- windows编译和使用tesseract(C++ api)
- 如何在东芝笔记本电脑和Windows 7上使用python进行文本到语
- windows自带应用xbox无法登陆:0x80070426:服务尚未启动
- 在Windows下的Java应用程序中编写C控制台应用程序
- .net – 在桌面下打开和关闭Windows 8触摸键盘tabtip
- Windows IIS PHP 5.2 安装与配置方法
- 【问题】no libsigar-amd64-winnt.dll in java.library.pat
- tfs – 在测试用例通过或失败时发送电子邮件警报
- PB6.5编译的程序 如何在Win7 和 Win10系统上脱离PB开发环境
- .net – WiX:Windows启动时如何注册应用程序启动
- windows-phone-8 – 新的Live磁贴在Windows Phon
- windows-phone-8 – 使用WNS for windows phone
- windows – 用户和内核之间的线程fs段寄存器切换
- Windows Phone – 在Windows Phone 8中设置广告
- windows-phone-8.1 – 如何检测在Windows 10 Mob
- Windows Phone应用程序仅在从商店下载时崩溃
- BAT脚本编写教程(比较易懂和全面)
- Windows Azure Powershell部署错误 – “远程服务
- Apache+php+mysql在windows下的安装与配置(图文)
