zoukankan      html  css  js  c++  java
  • [BJDCTF2020]Easy MD5

     抓包查看响应包。

    看来是md5注入。

    看一下md5函数

     对于ffifdyop这个字符串经过md5函数加密为16位原始二进制格式的字符串。

    content: ffifdyop
    hex: 276f722736c95d99e921722cf9ed621c
    raw: 'or'6xc9]x99xe9!r,xf9xedbx1c
    string: 'or'6]!r,b
    在mysql里面,在用作布尔型判断时,以1开头的字符串会被当做整型数。要注意的是这种情况是必须要有单引号括起来的,
    比如password=‘xxx’ or ‘1xxxxxxxxx’,那么就相当于password=‘xxx’ or 1
    也就相当于password=‘xxx’ or true,所以返回值就是true

    ffifdyop被当做参数经过md5函数加密传入到数据库,这时有'or'6的存在,这是个永真式,就可绕过sql语句对password的校验。

    传入得到一段php

    $a = $GET['a'];
    $b = $_GET['b'];
    
    if($a != $b && md5($a) == md5($b)){
        // wow, glzjin wants a girl friend.

    md5 sha1等函数无法处理数组,传入数组时会返回null,但null是等于null的。或者是md5碰撞都可绕过

    ?a[]=1&b[]=2

    加载到新的页面

     <?php
    error_reporting(0);
    include "flag.php";
    
    highlight_file(__FILE__);
    
    if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
        echo $flag;
    } 

    强制类型比较,无法利用md5碰撞,不会吧0e开头的当做科学技术法来比较,但是仍然可采用数组绕过。

    post传参得到flag

  • 相关阅读:
    leetcode: power of three 三种解法
    继续写java和socket
    node中的事件发射器
    谈一谈Crsf和XSS攻击
    谈一谈那些框架们
    【Mysql数据库】学习笔记
    【数据库】DML-增删改查-SQL实现
    【Jsp,Servlet初学总结】 含 cookie和session的使用
    struct和typedef struct彻底明白了
    Android 学习之路
  • 原文地址:https://www.cnblogs.com/akger/p/15065522.html
Copyright © 2011-2022 走看看