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

PHP-trim

[题目信息]:

题目名称题目难度
PHP-trim1

[题目考点]:

trim() 函数移除字符串两侧的空白字符或其他预定义字符。

[Flag格式]:

SangFor{dl9hFiITmhQNAJysCgigAskyCZ6kQaDc}

[环境部署]:

docker-compose.yml文件或者docker tar原始文件。

http://分配ip:2059

[题目writeup]:

1、实验主页

2、源码分析

<?php
include('flag.php');
highlight_file(__FILE__);
error_reporting(0);
function filter($num){
    $num=str_replace("0x","1",$num);
    $num=str_replace("0","1",$num);
    $num=str_replace(".","1",$num);
    $num=str_replace("e","1",$num);
    $num=str_replace("+","1",$num);
    return $num;
}
$num=$_GET['num'];
if(is_numeric($num) and $num!=='36' and trim($num)!=='36' and filter($num)=='36'){
    if($num=='36'){
        echo $flag;
    }else{
        echo "hacker!!";
    }
}else{
    echo "hacker!!!";
} 

分析代码逻辑,使用了自定义函数filter()对$num进行过滤,将0x,0,e等字符替换为了1。这意味着将无法使用16进制,8进制等方法进行绕过。

is_numeric函数来判断用户输入是否为数字,并且if条件里规定trim($num)移除字符串两侧的字符不能等于36,但后面的if需要等于36才能输出flag。

此时可以编写脚本查看哪些字符可以使用

<?php
for ($i = 0; $i <= 128; $i++) {
    $a = chr($i) . '36';
    if (trim($a) !== '36' && is_numeric($a)) {
        echo urlencode(chr($i)) . "\n";
    }
}

发现%0C,也就是\f分页符可以利用,不会被trim过滤掉,所以payload为

?num=%0c36


http://www.kler.cn/a/539334.html

相关文章:

  • shell脚本控制——使用新的shell启动脚本
  • Kotlin Android 环境搭建
  • PHP 运算符
  • 信息科技伦理与道德3-2:智能决策
  • day44 QT核心机制
  • LIMO:上海交大的工作 “少即是多” LLM 推理
  • 2025_2_9 C语言中队列
  • Docker 部署 RabbitMQ | 自带延时队列
  • leetcode 做题思路快查
  • Docker 部署 Grafana 教程
  • LeetCode-二叉树展开为链表
  • 【实用技能】如何借助3D文档控件Aspose.3D, 在Java中无缝制作 3D 球体
  • Maven入门核心知识点总结
  • Maven 下载与配置教程:附百度网盘地址
  • brpc之Butex
  • windows11上,使用pipx安装Poetry,Poetry的安装路径是什么?
  • 数据结构与算法--实现链表的复制(链表中节点比较特殊,含有一个rand指针,指向任意一个节点)
  • 电脑运行黑屏是什么原因?原因及解决方法
  • PM2 与 Docker 结合使用:Node.js 应用的高效管理与部署
  • 项目的虚拟环境的搭建与pytorch依赖的下载
  • MyBatis-Plus快速使用
  • 【在线优化】【有源程序】基于遗传算法(GA)和粒子群优化(PSO)算法的MPPT控制策略
  • PHP的filter_var函数的安全问题
  • 相机开启状态下拔出SD卡导致的数据丢失问题及恢复方法
  • 蓝桥杯小白打卡第三天
  • 最短路径问题-------Dijkstra算法