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

[HCTF 2018]WarmUp

  • 代码审计题目

  • ctrl+u 查看源码 发现信息 source.php  审计一下代码
  • <?php
    highlight_file(__FILE__);
    class emmm   //后端类 {
    public static function checkFile(&$page)   //page接收 但是没有对其赋值   &  符号表示可以在函数内部对page进行修改赋值 {
    $whitelist = ["source"=>"source.php","hint"=>"hint.php"];    //定义数组
    if (! isset($page) || !is_string($page)) {    // 第一个 waf page 必须是是字符串 并且不为空
    echo "you can't see it";
    return false;}
    if (in_array($page, $whitelist)) {
    return true;   //  第二个waf   page 在 whitelist数组中}
    $_page = mb_substr(   //page 就是  ? 之前的
    $page,
    0,
    mb_strpos($page . '?', '?')  //切片   但是切之前 把$page 拼接一个 ?   这个的目的就是为了快速找到这个 page 
    // 函数strpos :例如这个 strpops(word.?,?)  返回的就是 ? 所在的位置
    //mb_substr() 切片  把$page  进行切片  切的是是从 0 到 ?所在位数的位置  的位置
    // 这个组合的意思    page=php?    进行切片就是  php);
    if (in_array($_page, $whitelist)) {
    return true;}
    $_page = urldecode($page);  //下面这个就是重复的了  进行url解密(web自带所以这个不是waf)
    $_page = mb_substr(
    $_page,
    0,
    mb_strpos($_page . '?', '?')    // 意思就是   _page 必须加上  ?  然后前面的内容需要是在白名单中);
    if (in_array($_page, $whitelist)) {
    return true;}
    echo "you can't see it";
    return false;}}//  所以这个函数的作用就是  对我们输入的page  进行添加   一个  ?  然后获取前面的内容进行白名单判断
    if (! empty($_REQUEST['file'])  //file的参数不能空&& is_string($_REQUEST['file'])    // file是字符串&& emmm::checkFile($_REQUEST['file'])// 上面的意思) {
    include $_REQUEST['file'];    //文件包含 但是上面有条件
    exit;} else {
    echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  
    ?>
    

  • 还有一个信息

  • 然后开始构造 file的值
  • 条件 1、必须包含 source.php? 并且有寻找的ffffllllaaaagggg
  • file=source.php?ffffllllaaaagggg
  • 试一下

  • 没有啊

  • 那就接着上上级目录找

  • 找个4-5级目录找到
  • flag{1491864a-4a41-4dd0-929d-a6b364e1df43}
http://www.xdnf.cn/news/1440.html

相关文章:

  • ospf综合练习
  • 【编译原理】第三章 习题
  • 文件【Linux操作系统】
  • Dhtmlx Gantt教程
  • uniapp实现app自动更新
  • ollama本地搭建大模型
  • 伺服器用什么语言开发呢?做什么用什么?
  • Python流程控制
  • 前端面试场景题
  • Java标识符与关键字终极指南:从基础到高级应用
  • 影刀RPA怎么制作文生图,把网站上图片获取到本地文件夹工作流
  • Flutter 学习之旅 之 flutter 使用 【验证码】输入组件的简单封装
  • 安装Jupyter Notebook 之不断报错 差点放弃版
  • 基于Python将MongoDB文本数据通过text2vec-large-chinese模型向量化并存储到Milvus数据库的完整实现方案
  • “在中国,为中国” 英飞凌汽车业务正式发布中国本土化战略
  • 【调优】log日志海量数据分表后查询速度调优
  • 语法长难句
  • 破茧成蝶:阿里云应用服务器让传统 J2EE 应用无缝升级 AI 原生时代
  • 汽车可变转向比系统的全面认识
  • Python3(7) 数字类型
  • 穿越链路的旅程:深入理解计算机网络中的数据链路层
  • OpenVINO教程(五):实现YOLOv11+OpenVINO实时视频目标检测
  • Qt实战之将自定义插件(minGW)显示到Qt Creator列表的方法
  • Stable Baselines3 结合 gym 训练 CartPole 倒立摆
  • 【C++】vector扩容缩容
  • 2025/4/23 心得
  • 视频图片去水印处理图像 HitPaw Watermark Remover 软件工具WIN
  • MacOS中安装Python(homebrew,pyenv)
  • Java实现插入排序算法
  • 杭电oj(1087、1203、1003)题解