《白帽子講Web安全》 學習筆記之注入攻擊

2021-09-25 03:34:31 字數 2979 閱讀 5062

注入攻擊的本質是,把使用者輸入的資料當作**執行。有兩個關鍵的條件:一是使用者能夠控制輸入;二是原本程式要執行的**,拼接了使用者輸入的資料。

1、sql注入

sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。sql注入攻擊是一種比較常見的針對資料庫的漏洞攻擊方式。在sql注入的過程中,如果**的web伺服器開啟了錯誤回顯,錯誤回顯披露的敏感資訊,對於攻擊者構造sql注入提供了極大的便利。

補充:常見的sql注入攻擊:

強制產生錯誤:利用應用程式伺服器返回的預設錯誤資訊而取得漏洞資訊。對資料庫型別、版本等資訊進行識別是此類攻擊的動機,它的目的是收集資料庫的型別、結構等資訊為其他型別的攻擊做準備。 

採用非主流通道技術:除http響應外,還能通過通道獲取資料。sql注入的非主流通道主要有e-mail、dns以及資料庫連線,基本思想為:先對sql查詢打包,然後借助非主流通道將資訊反饋至攻擊者。

使用特殊的字元:不同的sql資料庫有許多不同的特殊字元和變數,通過某些配置不安全或過濾不細緻的應用系統能夠取得某些有用的資訊,從而對進一步攻擊提供方向。

使用條件語句:此方式具體可分為基於內容、基於時間、基於錯誤3種形式。一般在經過常規訪問後加上條件語句,根據資訊反饋來判定被攻擊的目標。

利用儲存過程:通過其他型別的攻擊收集資料庫的型別、結構等資訊之後,便能夠構建執行儲存過程的命令。這種攻擊型別往往能達到遠端命令執行、特權擴張、拒絕服務等目的。

避開輸入過濾技術:可利用:sql注釋和動態查詢的使用,利用截斷、url編碼與空位元組的使用,大小寫變種的使用,以及巢狀剝離後的表示式等等。

推斷技術:此種方式的攻擊通過**,對使用者輸入的反饋資訊、可注入引數、資料庫模式等進行推斷。這種攻擊構造的查詢,執行後獲得的答案只有真假兩種。

2、盲注(blind injection)

盲注,就是在伺服器沒有錯誤回顯時完成的注入攻擊。伺服器沒有錯誤回顯,對於攻擊者來說缺少了非常重要的「除錯資訊」,所以攻擊者必須找到乙個方法來驗證注入的sql語句是否得到執行。

最常見的盲注驗證方法是,構造簡單的條件語句,根據返回頁面是否發生變化,來判斷sql語句是否執行。

列如:id=2 and 1=2,攻擊者看到的頁面結果將為空或者是乙個出錯的頁面。輸入id=2 and 1=1時,如果頁面正常返回,說明sql語句的and成功執行,可以判斷id引數存在sql漏洞。

3、timing attack

mysql中利用benchmark()函式,可以讓同一函式執行若干次,使得返回結果的時間比平時要長;通過時間長短的變化,可以判斷出注入語句是否執行成功。這是一種邊通道攻擊,這個攻擊在盲注中被稱為timing attack。在不同的資料庫中,都有類似於benchmark()的函式,可以被timing attak利用。

4、資料庫攻擊技巧

sql注入可以猜解出資料庫的對應版本,在下面這段payload如果mysql的版本是4,則會返回ture.

and substring(@@version,1,1)=4

下面這段payload,利用union select 來分別確認表名admin是否存在,列名passwd是否存在。

id=5 union all select 1,2,3 from admin

id=5 union all select 1,2,passwd from admin

sqlmap.py是乙個非常好的自動化注入工具。

5、命令執行

在mysql中,除了可以通過匯出webshell間接地執行命令外,還可以利用「使用者自定義函式」的技巧,即udf(user-defined function)在執行命令。

6、攻擊儲存過程

儲存過程必須使用call或者execute來執行。

xp_cmdshell:執行系統命令(在sql server2000預設開啟,在2005以及以後版本則被預設禁止)

xp_regread:可以操作登錄檔。

xp_servicecontrol:允許使用者啟動、停止服務

xp_dirtree:允許獲得乙個目錄樹

xp_loginconfig:獲取伺服器安全資訊

儲存過程本身也可能存在注入漏洞。

7、編碼問題

當資料庫使用了「寬字符集」時,可能會產生一些意向不到的漏洞。比如當mysql使用了gbk編碼時,oxbf27和oxbf5c都會被認為是乙個字元(雙位元組字元)。

資料庫字元最好統一設定為utf-8。

8、正確的防禦sql注入

找到所有的sql注入漏洞;

修補這些漏洞。

一般來說,防禦sql注入的最佳方式,就是使用預編譯語句,繫結變數。

使用儲存過程:將sql語句定義在資料庫中,盡量避免在儲存過程中使用動態的sql語句。如果無法避免,應該使用嚴格的輸入過濾或者是編碼函式來處理使用者的輸入資料。

檢查資料型別

使用安全函式

9、其他注入攻擊

xml注入:xml注入是通過改寫xml的資料內容來實現。

**注入:往往由一些不安全的函式或者方法引起。如eval()、php、jsp的動態include()、system()。

crlf注入:就是回車(cr, ascii13, \r) 換行(lf, ascii10, \n)。

\r\n這兩個字元是用於表示換行的。其十六進製制編碼分別為0x0d、0x0a。

對抗crlf的方法非常簡單,只需處理好「\r"、"\n"這兩個保留字元即可。

10、小結

注入攻擊是應用違背了」資料與**分離原則「導致的結果。

在對抗注入攻擊時,只需牢記」資料與**分離原則「,在拼湊發生的地方進行安全檢查,就能避免此類問題。

《白帽子講Web安全》 學習筆記

最近加入新公司後,公司的官網突然被google標記為了不安全的詐騙 一時間我們資訊科技部門成為了眾矢之的,雖然老官網並不是我們開發的 因為開發老官網的前輩們全都跑路了 我們花了很多時間做web安全掃瞄以及修復,在檢查和修復過程中,發現老系統的 的不可維護性 再次說明整潔 之道clean code的重...

《白帽子講Web安全》 學習筆記之訪問控制

1 what can i do?許可權控制,或者說是訪問控制,都是某個主體 subject 對某個客體 object 需要實施某種操作 operation 而系統對這種操作的限制就是許可權控制。在乙個安全系統中,確定主體的身份是 認證 解決的問題 而客體是一種資源,是主體發起的請求的物件。在主體對客...

讀書筆記《白帽子講web安全》

2016年3月24日 09 34 32 星期四 ddos攻擊 一種 隨機生成ip,去建立鏈結,由於http tcp握手協議原理,傳送應答報文時因為ip無效會導致等待重發,這種行為可以通過電腦硬體裝置攔截 清洗 二種 通過掛馬等手段控制別人電腦,使用有效ip去瘋狂訪問某乙個介面導致服務掛掉,這種行為要...