溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是SQL注入(SQLi)

發(fā)布時間:2020-08-07 13:18:13 來源:ITPUB博客 閱讀:153 作者:Tybyq 欄目:關系型數據庫

什么是SQL注入?

SQL注入(SQLi)通常被認為是一種注入攻擊,其中攻擊者可以執(zhí)行惡意 SQL 語句。 它控制Web應用程序的數據庫服務器。 由于SQL注入無助可能會影響使用基于SQL的數據庫的任何站點或Web應用程序。 弱點是最成熟,最普遍和最危險的Web應用程序漏洞之一。

通過使用SQL注入無助,在給定正確條件的情況下,攻擊者可以使用它來回避Web應用程序的驗證和批準組件并恢復整個數據庫的實質內容。 SQL注入同樣可以用于包含,更改和刪除數據庫中的記錄,從而影響信息正直性。
在這種程度上,SQL注入可以為攻擊者提供未經批準的訪問精細信息的權限,包括客戶信息,可識別數據(PII),交換謎團,受保護創(chuàng)新和其他敏感數據。

SQL注入功能

記住針對數據庫服務器運行惡意SQL查詢的最終目標,攻擊者應該首先在Web應用程序中發(fā)現包含在SQL問題中的貢獻。
一起發(fā)生SQL注入攻擊,無助站點需要直接在SQL解釋中包含客戶端貢獻。 然后,攻擊者可以嵌入有效負載,該有效負載將作為SQL查詢的一個組件并入,并繼續(xù)針對數據庫服務器運行。
隨附的服務器端偽代碼用于驗證Web應用程序的客戶端。

#定義POST因子

ü ? 一米?  = - [R ? q ü ? 小號噸。P O S T [ ' u s e r n a m e ' ]
p 一個小號小號瓦特d  = - [R ? q ü ? 小號噸。P O S T [ ' p a s s w o r d ' ]

#SQL問題對SQLi無能為力

sql = “SELECT id FROM clients WHERE username ='” + uname + “'AND password ='” + passwd + “'”

#執(zhí)行SQL說明

數據庫.execute(sql)

以上內容是使用用戶名確認客戶端的基本情況。 此外,對于具有名為clients的表的數據庫以及用戶名和關鍵字部分的秘密詞。
SQL注入有效負載的基本情況可能就像將關鍵字字段設置為密鑰'OR 1 = 1一樣簡單。
這將導致伴隨的SQL問題繼續(xù)針對數據庫服務器運行。
SELECT id FROM clients WHERE username ='username'AND password ='password'OR 1 = 1' 

攻擊者同樣可以注釋掉SQL解釋的剩余部分,以進一步控制SQL查詢的執(zhí)行。
- MySQL,MSSQL,Oracle,PostgreSQL,SQLite

'或' 1 '=' 1 ' -
'或' 1 '=' 1 '/ *

- MySQL

'或' 1 '=' 1 '#

- 訪問(使用無效字符)

'或' 1 '=' 1 '%00
'或' 1 '=' 1 '%16

一旦問題執(zhí)行,結果i-訪問(使用無效字符)將返回到要處理的應用程序,從而產生確認回避。 如果可以設想驗證回避,應用程序將無疑地將攻擊者從問題結果中記錄到主記錄中 - 數據庫中的主記錄是監(jiān)管客戶端的大部分。

攻擊者最糟糕的是SQL可以做什么?

SQL是一種編程方言,用于監(jiān)視放在RDBMS中的信息,以這種方式,SQL可用于獲取,更改和刪除信息。 此外,在特定情況下, RDBMS 同樣可以從SQL公告中對工作框架進行收費。
記住上面的內容,在考慮附帶的情況下,看看有效的SQL注入攻擊對攻擊者來說有多賺錢的要求不高。
攻擊者可以使用SQL注入來回避確認甚至模仿特定客戶端。

One of SQL’s essential capacities is to choose information in light of an inquiry and yield the consequence of that question. A SQL Injection weakness could permit the entire exposure of information dwelling on a database server. 
Since web applications use SQL to modify information inside a database, an attacker could use SQL Injection to adjust information put away in a database. Modifying information influences information honesty and could cause denial issues. For example, issues, for example, voiding exchanges, adjusting balances and different records. 
SQL用于擦除數據庫中的記錄。 攻擊者可以使用SQL注入漏洞來清除數據庫中的信息。 無論我們是否使用合適的強化方法,信息的擦除都可能影響應用程序的可訪問性,直到重新建立數據庫為止。
一些數據庫服務器設計(有目的或其他)允許在數據庫服務器上自由執(zhí)行工作框架訂單。 在正確的條件下,攻擊者可以使用SQL注入作為攻擊防火墻后面的內向系統的基礎向量。

SQL注入攻擊的剖析

SQL注入只需要存在兩個條件 - 一個利用SQL的社交數據庫,以及一個可以直接用作SQL問題一部分的客戶端可控信息。
在下面的情況下,它將接受攻擊者可能通過濫用Web應用程序中的SQL注入無防御性展示來從數據庫中泄漏信息。
提供具有不恰當貢獻的SQL清晰度,例如在SQL查詢期望數字時給出字符串,或者在SQL語句中故意嵌入標點符號錯誤會使數據庫服務器拋出錯誤。
在進步中,失誤對工程師非常有幫助,但如果在現場網站上授權,他們可以向攻擊者發(fā)現大量數據。 SQL錯誤具有圖形趨勢,即攻擊者可以獲取有關數據庫結構的數據。 有時甚至只是通過將數據與錯誤消息分開來指定整個數據庫 - 這個系統基于SQL注入被稱為錯誤。 在這種程度上,數據庫失誤應該在現場網站上失效,或者登錄到訪問受限的記錄。

SQL注入示例

一個。 在ASP.NET中選擇語句

灣  在ASP.NET中插入聲明

C。 在PHP SQL中插入聲明

$ stmt  =  $ dbh - > prepare(“INSERT INTO Customers(客戶名稱,地址,城市)
VALUES(:nam,:add,:cit)“);
$ stmt - > bindParam(':nam',$ txtNam);
$ stmt - > bindParam(':add',$ txtAdd);
$ stmt - > bindParam(':cit',$ txtCit);
$ stmt - > execute();

結論

在這個SQL注入教程中,我們了解了SQL中的注入。 此外,我們討論了它的例子,代碼,工作和解剖。 除此之外,我們還看到了SQL PHP和SQL攻擊者可以做的事情。 不過,如果有任何疑問或疑問,請在評論部分詢問。 


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI