[Hello-CTF]RCE-Labs超详细WP-Level7&Level8

Level 7

分析源码

- 直接定位到关键代码 `preg_match("/flag| /", $cmd)`
	- 这次的[WAF] WAF 直接匹配了 `flag` 和 空格

解题分析

  • 限制住了 flag, 可以通过通配符来绕过
  • 那限制住了 空格, 应该如何分割命令与参数
  • 这里就介绍几种方式, 来代替空格
    • $IFS 在终端中, 其的默认值是空格、制表符和换行符
      ?cmd=cat$IFS/fla?
      
    • %09 也就是Tab的 URL编码
      ?cmd=cat%09/fla?
      
  • 通过重定向的方式

?cmd=cat</fl"“ag
```
- 这段命令的意思是, 把/flag重定向给cat(这里使用”"进行绕过flag的过滤)

  • 使用 {}, 这个只在 Shell 中生效
    {cat,/f'l'ag}
    
  • 这里用到了 花括号扩展-Shell命令, 具体用法如下
    • 生成一系列字符串或路径
      • {a,b,c} 扩展为 abc
      • {1..5} 扩展为 1 2 3 4 5
      • {a..z} 扩展为从 az 的所有字母
    • 还可以组合使用
      • file_{1..3}.txt 扩展为 file_1.txt file_2.txt file_3.txt
      • echo {A,B}{1,2} 会输出 A1 A2 B1 B2

解题步骤

  • 这里就不截图了
  • 其实解析中已经给出很多个 Payload 了

Level 8

源码分析

  • 这里不在有WAF了, 不过我们执行的命令似乎也显示不出结果了
  • 定位到这句命令 system($cmd.">/dev/null 2>&1");
  • 如果看完了 探姬 写的注释
    • 应该明白了什么是 标准输出, 标准输入, 标准错误 吧(还不明白看下文解题分析内的讲解)
    • 而上文的这句代码 >/dev/null, 把 标准输出 丢进了 /dev/null 中, 并且 2>&1 把报错也当成正常输出, 都不在会显示了
  • 那如何把 flag 显示出来?

解题分析

  • 通过上面的分析, 明确了目标, 就是要把 标准输出 正常显示出来, 而不是输出到 /dev/null
  • 在解题前, 还是再学习一下 标准输出 这些概念(引用了一下官方的WP)
    • 标准输入(stdin):文件描述符为0,通常关联着终端键盘输入
    • 标准输出(stdout):文件描述符为1,通常关联着终端屏幕输出
    • 标准错误(stderr):文件描述符为2,通常关联着终端屏幕输出
    • 平时我们使用的"<“和”>"其实就相当于是使用"0<“和"1>”,下面是几种常见的使用示例:
      符号示例解释
      >echo "Hello" > file.txtecho 的输出重定向到 file.txt 文件
      <wc -l < file.txtfile.txt 作为 wc 命令的输入
      >>echo "World" >> file.txtecho 的输出以追加方式重定向到 file.txt
      <<cat << EOF将输入的文本作为 cat 命令的输入,直到遇到 EOF 结束
      <>cat <> file.txt以读写模式打开 file.txt 并将其内容作为输入
      $> \vert $echo “Override” $> \vert $ file.txt强制覆盖写入到 file.txt 文件,即使它具有写保护
      : >: > file.txtfile.txt 截断为0长度,或创建空文件
      >&nls >&2ls 的标准输出和错误输出重定向到文件描述符 n (如 2 为标准错误输出)
      m>&nexec 3>&1将文件描述符 3 重定向到描述符 1,即输出重定向到标准输出
      >&-exec >&-关闭标准输出
      <&nexec <&0输入来自文件描述符 0 (标准输入)
      m<&nexec 3<&0将文件描述符 3 重定向到描述符 0 (标准输入)
      <&-exec <&-关闭标准输入文件描述符
      <&n-exec <&0-重定向并关闭文件描述符 n (标准输入)
      >&n-exec >&1-重定向并关闭文件描述符 n (标准输出)
      • 注意: 第 6 行中, $> \vert $ 是 >|, 因为处于表格中 | 的渲染冲突无法正常显示, 所以使用这种格式

那怎么解题呢

  • 其实很简单, 只需要把后面的重定向截断就行
  • 即在原本命令后面添加一个 ; 分号
?cmd=cat /flag;

解题步骤

  • 直接上图, 不多说了
  • 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Haicaji

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值