類的values方法 什么是sql注入?我們常見的提交方式有哪些?
什么是sql注入?我們常見的提交方式有哪些?什么是SQL注入(SQLi)?SQL注入是一個網(wǎng)絡安全漏洞,它使得攻擊者能夠干擾應用程序 的數(shù)據(jù)庫查詢。通常,它允許攻擊者查看他們通常無法檢索的數(shù)據(jù)。這可能
什么是sql注入?我們常見的提交方式有哪些?
什么是SQL注入(SQLi)?SQL注入是一個網(wǎng)絡安全漏洞,它使得攻擊者能夠干擾應用程序 的數(shù)據(jù)庫查詢。通常,它允許攻擊者查看他們通常無法檢索的數(shù)據(jù)。這可能包括屬于其他用戶的數(shù)據(jù),或者應用程序本身可以訪問的任何其他數(shù)據(jù)。在許多情況下,攻擊者可以修改或刪除這些數(shù)據(jù),從而永久改變應用程序的內(nèi)容或行為。
在某些情況下,攻擊者可以升級SQL注入攻擊來破壞底層服務器或其他后端基礎設施,或者執(zhí)行拒絕服務攻擊。
成功的SQL注入攻擊會產(chǎn)生什么影響?成功的SQL注入攻擊可能導致對敏感數(shù)據(jù)的未經(jīng)授權(quán)的訪問,如密碼、信用卡詳細信息或個人用戶信息。近年來,許多驚人的數(shù)據(jù)泄露是SQL注入攻擊的結(jié)果,導致聲譽受損和監(jiān)管罰款。在某些情況下,攻擊者可以獲得一個組織系統(tǒng)的持久性后門,從而導致長期的危害,并且可能在很長時間內(nèi)不會被發(fā)現(xiàn)。
SQL注入的例子將有不同的SQL注入漏洞,攻擊和技術(shù)在不同的情況下。一些常見的SQL注入示例包括:
檢索隱藏數(shù)據(jù),您可以在其中修改SQL查詢以返回其他結(jié)果。
顛覆應用程序邏輯,您可以更改查詢來干擾應用程序邏輯。
聯(lián)合攻擊,可以從不同的數(shù)據(jù)庫表中檢索數(shù)據(jù)。
檢查數(shù)據(jù)庫,從中可以提取關(guān)于數(shù)據(jù)庫版本和結(jié)構(gòu)的信息。
盲SQL注入,你控制的查詢結(jié)果不會在應用程序的響應中返回。
檢索隱藏數(shù)據(jù)
考慮一個顯示不同類別產(chǎn)品的購物應用程序。當用戶點擊 "禮品及贈品類別,他的瀏覽器將請求URL:
這使應用程序能夠進行SQL查詢,從數(shù)據(jù)庫中檢索相關(guān)產(chǎn)品的詳細信息:
從禮品和已發(fā)布類別的產(chǎn)品中選擇*
該SQL查詢要求數(shù)據(jù)庫返回:
所有詳細信息(*)
從產(chǎn)品表中
類別是禮物。
并將其發(fā)布為1。
這個限制,released 1,用于隱藏未發(fā)布的產(chǎn)品。對于未發(fā)布的產(chǎn)品,大概是發(fā)布0。
該應用程序沒有針對SQL注入攻擊實施任何防御措施,因此攻擊者可以構(gòu)建以下攻擊:
這將導致一個SQL查詢:
選擇*從產(chǎn)品類別禮品-和發(fā)布1
這里的關(guān)鍵點是雙破折號序列SQL中的注釋指示符——意味著查詢的其余部分將被解釋為注釋。這可以有效地刪除查詢的其余部分,因此它不再包含和發(fā)布1。這意味著它將被顯示。所有產(chǎn)品,包括未發(fā)布的產(chǎn)品。
此外,攻擊者可以讓應用程序顯示任何類別的所有產(chǎn)品,包括他們不知道的類別。;我不知道:
或者11 -
這將導致一個SQL查詢:
從禮品或11類產(chǎn)品中選擇*并發(fā)布1
修改后的查詢將返回所有11個屬于禮品類別或1等于1的商品。因為它始終為真,所以查詢將返回所有項目。
顛覆應用程序邏輯考慮一個允許用戶使用用戶名和密碼登錄的應用程序。如果用戶提交用戶名wiener和密碼bluecheese,應用程序?qū)⑼ㄟ^執(zhí)行以下SQL查詢來檢查憑據(jù):
SELECT * FROM users,其中用戶名wiener和密碼bluecheese
如果查詢返回用戶的詳細信息,則登錄成功。否則將被拒絕。
在這里,攻擊者可以簡單地使用SQL注釋序列——從WHERE query子句中刪除密碼檢查,并以任何沒有密碼的用戶身份登錄。例如,提交用戶名administrator -和空白密碼將導致以下查詢:
SELECT * FROM users其中用戶名administrator -和密碼
該查詢返回名為administrator的用戶,并以該用戶身份成功登錄攻擊者。
從其他數(shù)據(jù)庫表中檢索數(shù)據(jù)
如果在應用程序的響應中返回SQL查詢的結(jié)果,攻擊者可以利用SQL注入漏洞從數(shù)據(jù)庫的其他表中檢索數(shù)據(jù)。這是使用UNION關(guān)鍵字完成的,它使您能夠執(zhí)行附加的SELECT查詢并將結(jié)果追加到原始查詢中。
例如,如果應用程序執(zhí)行以下包含用戶輸入的查詢 "禮品及贈品:
從禮品類別的產(chǎn)品中選擇名稱和描述
然后,攻擊者可以提交輸入:
UNION從用戶選擇用戶名和密碼-
這將導致應用程序返回所有用戶名和密碼以及產(chǎn)品名稱和描述。
檢查數(shù)據(jù)庫在最初確定SQL注入漏洞后,獲取一些關(guān)于數(shù)據(jù)庫本身的信息通常非常有用。這些信息通??梢詾檫M一步的開發(fā)鋪平道路。
您可以查詢數(shù)據(jù)庫的版本詳細信息。實現(xiàn)這一點的方法取決于數(shù)據(jù)庫類型,因此您可以從任何技術(shù)推斷出數(shù)據(jù)庫類型。例如,在Oracl
sql查詢語句中的單引號,雙引號,加號是什么意思?
sql查詢語句中的單引號和雙引號可以用來引用字符串常量,加號可以作為算術(shù)加法運算符或者連接符,但是應用到不同的數(shù)據(jù)庫中還是有很多區(qū)別的,需要注意。
比如ACCESS數(shù)據(jù)庫和MySQL數(shù)據(jù)庫都支持用單引號或雙引號引用字符串常量,而MSSQL數(shù)據(jù)庫只支持用單引號引用字符串常量。
比如ACCESS數(shù)據(jù)庫和MSSQL數(shù)據(jù)庫可以支持數(shù)字作為加法運算符或者連接運算符,而MySQL數(shù)據(jù)庫只支持數(shù)字進行加法運算,不支持使用連接符。如果要實現(xiàn)字符串連接,必須使用concat函數(shù)。
例如:
1)select * from t1 where col 1 ABC;
2)select * from t1 where col 1 ABC;
語句1和2對于Access和MySQL數(shù)據(jù)庫都是合法的。在MSSQL中,只有語句1是合法的,語句2會報錯。
3)從t1中選擇col1 col2
語句3對于ACCESS和MSSQL數(shù)據(jù)庫,如果兩個字段都是數(shù)值類型,數(shù)據(jù)庫引擎會做加法,否則會用兩個字段的值作為連接符;MySQL只對加號執(zhí)行算術(shù)加法。如果您需要連接多個,字段值需要concat函數(shù),如語句4。
4)從t1中選擇concat(col1,col 2);