[Hello-CTF]RCE-Labs超详细WP-Level9

分析源码

  • 与前几关不同的语句依旧这个函数
    preg_match("/[A-Za-z\"%*+,-.\/:;=>?@[\]^`|]/", $cmd)
    
  • 这关WAF过滤了更多的字符
    • 只剩下了 数字, \, 单引号, 和 $, 空格等可以使用

解题分析

  • 这里就想到了 bash 终端可以将八进制转义作为命令进行执行
    • 注意的是, 这里要求的是 bash
    • 所以在注释中, 探姬就说了, 这个靶场的 Dockerfile 通过执行如下命令
      RUN ln -sf /bin/bash /bin/sh
      
    • 首先要知道 PHP 的 system 命令执行的是 /bin/sh, 而 /bin/sh 只是个软连接
    • 而靶场使用的底层镜像 php:7.3-fpm-alpine 默认指向的 /bin/busybox
      • /bin/busybox 不是 bash, 并不支持八进制转义
    • 所以要通过上述命令重新定义软链
  • 那接着就讲一下如何使用八进制转义进行命令执行
    • 使用 $'' 的格式可以进行八进制转义进行命令执行
      • 比如
        ls -> $'\154\163'
        
    • 但是如果要是命令中带有参数也是吗
      • 比如
        ls -l -> $'\154\163\40\55\154'
        
      • 尝试了一下, 发现不行
    • 如果带有参数的话, 空格需要单独拿出来
      • 比如
        ls -l -> $'\154\163' $'\55\154'
        

解题步骤

  • 上文大概简述了解题思路
    • 探姬贴心的在靶场中留了一个 exp.php
      • 而这个 EXP, 就来源于探姬写的工具(下面是在线网址和项目地址)
        • https://github.com/ProbiusOfficial/bashFuck
        • https://probiusofficial.github.io/bashFuck/
  • 使用 exp.php 生成 payload
    • 在这里插入图片描述

    • 这个 exp.php 其实包含了后面几关

  • 这个时候直接拿 payload 去用就可以了(真的吗)
    • 记得上面说的, 带有参数的命令, 空格要单独拿出来吗?
  • 所以最后 payload 如下
    $'\143\141\164' $'\57\146\154\141\147'
    
  • 在这里插入图片描述

扩展

$'...'的用法

处理特殊字符

echo $'Hello\nWorld'  
# 输出:
# Hello
# World

使用 Unicode 或十六/八进制字符

echo $'\u4F60\u597D'  # 输出 "你好"
echo $'\xE4\xBD\xA0\xE5\xA5\xBD'  # 也是 "你好"

处理引号和退格

echo $'It\'s a test'  # 输出:It's a test
echo $'ABC\bD'  # 输出:ABD (\b 退格,去掉 C)

结合变量

name="World"
echo $'Hello\n'$name  
# 输出:
# Hello
# World
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Haicaji

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

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

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

打赏作者

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

抵扣说明:

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

余额充值