SQL注入(Structured Query Language)
OWASP 開放式web應用程序安全項目python
OWASP TOP10(4年更新一次,上次更新是2017年。)web
- 注入
- 失效的身份認證
- 敏感信息泄露
- XML外部實體(XXE)
- 失效的訪問控制
- 安全配置錯誤
- 跨站腳本(XSS)
- 不安全的反序列化
- 使用含有已知漏洞的組件
- 不足的日誌記錄和監控
什麼是SQL注入
sql注入,就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意SQL命令目的的入侵行爲。sql
注入能致使數據丟失、破壞或泄露給無受權方,缺少可審計性或是拒絕服務。注入有時甚至能致使主機被徹底接管。數據庫
注入攻擊的本質:
注入攻擊的本質就是把用戶輸入的數據看成代碼執行。(過於信任用戶)安全
SQL注入攻擊的本質:
SQL注入實質就是閉合前一句查詢語句,構造惡意語句,惡意語句被代入SQL語句執行。服務器
SQL注入產生的緣由:
沒有對用戶的輸入數據或者是頁面中所攜帶的信息進行必要的合法性判斷,致使了攻擊者能夠提交一段數據庫查詢代碼,根據程序返回的結果,得到一些他想獲得的數據。這樣就產生了被稱爲數據庫的注入攻擊SQL注入攻擊。cookie
數據與代碼未嚴格分離;用戶提交的參數數據未作充分檢查過濾即被代入到SQL命令中,改變了原有SQL命令的「語義」,且成功被數據庫執行。post
SQL命令能夠進行查詢、插入、刪除等操做,直接將這些命令拼接起來。測試
SQL注入的危害(包括但不限於):
- 數據庫信息泄露
- 網頁篡改
- 網站被掛馬
- 數據庫被惡意操做
- 服務器被遠程控制,被安裝後門
- 破壞硬盤數據,癱瘓全系統
- 一些類型的數據庫系統可以讓SQL指令操做文件系統,這使得SQL注入的危害被進一步放大
SQL注入在滲透中的利用:
- 繞過登陸驗證:使用萬能密碼登陸網站後臺等
- 獲取敏感數據:獲取網站管理員帳號、密碼等
- 文件系統操做:列目錄、讀取、寫入文件等
- 註冊表操做:讀取、寫入、刪除註冊表等
- 執行系統命令:遠程執行命令
存在萬能密碼,必定存在注入
存在注入,不必定存在萬能密碼網站
存在時間注入,必定也存在布爾注入
存在布爾注入,不必定存在時間注入
哪些地方存在SQL注入:
搜索框、輸入框
參數名,參數值,cookie,目錄名,文件名...
(cookie注入通常存在於asp的程序中。
參數名、目錄名、文件名等注入漏洞一般存在於有網站路由的程序中。)
SQL注入漏洞分類:
數據類型:數字、字符
返回結果:顯錯(報錯)、盲注(布爾、時間)
判斷注入漏洞的依據是什麼?
根據客戶端返回的結果來判斷提交的測試語句是否成功被數據庫引擎執行,若是測試語句被執行了,說明存在注入漏洞。
判斷存在SQL的經常使用步驟:
字符型:(假如入有一篇 id=1 的文章)
- id=1' //報錯(程序沒法正常從數據庫中查詢出數據,就會拋出異常)
- id=1'+and+'1'='1 //頁面有返回(語句爲真,語句執行正常,與原始頁面無任何差別)
- id=1'+and+'1'='2 //頁面有返回(語句爲假,語句執行失敗,與原始頁面也有差別)
(閉合查詢語句先後單引號)
數字型:
- id=1
- id=1+and+1=1
- id=1+and+1=2
快速的判斷是數字型注入的方法(id=1/0 id=1/1(觀察頁面的變化))(四則運算)
時間盲注:
id=1'+and+sleep(5)+--+
sqlmap基本用法:
- sqlmap -u ---指定url鏈接
- sqlmap -r ---指定get/post數據包
例子:
python sqlmap.py -u "http://127.0.0.1/fwxm_detail.asp?id=22"
python sqlmap.py -r c:\2.txt
- --cookie 設置cookie
- --current-db 獲取當前數據庫名稱
- -D "" 指定數據庫名
- --tables 列出表
- -T "" 指定表名
- --columns 列出字段
- -C "" 指定字段
- --dump
- --dbs 列出全部數據庫
- --users 列出數據庫用戶
- --password 列出數據庫用戶的密碼
- --is-dba 查看數據庫用戶的權限
手工注入的思路:
- 報錯
- 聯合查詢注入(union注入)
- 。。。