• ctfshow-web9(奇妙的ffifdyop绕过)


    尝试万能密码登录,没有任何回显

    尝试扫描目录,这里不知道为啥御剑什么都扫不到,使用dirsearch可以扫到robots.txt

    查看robots协议

    访问下载index.phps

     查看index.phps

     简单审计一下php代码:

    1. $password=$_POST['password'];
    2. if(strlen($password)>10){
    3. die("password error");
    4. }

    首先验证用户提交的密码是否超过10个字符,如果超过,就终止脚本并显示密码错误消息

    我们可以去登录页面实际验证一下,输入长度超过10字符的密码,果然报错

    接着看sql查询语句:

    $sql="select * from user where username ='admin' and password ='".md5($password,true)."'";

    这段代码构建了一个 SQL 查询,但是它没有对用户输入进行适当的过滤或净化,很可能存在SQL注入,并且密码在数据库中储存为 MD5 散列值。

    继续往后看:

    $result=mysqli_query($con,$sql);

    关于mysqli_query()函数的定义和用法:

    mysqli_query( connection,query,resultmode;

    参数描述
    connection必需。规定要使用的 MySQL 连接。
    query必需,规定查询字符串。
    resultmode

    可选。一个常量。可以是下列值中的任意一个:

    • MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
    • MYSQLI_STORE_RESULT(默认

    这里执行了 SQL 查询并将结果存储在 $result 变量中,然后通过 mysqli_num_rows($result) 检查返回的结果集中是否有行数大于0的数据,如果有,表示登录成功,就会输出flag

    关于md5这个函数:md5(string,raw)

    参数描述
    string必需。规定要计算的字符串。
    raw

    可选。规定十六进制或二进制输出格式:

    • TRUE - 原始 16 字符二进制格式
    • FALSE - 默认。32 字符十六进制数

    如果成功则返回已计算的 MD5 散列,如果失败则返回 FALSE。 

    这里用到一个很奇妙的字符串 ffifdyop

    经过md5加密后为 276f722736c95d99e921722cf9ed621c 

    在转为字符串时会出现乱码 'or'6É]é!r,ùíb

    or后面的第一个字母只要不是0,都会被认为是true,从而实现sql注入的绕过

    使用该密码成功登录,拿到flag

    ctfshow{eec0857d-9b09-4196-b033-7b0e34f09147} 

  • 相关阅读:
    实例分割计算指标TP,FP,FN,F1(附代码)
    Day12数据链路层以及交换机基本命令
    实现统计本周每天的数量
    js知识之选择与循环
    今天面了个腾讯拿30k出来的,真是小母牛按门铃,牛逼到家了
    C# 第五章『面向对象』◆第7节:多态
    source insight context window不能显示上下文的问题
    vue + axios + mock
    【字符串处理函数】sprintf与snprintf
    Java json 格式化小工具兼容转义 json 串
  • 原文地址:https://blog.csdn.net/Myon5/article/details/133714311