zoukankan      html  css  js  c++  java
  • [极客大挑战 2019]BuyFlag

    0x00 知识点

    php中的strcmp漏洞
    说明:

    int strcmp ( string $str1 , string $str2 )
    

    参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。

    可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0 ,
    也就是虽然报了错,但却判定其相等

    php中的is_numeric()漏洞

    is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断!

    0x01 解题

    查看源代码发现:

    <!--
    	~~~post money and password~~~
    if (isset($_POST['password'])) {
    	$password = $_POST['password'];
    	if (is_numeric($password)) {
    		echo "password can't be number</br>";
    	}elseif ($password == 404) {
    		echo "Password Right!</br>";
    	}
    }
    -->
    

    bp抓包:
    将user=1,且password=404%20

    提示我们与money=10000

    意到这题Cookie没有用上PHPSESSID,那么这题猜一下逻辑就是直接将我们提交的money与要求的1000000比较,不存在记录的过程.

    同时注意到,此题用到的是PHP 5.3.5,老版本PHP了。要求我们不能输入8位字符,而输入其他任何字符都会返回you have not enough money,loser~,合理猜测一下用的是strcmp,那么直接money[]=1就可以了。

  • 相关阅读:
    通知
    KVO详解
    KVC详解
    KVC/KVO总结
    结构体Struct
    检测文件(夹)大小
    NSFileHandle&&NSFileManage
    ***NSFileManager
    获取文件扩展名
    MySql数据库_03
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/12238883.html
Copyright © 2011-2022 走看看