CTP WEB 100练(1/100)

这篇具有很好参考价值的文章主要介绍了CTP WEB 100练(1/100)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

考点:PHP代码审计

CTP WEB 100练(1/100),web安全,php

抓包发现source.php,访问下,出现了php代码

CTP WEB 100练(1/100),web安全,php

代码主体在这部分,满足三个条件:file不为空&file是字符串&checkFile通过

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  

然后就要读懂这个checkfile()的代码逻辑 ,然后进行绕过:

1、in_array(value,array,type):检查数组中是否存在某个值

value 必需。规定要在数组搜索的值。

array 必需。规定要搜索的数组。

搜索page中是否在whitelist,存在返回true,但page不能为空且要为字符串

            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }

whitelist 表示白名单包含source.php和hint.php,再访问hint.php看看,说flag在ffffllllaaaagggg里面

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];

CTP WEB 100练(1/100),web安全,php

2、搜索_page中是否在whitelist,存在返回true

_page截取的是page从第0位到?出现的位置

$_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

mb_substr( $str, $start, $length, $encoding ) 截断函数

$str,需要截断的字符串

$start,截断开始处

$length,长度(1就代表一个中文字符)

$encoding,编码,我设为 utf-8

mb_strpos (haystack ,needle )查找字符串needle在字符串haystack中首次出现的位置

3、_page为urldecode后的page,然后截取_page在?前的字符串赋值给_page,最后判断_page是否在whitelist中,是就返回true

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;

最后构造的payload是/?file=source.php?../../../../../ffffllllaaaagggg,或者source换成hint

以上分析了一通 其实我还是有点懵。。。文章来源地址https://www.toymoban.com/news/detail-524423.html

到了这里,关于CTP WEB 100练(1/100)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web安全php基础_php之string对象详解

    字符串变量用于包含有字符的值。 在创建字符串之后,我们就可以对它进行操作了。您可以直接在函数中使用字符串,或者把它存储在变量中。 在下面的实例中,我们创建一个名为 txt 的字符串变量,并赋值为 “Hello world!” 。然后我们输出 txt 变量的值: 输出如下 在 PHP 中

    2024年02月12日
    浏览(45)
  • web安全php基础_php常量及可变变量(魔术变量)

    php中常量是一个简单值的标识符。该值在脚本中不能改变。 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。 常量有两点需要特别注意的地方 常量在整个脚本中都可以使用。 常量值被定义后,在脚本的其他任何地方都不

    2024年02月12日
    浏览(56)
  • 《WEB安全漏洞100讲》(第4讲)CSRF漏洞

    CSRF(Cross-site request forgery),跨站请求伪造,简写 CSRF/XSRF。指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作

    2023年04月08日
    浏览(44)
  • web安全php基础_phpstudy pro安装

    phpstudy是一个php运行环境的集成包,用户不需要去配置运行环境,就可以使用,phpstudy不仅是一款比较好用的php调试环境工具,并且还包括了开发工具和常用手册,对于新手是有很大帮助的 1.进入PhPstudy官网,下载需要的版本https://www.xp.cn/ 或是嫌麻烦,直接下载我准备好的sh

    2024年02月12日
    浏览(50)
  • 小迪安全20WEB 攻防-PHP 特性&缺陷对比函数&CTF 考点&CMS 审计实例

    #研究对象 PHP代码漏洞(代码问题) # 知识点: 1 、过滤函数缺陷绕过 2 、 CTF 考点与代码审计 一、原理-缺陷函数-使用讲解-本地 内置函数: 大部分是比较函数(过滤时使用的函数) (1)、== 与 === : 参考: PHP 浅谈 == 和=== 中,数字和字符串比较的问题。_php 数字==字符串

    2024年01月19日
    浏览(56)
  • web安全-文件上传漏洞-图片马制作-相关php函数讲解-upload靶场通关详细教学(3)

    制作图片马有两种方法,一种是文本方式打开,末尾粘贴一句话木马,令一种是使用命令进行合成。 方法1 首先准备好一个图片(这里是1.png)。 将一个图片以文本格式打开(这里用的Notepad++,以记事本方式打开修改也能连接成功,不过修改后图片无法正常显示了)。 后面粘

    2024年02月06日
    浏览(56)
  • [CTF/网络安全] 攻防世界 Web_php_include 解题详析(php伪协议、data伪协议、file伪协议)

    这段代码首先通过 show_source(__FILE__) 显示当前文件的源代码,然后通过 $_GET[\\\'hello\\\'] 显示 URL 参数中名为 hello 的值。 接下来,代码使用 $_GET[\\\'page\\\'] 获取 URL 参数中名为 “page” 的值,并进行字符串替换,将 php:// 替换为空字符串 这是为了防止通过 URL 参数加载本地文件或其他可

    2024年02月08日
    浏览(48)
  • web安全php基础_echo,print,print_r,var_dump 的用处及区别

    在 PHP 中有两个基本的输出方式: echo 和 print。 PHP echo 语句 echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。 显示字符串 下面的实例演示了如何使用 echo 命令输出字符串(字符串可以包含 HTML 标签): 需要注意的是 echo(): 可以一次输出多个

    2024年02月12日
    浏览(48)
  • ctfshow web入门 php特性 web108-web112

    strrev() 反转字符串 ereg 存在空字符截断(只会匹配%00前面的字符),这个函数匹配到为true,没有匹配到为false,877为0x36d的十进制数值 payload: 类可以输出,就是当类被当作字符串执行,会调用__trosting魔术方法,这个类要有这个魔术方法,并且要有返回值才可以输出,这个值要可控

    2024年02月11日
    浏览(43)
  • WEB:Web_php_unserialize

            反序列化函数及绕过         正则表达式及绕过 源码解析(参考链接在最后)  从上述源码分析可知,需满足三个条件 1.要绕过wake up 函数 __wakeup() 是在反序列化操作中起作用的魔法函数,当unserialize的时候,会检查时候存在__wakeup()函数,如果存在的话,会优先调用

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包