利用md5获取数据库信息

源码:

文件名:md5-sql.php

<?php
header("Content-Type:text/html;charset=gb2312");
error_reporting(0);
$link=mysql_connect('localhost:3306','root','');
if(!$link){
	die('Could not connect to MySQL:'. mysql_error());
}
//选择数据库
$db=mysql_select_db("security",$link);
if(!$db)
{
	echo 'select db error';
	exit();
}
//执行sql
$password=$_GET['password'];
$sql="SELECT * FROM users WHERE password = '".md5($password,ture)."'";
var_dump($sql);
$result=mysql_query($sql) or die('<pre>'.mysql_error().'</pre>');
echo "id user password"."<br>";
while($row=mysql_fetch_array($result)){

echo $row[0]."&nbsp".$row[1]."&nbsp".$row[2]."<br>";
}
mysql_close($link);
?>

分析代码:

这里的sql语句是

$sql="SELECT * FROM users WHERE password = '".md5($password,ture)."'";

其中md5运算函数有一个true参数,它的作用是将md5后的hex转换成字符串,这里如果后的字符串有单引号之类的字符就可以注入了。
比如字符串:ffifdyop,md5后,276f722736c95d99e921722cf9ed621c
将其转成字符串的话就是**‘or’6蒥欓!r,b’’**。

可以看到起字符串类似于 ‘ or ‘6…………这样的字符串,其中’or’6是个永真的条件,如果把它放到查询中就可以where语句的判断,比如我们在url输入password=ffifdyop可以看到dump出的数据,只要or后面以非零数开头,都是永真条件,不管后面是什么

数据库的真实数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1IUpnKqP-1582296215605)(attach/md5-sql1.jpg)]

构造payload:

?password=ffifdyop

在这里插入图片描述

成功获取数据库user里面的数据。

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值