LAMPSecurity: CTF6
项目地址:https://download.vulnhub.com/lampsecurity/ctf6.zip
是一个打包好的镜像文件
注意:导入 vmx 时一定要选择我已移动,否则没网
使用 Nmap 扫描出开放服务及操作系统版本

敏感信息泄露
/actions
这个路径泄露了源码,可以用 dirb 扫出来

/sql/db.sql
泄露了初始化数据库时的账号密码

弱口令
Widgets Inc
使用上面泄露的账号密码登录成功
1 | admin:adminpass |

phpMyAdmin
通过 SQL 注入漏洞我们可以拿到数据库 mysql 库中 user 的账号密码

1 | root:mysqlpass |
成功登录,可以打很多 Nday

未授权访问
Widgets Inc Log in
抓取登陆包修改参数 logged_in 为 1

SQL 注入
Widgets Inc id
点击 Read more

发现多了个 id 参数,推测为数字型,拼接 or 1=1 回显全部内容

Widgets Inc Login(两个)
漏洞点存在于登录框

使用 SQLMap 可以跑出 Payload

测试另一个参数也存在,所以是两个

Widgets Inc Manage Users Change password
进入到 Manage Users 页面点击 Change password

观察 URL 发现多了一个 id 参数

存在 SQL 注入漏洞

XSS
Widgets Inc Edit this event(两个存储)
点击编辑

植入两个 XSS Payload

进入博客内部还会执行渲染一次


任意用户名重置
Widgets Inc Update Username
首先创建两个账号
抓包 Update 更新 username

替换为其他用户 id
任意密码重置
Widgets Inc Change password
登录一个测试账号点击修改密码

抓包改 id 可以重置其他人密码

成功更改

RCE
Widgets Inc Add Event
这里存在任意文件上传漏洞

连接成功

提权
内核 udev 设备管理器(CVE-2009-1185)
查看内核版本

查看具体版本
1 | rpm -q kernel # RPM 系Linux |

搜索历史漏洞,首先排除 dos 系列,这只能让系统崩溃

复制脚本到当前目录下

udev 通过 netlink 套接字接收内核发出的 uevent(设备事件)
在旧版本中,udev 处理这些 uevent 时,没有对环境变量进行充分的过滤,导致攻击者可以注入如 LD_PRELOAD 这样的环境变量,进而使以 root 身份运行的 udevd 加载恶意共享库,执行任意代码
该脚本分为几个主要步骤:
- 编译一个 C 程序
udev.c,用于向 udevd 发送伪造的 uevent(携带恶意环境变量) - 编译一个恶意共享库
libno_ex.so.1.0,其_init()函数会在库被加载时自动执行,完成提权操作(将/tmp/suid设置为 suid root) - 编译一个简单的 suid 程序
/tmp/suid,用于获得 root shell - 执行
/tmp/udev,并传入一个参数(通常是 udevd 的 netlink 套接字所属进程的 PID),触发漏洞
编译恶意共享库
1 |
|
_init是 GCC 的构造函数,当共享库被加载时自动执行(类似于.init段)- 函数内部:
setgid(0)和setuid(0)将进程权限提升为 root(因为此时 udevd 本身是以 root 运行的,所以这些调用会成功)unsetenv("LD_PRELOAD")清除环境变量,避免递归加载- 执行 shell 命令:将
/tmp/suid的所有者改为 root,并设置 setuid 位
编译共享库
1 | gcc -o program.o -c program.c -fPIC |
-fPIC:生成位置无关代码,用于共享库-shared:创建共享库-nostartfiles:不链接标准启动文件,防止默认的_start干扰,确保_init是入口
创建简单的 suid 程序
1 | int main(void) { |
- 该程序将在被设置为 suid root 后,直接 spawn 一个 root shell
编译发送 uevent 的程序
这个程序的核心是向 udevd 的 netlink 套接字发送一个伪造的 uevent 消息,并携带 LD_PRELOAD 环境变量
1 | int main(int argc, char **argv) { |
查询该脚本对应的说明发现需要提供一个 Pid 进程号
1 | cat /proc/net/netlink |

重复多次提权成功

补充说明
本靶机 phpMyAdmin 可以直接打 Nday,所以不会记录