web安全漏洞的本質:漏洞特定函式,傳入可控變數,過濾形式,
sql注入原理本質:攻擊者構造惡意的sql陳述句帶入可能存在對資料庫操作的可控變數如id,由于對特定函式沒有經過嚴格的過濾,就導致了攻擊者直接對資料庫進行查詢等操作,
<?php
header("Content-Type: text/html; charset=utf-8");
$id=$_GET['id'];
$conn=mysql_connect('localhost','root','root');//連接資料庫
mysql_select_db('javaweb-bbs',$conn);//選擇資料庫名為javaweb-bss的資料庫
$sql="select * from sys_article where id = $id";//組合定義SQL陳述句
echo $sql.'<hr>';//輸出變數sql
$result=mysql_query($sql);//執行變數sql里的SQL陳述句
if($row=mysql_fetch_array($result)){ //對執行的結果進行顯示
echo $row['title'].'<hr>';
echo $row['content'].'<hr>';
}
?>
//http://127.0.0.1/title.php?id=1
如上述php代碼中檔案名:title.php,引數:id,傳入引數值:1
正常傳入引數id=1,sql陳述句 $sql=“select * from sys_article where id = 1”;
構造后id=1 order by 5,sql陳述句 $sql=“select * from sys_article where id = 1 order by 5”;
那么這樣構造后就會導致直接對資料庫進行一些操作
判斷是否存在注入點
方法1
http://127.0.0.1/title.php?id=1 and 1=1 頁面正常
http://127.0.0.1/title.php?id=1 and 1=2 頁面錯誤
就表示可能存在sql注入
select * from sys_article where id = 1 and 1=1 頁面正常
select * from sys_article where id = 1 and 1=2 頁面錯誤
具體原因 and 1=1 為真 and 1=2 為假
方法2
http://127.0.0.1/title.php?id=1 a
直接在引數后面加上任意字符,讓傳入的引數變得不可控
過濾形式
這里常規的過濾方式就是對$id進行過濾,因為id是傳入進來的引數,比如限制它只能傳入數字這樣就行了一個過濾
Mysql資料庫結構
Mysql資料庫 資料庫A對應網站A,資料庫下有表名、列名、資料

資料庫下的表名

查詢表里面的欄位

id為1的欄位

mysql的資料結構大致就這樣
單引數與多引數
單引數 http://127.0.0.1/title.php?id=1
多引數 http://127.0.0.1/title.php?id=1&page=2&name=3
無引數 http://127.0.0.1/title.php
單引數直接通過對應的id傳參來測驗,多引數的話就嘗試發現每個傳入的引數點哪一個存在漏洞,如id存在漏洞
http://127.0.0.1/title.php?id=1 and 1=1&page=2&name=3
http://127.0.0.1/title.php?id=1 and 1=2&page=2&name=3
那么工具測驗的話就可以把id反正后面,也可以給一個引數讓工具來判斷
http://127.0.0.1/title.php?page=2&name=3&id=1
無引數可能無法注入,那么無引數就可以通過post請求傳參來判斷sql注入點
搭建sql注入環境sqli-labs
https://github.com/Audi-1/sqli-labs

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279552.html
標籤:其他
