本次練習來源pikachu平臺
檢測
單引號 :報錯
or 1=1# 數字型
’ or 1=1# 字符型用引號閉合,同時加註釋符號
and 1=1 數字型 and 1=1與原來一樣,不用註釋掉後面了
and 1=2 數字型 錯誤
’ or 1=1#
order by找數據數量等…
之後再補充一些常用的,比如繞過waf等
萬能密碼
萬能密碼是由於某些程序,通過採用判斷sql語句查詢結果的值是否大於0,來判斷用戶輸入數據的正確性造成的。當查詢之大於0時,代表用戶存在,返回true,代表登錄成功,否則返回false 代表登錄失敗。由於 ‘or 1=1–’ 在執行後,結果始終爲1,所以可以登錄成功。
類型判斷(數字vs字符)
1、數字型注入
當輸入的參數爲整形時,如果存在注入漏洞,可以認爲是數字型注入。
測試步驟:
(1) 加單引號,URL:www.text.com/text.php?id=3’
對應的sql:select * from table where id=3’ 這時sql語句出錯,程序無法正常從數據庫中查詢出數據,就會拋出異常;
(2) 加and 1=1 ,URL:www.text.com/text.php?id=3 and 1=1
對應的sql:select * from table where id=3’ and 1=1 語句執行正常,與原始頁面如任何差異;
(3) 加and 1=2,URL:www.text.com/text.php?id=3 and 1=2
對應的sql:select * from table where id=3 and 1=2 語句可以正常執行,但是無法查詢出結果,所以返回數據與原始網頁存在差異
如果滿足以上三點,則可以判斷該URL存在數字型注入。
2、字符型注入
當輸入的參數爲字符串時,稱爲字符型。字符型和數字型最大的一個區別在於,數字型不需要單引號來閉合,而字符串一般需要通過單引號來閉合的。
例如數字型語句:select * from table where id =3
則字符型如下:select * from table where name=’admin’
因此,在構造payload時通過閉合單引號可以成功執行語句:
測試步驟:
(1) 加單引號:select * from table where name=’admin’’
由於加單引號後變成三個單引號,則無法執行,程序會報錯;
(2) 加 ’and 1=1 此時sql 語句爲:select * from table where name=’admin’ and 1=1’ ,也無法進行注入,還需要通過註釋符號將其繞過;
(3) 加and 1=2— 此時sql語句爲:select * from table where name=’admin’ and 1=2 –’則會報錯
如果滿足以上三點,可以判斷該url爲字符型注入。
數字型注入(post)
測試–>猜測語句
$id=$_POST['id']
select 字段1,字段2 from 表名 where id=$id
比如這裏 id=2 or 1=1 # 爆出了所有信息(看render選項卡更清晰) 表示存在數字型注入
1.爆出顯位
1和2都行
2.數據庫名
3.表名
準備爆一下users表
4.字段名
5.查內容
insert/update型注入
僅記錄,請先面向搜索引擎務必搞懂原理
a’測試有報錯,可以使用xpath報錯注入
insert注入是在註冊處,update注入在更新資料處
抓包後發到repeater
delete注入
delete語句: delete froem users where id=1 and 1=1;
勿用or!整張表都會被刪除
多留言,然後刪除,抓包
發現id++(哦正常是把鼠標放在刪除按鈕上發現get請求有參數id的值,猜測這是delete語句的where條件)注入點就是在id參數上(get方式)
刪除失敗的時候,說明布爾注入
可以進行延時注入/布爾注入