MD5加密后的SQL注入(骚操作)

前言

事情的起因是,我在看一篇大佬写的writeup,关于sniperoj-web的解析,在其中发现了一个关于MD5加密sql注入的骚操作,我便自己开始搭环境,准备复现一波

我这里利用的是dvwa的账号密码的环境

image-20191117094144398

5f4dcc3b5aa765d61d8327deb882cf99放到MD5解密网站解密为password,这我就不详细说了

实验过程

关于MD5加密sql注入,大佬是这样说的

image-20191117094459258

于是我之前搭建环境,进行了测试.(以下是我自己为了测试,写的代码)

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
<form action="" method="GET">
    USERNAME:<input type="text" name="username"><br />
    PASSWORD:<input type="text" name="password"><br />
    <input type="submit" name="sub">
</form>
</body>
</html>
<?php

$host = 'localhost';
$user = 'root';
$passwd = 'root';
if (isset($_GET['sub'])){
    $username = $_GET['username'];
    $password = $_GET['password'];
    $conn = new PDO("mysql:host=$host;dbname=dvwa", $user, $passwd);
    $sql = "SELECT * FROM users WHERE password = '".md5($password,true)."'"; // 重点在这里
    $q = $conn->query($sql);
    $res = $q->fetch();
    if ($username == 'admin' and $res['password'] == md5('password')){
        echo $username.'登录成功!';
    }
}else{
    echo "请登入!";
}

?>

大概的原理就是$sql = "SELECT * FROM users WHERE password = '".md5($password,true)."'";

上述的查询语句,如果$password= ffifdyop , md5后,276f722736c95d99e921722cf9ed621c , 再转成字符串: 'or'6<trash>

那么sql语句就成了SELECT * FROM users WHERE password = ''or'6<trash>' ,从而绕过

我们进行测试:

image-20191117095108380

参考文章

本文链接:

https://www.betao.cn/archives/md5sqlzr.html
1 + 6 =
快来做第一个评论的人吧~