暑期练习web24:后台登陆(实验吧) md5返回值

解题连接:http://ctf5.shiyanbar.com/web/houtai/ffifdyop.php
上来就是常规的登陆界面,所以二话不说,先看源码
这里写图片描述

<!-- $password=$_POST['password'];
    $sql = "SELECT * FROM admin WHERE username = 'admin' and password = '".md5($password,true)."'";//password经md5加密
    $result=mysqli_query($link,$sql);//执行sql语句
        if(mysqli_num_rows($result)>0){//函数返回结果集中行的数目
            echo 'flag is :'.$flag;
        }
        else{
            echo '密码错误!';
        } -->

看到了最重要的一段,sql的那一句是要对比数据库中的admin和password,但发现他的password用MD5加密了(这是为了防止我们输入‘“or 这些符号绕过验证password)
先来说一下md5()这个函数

md5(string, raw) raw 可选,默认为false

true:返回16字符2进制格式(编码过后的二进制)

false:返回32字符16进制格式

简单来说就是 true将16进制的md5转化为字符了,如果某一字符串的md5恰好能够产生如’or ’之类的注入语句,就可以进行注入了.
这时候我们看到网址结尾的ffifdyop,那就拿这个试试把
这里写图片描述
先给大家看一下,直接md5(默认是false)
当参数是true时,果然就出现了’or’6
这里写图片描述
好,到了这一步,有些同学就要问了,为什么’or’6xxx 这个东西可以查询
这里先摆一下实例,确实可以
这里写图片描述

SELECT * FROM admin WHERE username = ‘admin’ and password = ‘'or6xxxx(随意)
把等号后面整个当成一个逻辑语句,这句话里,前面的”为空,即为0,但因为是or连接的,后面只要是个大于等于1的数,就为真了,而且由于sql是弱类型,所以后面接什么都可以
这里写图片描述
所以,这道题后面就这样解出来了
这里写图片描述
总结:本题本身难度不大,需要一定的脑洞,以及理解sql语句的特点

猜你喜欢

转载自blog.csdn.net/qq_41618162/article/details/82021114
今日推荐