首頁  >  文章  >  sql注入攻擊如何實現

sql注入攻擊如何實現

(*-*)浩
(*-*)浩原創
2019-05-10 17:12:5016495瀏覽

本文主要針對SQL注入的意義、以及如何進行SQL注入。適用的人群主要是測試人員,了解如何進行SQL注入,可以幫助我們測試登入、發布等模組的SQL攻擊漏洞,至於如何預防SQL注入,按理說應該是開發該了解的事情~但是作為一個棒棒的測試,搞清楚原理是不是能讓我們更透徹地理解bug的產生原因呢~好啦,話不多說,進入正題~

推薦課程:MySQL教學

sql注入攻擊如何實現

如何理解SQL注入(攻擊)?

SQL注入是一種將SQL程式碼加入輸入參數中,傳遞到伺服器解析並執行的一種攻擊手法。

SQL注入攻擊是輸入參數未經過濾,然後直接拼接到SQL語句當中解析,執行達到預想以外的一種行為,稱為SQL注入攻擊。

SQL注入攻擊原理:

當應用程式使用輸入內容來建構動態sql語句以存取資料庫時,會發生sql注入攻擊。如果程式碼使用預存程序,而這些預存程序會作為包含未篩選的使用者輸入的字 符串來傳遞,也會發生sql注入。 sql注入可能導致攻擊者使用應用程式登陸在資料庫中執行命令。

如果應用程式使用特權過高的帳戶連接到資料庫,這種問題會變得很嚴重。在某些表單中,使用者輸入的內容直接用來建構動態sql指令,或作為預存程序 的輸入參數,這些表單特別容易受到sql注入的攻擊。而許多網站程式在編寫時,沒有對使用者輸入的合法性進行判斷或程式中本身的變數處理不當,使應用程式 存在安全隱患。這樣,使用者就可以提交一段資料庫查詢的程式碼,根據程式回傳的結果,得到一些敏感的資訊或控制整個伺服器,於是sql注入就發生了。

SQL注入是從正常的WWW連接埠訪問,而且表面看起來跟一般的Web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對SQL注入發出警報,如果管理員沒查看IIS日誌的習慣,可能被入侵很久都不會發覺。但是,SQL注入的手法相當靈活,在註入的時候會碰到很多意外的狀況,需要建構巧妙的SQL語句,才能成功取得想要的資料。

SQL注入是怎麼產生的?

1. 破解後台資料庫,這是利用最多的方式,盜取網站的敏感資訊。

2. 注入可以藉助資料庫的預存程序進行提權等操作

3. 攻擊者利用發送給SQL伺服器的輸入參數建構可執行的SQL程式碼(可加入到get請求、post請求、http頭資訊、cookie中)

如何進行SQL注入攻擊?

以php程式語言、mysql資料庫為例,介紹一下SQL注入攻擊的建構技巧、建構方法

1.數位注入

在瀏覽器位址欄輸入:learn.me/sql/article.php?id=1,這是一個get型接口,發送這個請求相當於調用一個查詢語句:

$sql = "SELECT * FROM article WHERE id =",$id

正常情況下,應該返回一個id= 1的文章資訊。那麼,如果在瀏覽器網址列輸入:learn.me/sql/article.php?id=-1 OR 1 =1,這就是一個SQL注入攻擊了,可能會傳回所有文章的相關資訊。為什麼會這樣呢?

這是因為,id = -1永遠是false,1=1永遠是true,所有整個where語句永遠是ture,所以where條件相當於沒有加where條件,那麼查詢的結果相當於整張表的內容

2.字串注入

有這樣一個使用者登入場景:登入介麵包括使用者名稱和密碼輸入框,以及提交按鈕。輸入使用者名稱和密碼,提交。

這是一個post請求,登入時呼叫介面learn.me/sql/login.html,先連接資料庫,然後後台對post請求參數中所攜帶的使用者名稱、密碼進行參數校驗,也就是sql的查詢過程。假設正確的使用者名稱和密碼為user和pwd123,輸入正確的使用者名稱和密碼、提交,相當於呼叫了以下的SQL語句:

SELECT * FROM user WHERE username = 'user' ADN password = 'pwd123'

由於使用者名稱和密碼都是字串,SQL注入方法即把參數攜帶的資料變成mysql中註解的字串。 mysql中有2種註解的方法:

1)'#':'#'後所有的字串都會被當成註解來處理

使用者名稱輸入:user'#(單引號閉合user左邊的單引號),密碼隨意輸入,如:111,然後點選提交按鈕。等價於SQL語句:

SELECT * FROM user WHERE username = 'user'#'ADN password = '111'

'#'後面都被註解掉了,相當於:

SELECT * FROM user WHERE username = 'user'

2)'-- ' (--後面有個空格):'- - '後面的字串都會被當成註解來處理

使用者名稱輸入:user'-- (注意--後面有個空格,單引號閉合user左邊的單引號),密碼隨意輸入,如:111,然後點選提交按鈕。等價於SQL語句:

SELECT * FROM user WHERE username = 'user'-- 'AND password = '111'
SELECT * FROM user WHERE username = 'user'-- 'AND password = '1111'

'-- '後面都被註解掉了,相當於:

SELECT * FROM user WHERE username = 'user'

因此,以上两种情况可能输入一个错误的密码或者不输入密码就可登录用户名为'user'的账号,这是十分危险的事情。

以上是sql注入攻擊如何實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn