zoukankan      html  css  js  c++  java
  • 代码审计

    打开题目,又是MD5函数

    以为又是一个套路直接md5('240610708') == md5('QNKCDZO')去尝试

    结果构造http://123.206.87.240:9009/18.php?username=240610708&&password=QNKCDZO一直失败

    后来再审计代码,发现判断的时候用了===,

    所以而刚才我用那个的方法MD5只能==弱类型绕过

    后来上网搜索发现,MD5无法处理数组

    后来构造如下链接,拿到flag

    题目

    在这里插入图片描述

    0x01 start

    1.分析

    这是一道代码审计的题目。
    所以先来看看代码。

    <?php
    if(eregi("hackerDJ",$_GET[id])) {
    echo("
    
    not allowed!
    
    ");
    exit();
    }
    $_GET[id] = urldecode($_GET[id]);
    if($_GET[id] == "hackerDJ")
    {
    echo "
    Access granted!
    
    ";
    echo "
    flag
    
    ";
    }
    ?>
    

    来整理一下说明缘由。
    在这里插入图片描述
    种类的eregi就是在字符串中进行匹配
    然后urldecode这个,因为最近就在看代码审计,所以这个还是很熟悉的,如果有需要,请看。

    目标

    所以我们现在就要对这个进行绕过了。

    2. 绕过

    首先我们想到的是二次转码,浏览器转码一次,然后urldecode转码一次,那么我们就可以利用%25,转码之后就是%,那么我们只要找到字母的url编码就可以成功绕过了。

    构造payload:
    在这里插入图片描述

    ?id=%25%61ackerDJ
    
    • 1

    在这里插入图片描述

    首先分析代码,函数要求变量$temp不能存在1~9之间的数字,

    最后,又要求$temp=3735929054;

    这本来是自相矛盾的,但php在转码时会把16进制转化为十进制.于是把

    3735929054转换成16进制为0xdeadc0de,记得带上0x;

    构造payload

    ?password=0xdeadc0de

    拿到flag

    ereg正则%00截断的一道代码审计:

    1. if (isset ($_GET['password'])) {
    2. if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
    3. {
    4. echo '<p>You password must be alphanumeric</p>';
    5. }
    6. else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
    7. {
    8. if (strpos ($_GET['password'], '*-*') !== FALSE)
    9. {
    10. die('Flag: ' . $flag);
    11. }
    12. else
    13. {
    14. echo('<p>*-* have not been found</p>');
    15. }
    16. }
    17. else
    18. {
    19. echo '<p>Invalid password</p>';
    20. }
    21. }

    分析代码,有两个函数需要注意:

    1. ereg() 正则限制了password格式,只能是一个或者多个数字、大小写字母
    2. strpos() 查找某字符串在另一字符串中第一次出现的位置(区分大小写),本题中需要匹配到"*-*"才能输出flag

    解题方法1:利用数组绕过这两个函数

    ereg() 只能处理字符串,而password是数组,所以返回的是null,三个等号的时候不会进行类型转换。所以null!==false。

    strpos() 的参数同样不能够是数组,所以返回的依旧是null,null!==false也正确。

    Payload:http://123.206.87.240:9009/5.php?password[]=1

    解题方法2:%00截断绕过正则匹配

    判断是不是长度<8且>9999999

    判断是不是有“*-*”

    Payload:http://123.206.87.240:9009/5.php?password=1e9%00*-*

  • 相关阅读:
    [LintCode] 1563. Shortest path to the destination
    [LintCode] 1835. Number of Ways to Stay in the Same Place After Some Steps I
    [Algo] 140. Maximum Path Sum Binary Tree III
    [Algo] 141. Binary Tree Path Sum To Target III
    [LintCode] 597. Subtree with Maximum Average
    [LintCode] 596. Minimum Subtree
    [LC] 16. 3Sum Closest
    [Algo] 182. 2 Sum All Pair II
    [Algo] 181. 2 Sum All Pair I
    创建ORACLE 查询用户
  • 原文地址:https://www.cnblogs.com/lzkalislw/p/13526368.html
Copyright © 2011-2022 走看看