zoukankan      html  css  js  c++  java
  • 刷 BUUCTF 记录 (持续更新)

    • BJDCTF2020  (只记录比较有意思的题) 

    Mark loves cat

    .git泄露,但是我是没扫到,从别人哪里嫖来的源码

     1 <?php
     2 
     3 include 'flag.php';
     4 
     5 $yds = "dog";
     6 $is = "cat";
     7 $handsome = 'yds';
     8 
     9 foreach($_POST as $x => $y){
    10     $$x = $y;
    11 }
    12 
    13 foreach($_GET as $x => $y){
    14     $$x = $$y;             //存在变量覆盖漏洞
    15 }
    16 
    17 foreach($_GET as $x => $y){    
    18     if($_GET['flag'] === $x && $x !== 'flag'){  
    19         exit($handsome);
    20     }
    21 }
    22 
    23 if(!isset($_GET['flag']) && !isset($_POST['flag'])){    
    24     exit($yds);
    25 }
    26 
    27 if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){  
    28     exit($is);
    29 }

       漏洞点在14行,  ’$$x=$$y‘   存在变量覆盖漏洞。覆盖原理  比如 传入 is=flag   则会变成$is=$flag,这样就把flag的值覆盖到is上了。

       有以下几种payload

    1)   get:   ?is=flag&flag=flag    post:什么也别传     

     根据最后一个if 

     

    先用flag变量覆盖is,然后再传入 flag=flag 则就输出了is 也就输出了flag

    注意 这里 如果  get:   ?is=flag       post:  flag=flag  是不行的,因为 post传入flag=flag过后 ,当前页面会创建一个变量$flag='flag'  最后就输出flag而不是真正的flag

    2)get:  ?yds=flag   post:什么也不传

    这是根据倒数第二个if

     

     我们覆盖了yds,并且get和post都没传入flag,则输出yds,也就输出了flag

    EzPHP

    这道题学到很多东西

    1)$_SERVER['QUERY_STRING'] 的正则绕过

     知识点:

    1.$_SERVER['query_string']


    原文链接 http://blog.sina.com.cn/s/blog_686999de0100jgda.html 1,http://localhost/aaa/ (打开aaa中的index.php) 结果: $_SERVER['QUERY_STRING'] = ""; $_SERVER['REQUEST_URI'] = "/aaa/"; $_SERVER['SCRIPT_NAME'] = "/aaa/index.php"; $_SERVER['PHP_SELF'] = "/aaa/index.php"; 2,http://localhost/aaa/?p=222 (附带查询) 结果: $_SERVER['QUERY_STRING'] = "p=222"; $_SERVER['REQUEST_URI'] = "/aaa/?p=222"; $_SERVER['SCRIPT_NAME'] = "/aaa/index.php"; $_SERVER['PHP_SELF'] = "/aaa/index.php"; 3,http://localhost/aaa/index.php?p=222&q=333 结果: $_SERVER['QUERY_STRING'] = "p=222&q=333"; $_SERVER['REQUEST_URI'] = "/aaa/index.php?p=222&q=333"; $_SERVER['SCRIPT_NAME'] = "/aaa/index.php"; $_SERVER['PHP_SELF'] = "/aaa/index.php"; 由实例可知: $_SERVER["QUERY_STRING"] 获取查询 语句,实例中可知,获取的是?后面的值 $_SERVER["REQUEST_URI"] 获取 http://localhost 后面的值,包括/ $_SERVER["SCRIPT_NAME"] 获取当前脚本的路径,如:index.php $_SERVER["PHP_SELF"] 当前正在执行脚本的文件名

    2.由于$_SERVER['QUERY_STRING']不会进行URLDecode,而$_GET[]会,所以只要进行url编码即可绕过:

    payload:   ?a=%73%68%65%6C%6C

     2)正则匹配之 %0a污染

    payload: ?debu=aqua_is_cute%0a

    • $_REQUEST 同时接受GET和POST的数据,并且POST具有更高的优先值

    这个优先级是由php的配置文件决定的,默认应该是post,因为我自己的电脑上并没有做过任何设定,但是post是先于get的,

     3)data://为协议

    第二个if之前处理的办法一直都是 php://input, 但是这里 需要我们post 一个debu的值来绕过正则,所以这里就只能用data://

      data为协议的使用方法

    data://text/plain,<?php phpinfo()?>
    data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

     和 php://input 一样 可以配合文件包含漏洞进行rce

    payload: 

     4)sha1绕过

     这个点遇到好多次了,数组绕过,这里值得注意的而是  extract()  函数会造成变量覆盖

     5)create_function()代码注入

    如此代码

      实际上这段代码的含义就和这段代码一致

     但是这里我又构造了如下代码

     

      攻击是失败的,不知道是不是我的方式不对,这里我进行了很多次尝试都失败了。但是如果代码完全可控,我们是可以进行注入的,例如

    可以看到传入 phpinfo();无回显,但是如果我们传入 }phpinfo();//

     这是因为此时我们注入的语句在函数之外,这样即使我们没有调用该函数,也会执行我们注入的语句。

     6)get_defined_vars();

    按照预期解的那种方法,这里 包含了 flag.php 就可以用get_defined_vars()获取到全部的变量

     最后就是来解这道题了,有好几种解法,搞了很久心态崩了,后来发现是再换了平台过后文件名变了,心态有点蹦,这里给两个师傅的参考网址

    1.https://blog.csdn.net/a3320315/article/details/104111260

    2.https://www.gem-love.com/ctf/770.html

    最后一个解题小总结:

    • 可以用  & | ^ ~ 运算来绕过字符过滤     //   这个实在是太重要了,这里的几个非预期都是值得学习与参考的地方,可以执行代码但是被过滤很多关键字与字符,可以用这几个运算绕过,但是这道题只用到了  ~运算 与 ^运算,得找个时间彻底研究一下吧

    Cookie is so stable

    又是模板注入,参考文章:https://zhuanlan.zhihu.com/p/28823933

    EasySearch

     知识点

    •  MD5碰撞
    import hashlib
    
    for i in range(1,10000000000):
        a = hashlib.md5(str(i).encode('utf-8')).hexdigest()
        if a[0:6] == '6d0bc1':
            print(a)
            print(i)
            break
    • ssl注入

    参考文章:1.https://blog.csdn.net/qq_40657585/article/details/84260844

                      2.https://www.cnblogs.com/yuzly/p/11226439.html

  • 相关阅读:
    洛谷P3384 【模板】树链剖分
    hdu3518 Boring counting(后缀数组)
    CSL 的密码(后缀数组)
    洛谷P3809 【模板】后缀排序
    洛谷P2387 [NOI2014]魔法森林(LCT)
    洛谷P3366 【模板】最小生成树(LCT)
    Stanford机器学习课程(Andrew Ng)
    操作系统存储器管理选择题精练
    实验12:Problem I: 成绩排序
    实验12:Problem H: 整型数组运算符重载
  • 原文地址:https://www.cnblogs.com/tlbjiayou/p/12564440.html
Copyright © 2011-2022 走看看