開始我們的實驗
數字型注入
發現有一個下拉框,隨便選一個查詢,,並沒有在url里面去傳參,可以發現是用post(表單)方式提交的
根據上圖yy一下后台的邏輯:
$id = $_POST['id']
select 字段1,字段2 from 表名 where id = $id
正常情況下這里的$id值為(1~6),我們換成 1 or 1=1通過返回來看看后台會不會把這個邏輯去執行。
POST的請求我們需要抓包來測試,因為輸入框只有一個可選擇的表單,沒法直接構造語句
在輸入框選擇id,瀏覽器設置代理,提交,抓包,為了方便發送給Repeater模塊
根據剛才的邏輯,payload為:
可以發現除啦id=1的其他id也都返回出來啦
字符型注入
隨便輸入下,發現請求是通過url提交的,是一個get請求。
根據上圖返回yy下后台的邏輯
$uname=$_GET['kobe']
select 字段1,字段2 from 表名 where username='kobe';(在后台數據庫中字符串kobe不打單引號會報錯的)
構建payload
如果這個 kobe or 1=1 這樣會報錯的,因為會變成這樣,select 字段1,字段2 from 表名 where username='kobe or 1=1'
會被單引號處理掉,這個整體會被當做字符串,,而這個字符串在后台是不存在的。我們需要構造閉合,構造合法的SQL語句
kobe' or 1=1#' kobe' 把后台username前面的單引號閉合掉,#'或者-- ' 把后台username后面的單引號閉合掉
如果想直接在url里面提交的話,我們的payload要做url編碼