1. 程式人生 > >20155311《網絡對抗》Web安全基礎實踐

20155311《網絡對抗》Web安全基礎實踐

用戶表 con lec 插入 weather 留言板 輸入驗證 部分 後臺程序

20155311《網絡對抗》Web安全基礎實踐

基礎問題回答

SQL註入攻擊原理,如何防禦?

原理:SQL註入攻擊指的是通過構建特殊的輸入作為參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,通過執行SQL語句進而執行攻擊者所要的操作,使非法數據侵入系統。

  • 防禦:

  • 1.對用戶的輸入進行校驗,可以通過正則表達式,雙"-"進行轉換等。
  • 2.不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
  • 3.不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
  • 4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
  • 5.應用的異常信息應該給出盡可能少的提示。
  • 6.采取輔助軟件或網站平臺來檢測sql註入。

    XSS攻擊的原理,如何防禦?

  • 原理:XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼(如,HTML代碼和客戶端腳本)植入到提供給其它用戶使用的頁面中,攻擊者可以利用XSS漏洞旁路掉訪問控制。

  • 防禦:

  • 1.特征匹配方式,在所有提交的信息中都進行匹配檢查,一般會對“javascript”這個關鍵字進行檢索,一旦發現提交信息中包含“javascript”,就認定為XSS攻擊。
  • 2.對所有用戶提交內容進行可靠的輸入驗證,包括對URL、查詢關鍵字、HTTP頭、POST數據等,僅接受指定長度範圍內、采用適當格式、采用所預期的字符的內容提交,對其他的一律過濾。
  • 3.實現Session標記(session tokens)、CAPTCHA系統或者HTTP引用頭檢查,以防功能被第三方網站所執行。

    CSRF攻擊原理,如何防禦?

  • 原理:CSRF跨站請求偽造,也被稱為“oneclickattack”或者sessionriding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用,通過偽裝來自受信任用戶的請求來利用受信任的網站。是一種依賴web瀏覽器的、被混淆過的代理人攻擊。

  • 防禦:

  • 1.在form中包含秘密信息、用戶指定的代號作為cookie之外的驗證。
  • 2.“雙提交”cookie。某個授權的cookie在form post之前正被JavaScript代碼讀取,那麽限制跨域規則將被應用。服務器需要在Post請求體或者URL中包含授權cookie的請求,那麽這個請求必須來自於受信任的域。
  • 3.用戶在瀏覽其它站點前登出站點或者在瀏覽器會話結束後清理瀏覽器的cookie。

    實驗過程

    WebGoat

在終端中輸入java -jar webgoat-container-7.0.1-war-exec.jar開啟WebGoat。

技術分享圖片

當頁面成功停在下圖位置時,最小化終端窗口:

技術分享圖片

打開瀏覽器,在地址欄輸入localhost:8080/WebGoat打開WebGoat,選擇默認賬號、密碼即可登陸成功。
技術分享圖片

XSS攻擊

1、Phishing with XSS 跨站腳本釣魚攻擊

跨站腳本攻擊最大的魅力是通過HTML註入劫持用戶的瀏覽器,任意構造用戶當前瀏覽的HTML內容,甚至可以模擬用戶當前的操作。這裏實驗的是一種獲取用戶名和密碼的攻擊

先編寫一個包含用戶名、密碼的前端代碼:
`














This feature requires account login:





Enter Username:



Enter Password:














`
然後在webgoat找到xss攻擊打開Phishing with XSS(第一個)

將這段代碼輸入到輸入框中,點擊search出現如下登錄框:
技術分享圖片

在登錄框中輸入用戶名、密碼:
技術分享圖片

點擊登錄後跳出彈框,其中包含用戶輸入的用戶名、密碼。攻擊成功!

技術分享圖片

2、Stored XSS Attacks 存儲型XSS攻擊

存儲型XSS的攻擊基本流程:
a. 比如在某個論壇提供留言板功能,黑客在留言板內插入惡意的html或者Javascript代碼,並且提交。 b. 網站後臺程序將留言內容存儲在數據中 c. 然後一個用戶也訪問這個論壇,並刷新了留言板,這時網站後臺從數據庫中讀取了之前黑客的留言內容,並且直接插入在html頁面中,這就可能導致了:黑客留言的腳本本身應該作為內容顯示在留言板的,然後此時可能黑客的留言腳本被瀏覽器解釋執行了。
那麽黑客的腳本可以用來做哪些壞事兒呢?比如:
通過javascript獲取用戶的cookie,根據這個cookie竊取用戶信息 重定向網站到一個釣魚網站 重新更改頁面內容,假裝讓客戶輸入用戶名,密碼,然後提交到黑客的服務器
打開Stored XSS Attacks(xxs攻擊第二個)

技術分享圖片

在Message框中輸入

技術分享圖片

點擊提交後彈出對話框,顯示I am 20155311gaoziyun。攻擊成功!

技術分享圖片

3、Reflected XSS Attacks 反射型XSS攻擊

我們在訪問一個網頁的時候,在URL後面加上參數,服務器根據請求的參數值構造不同的HTML返回。 value可能出現在返回的HTML(可能是JS,HTML某元素的內容或者屬性)中, 如果將value改成可以在瀏覽器中被解釋執行的東西,就形成了反射型XSS. 有人會問,我怎麽可能自己去把value改成可以執行的惡意代碼呢?這不是自己坑自己嗎. 但是一種情況是別人可能修改這個value值,然後將這個惡意的URL發送給你,或者別人,當URL地址被打開時, 特有的惡意代碼參數被HTML解析,執行.它的特點是非持久化,必須用戶點擊帶有特定參數的鏈接才能引起
打開xss的第三個攻擊,在code框中輸入<script>alert("I am 20155311gaoziyun");</script>
技術分享圖片

點擊Purchase出現對話框,顯示I am 20155305qiaolei。攻擊成功!
技術分享圖片

CSRF攻擊

跨站請求偽造,盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比XSS更具危險性。

1、Cross Site Request Forgery(CSRF)

查看頁面右邊Parameters中的src和menu值。

技術分享圖片

在title框中輸入學號,message框中輸入代碼:<img src=‘attack?Screen=src值&menu=menu值&transferFunds=轉賬數額‘ width=‘1‘ height=‘1‘>

提交後生成一個鏈接20155305:

技術分享圖片

點擊學號名即可查看用戶操作的信息,攻擊成功

技術分享圖片

2、CSRF Prompt By-Pass

查看頁面右邊Parameters中的src和menu值,並在title框中輸入學號,message框中輸入代碼:
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=轉賬數額"> </iframe> <iframe src="attack?Screen=src值&menu=menu值&transferFunds=CONFIRM"> </iframe>
技術分享圖片

提交後生成一個鏈接20155305:

技術分享圖片

點擊學號名即可查看用戶操作的信息,攻擊成功

技術分享圖片

SQL註入攻擊

SQL註入攻擊是黑客對數據庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL註入。
1、Numeric SQL Injection

我們看到這一題的選擇框也是一個下拉框,在當前網頁上無法修改,於是,我們使用BurpSuite抓包修改。

技術分享圖片

在Kali桌面上找到如下圖標,打開BurpSuite:
技術分享圖片

在BurpSuite中依次選擇Proxy->Options->Add添加一個端口,將綁定的端口設為5311,點擊確認後會在Options下增加一行,勾選新形成的這一行:

技術分享圖片

技術分享圖片

點擊瀏覽器右上方的更多選項卡,選擇preference

在頁面左側選擇advanced,選擇network頁標簽,在connection那一行選擇settings…

在彈出的窗口中設置代理服務器和端口(要與BurpSuite中綁定的一致)
技術分享圖片

設置好代理後回到題目頁面,點擊Go,然後進入BurpSuite中依次選擇Proxy->Intercept,可以看到已經抓到了包:

技術分享圖片

右鍵選擇send to repeater

技術分享圖片

進入repeater頁標簽,選擇Params將其中station的值改為101 or 1=1,點擊Go運行,查看右側代碼可以看到包中的SQL語句為

SELECT * FROM weather_data WHERE station = 101 or 1=1

回到Proxy中點擊Intercept is on對剩下的包不作處理,回到火狐發現已經成功。

技術分享圖片

2、Command Injection

我們看到這一題的選擇框是一個下拉框,在當前網頁上無法修改,於是,我們使用BurpSuite抓包修改

技術分享圖片

在題目頁面點擊view,然後進入BurpSuite中,在repeater頁標簽的Params選項中先運行一次,查看數據都提交的位置:

技術分享圖片

然後修改HelpFile的值為,其中的雙引號是為了封閉原語句中的雙引號,&&在命令行中是執行另外一條語句的意思,點擊GO發現執行了ifconfig語句

技術分享圖片

回到題目發現顯示破解成功。

技術分享圖片

3、Log Spoofing

在User Name文本框中輸入%0d%0aLogin succeeded !admin達到欺騙登錄效果,破解成功:

技術分享圖片

4、LAB:SQL Injection(Stage 1:String SQL Injection)

使用一個新的工具firebug(瀏覽器右上方有一個小昆蟲一樣的標誌),可以顯示當前網頁的源碼並直接在其中修改。
技術分享圖片

使用用戶Neville進行登錄,在密碼欄中輸入‘ or 1=1 --進行SQL註入,本以為會成功,但是登錄失敗,查看源碼發現輸入框對輸入的字符長度進行了限制,最多允許輸入8個字符。

在查看源碼的時候怎麽找到限制字符長度的語句在哪裏呢?在查看源碼的窗口的頂部左邊有一個鼠標一樣的標誌,點擊它,再點擊題目頁面的password輸入框的位置,源碼部分就會自動跳轉到關於密碼的部分,縮小範圍後就好找多了。

技術分享圖片

對長度maxlength值進行擴大(我直接改成了100,所謂多多益善嘛),然後在密碼欄中再次輸入‘ or 1=1 --,點擊登錄就成功了!在這裏,千萬要開著擴大後的源碼頁面點登陸login,它並不能保存,記住不要關掉你改過長度的網頁代碼頁面,一關就沒了,這點很致命。

5、LAB:SQL Injection(Stage 3:Numeric SQL Injection)

用上一題的方法成功登錄

查看網頁源碼,選擇查看viewprofile部分的代碼,這時候可以看到一行用員工id作為索引來傳送數據的代碼,雙擊這行代碼就可以出現value的值,因為我們想要用Larry的賬戶瀏覽老板信息,而大多數企業公司裏老板的工資應該是最高的,所以我們就把其中的value值由101改為101 or 1=1 order by salary desc --,這樣老板的信息就會被排到第一個讓我們看到
技術分享圖片

可以看到老板應該就是Neville了,電話地址電郵工資卡等等信息一覽無余。

技術分享圖片

6、String SQL Injection

在輸入框中輸入Smith進行嘗試,觀察下方形成的輸入語句,可以看到輸入的Smith在兩個單引號之間:
技術分享圖片

構造永真式‘or 1=‘1,第一個分號用來閉合原輸入語句的前一個分號,而第二個分號用來閉合原輸入語句的後一個分號,使這條語句被強行拆分成為兩條語句。

這樣一來,攻擊就成功了,可以顯示所有用戶的信息了。
技術分享圖片

7、Database Backdoors

先輸入示例101進行嘗試,得到了該用戶的信息。
技術分享圖片

觀察發現輸入的語句不進行驗證,於是我們輸入語句:101; update employee set salary=666666成功將該用戶的工資變成666666,攻擊成功:

技術分享圖片

下一步,輸入語句
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid
就可以了,表中一旦添加新用戶那麽就在用戶表裏將新用戶的郵箱改為我設置的郵箱。

技術分享圖片

8、Blind Numeric SQL Injection

嘗試題目中給出的例子,在輸入框輸入101,運行後發現返回Account number is valid,說明這個數是合法的!
技術分享圖片

構造輸入語句101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 數值 );
,根據返回的語句是否合法判斷pin值的範圍。

技術分享圖片

技術分享圖片

這裏使用二分法,確實有些費時費力,需要從2000,3000,2500,2250,2375,2313,2344,2360,2368,2364......一直很有耐心的試下去,但是其實也不算慢呀感覺,最後確定值是2364,輸入2364後破解成功:
技術分享圖片

實驗總結與體會

  • 這次實驗是通過webgoat來進行測試和攻擊,webgoat很適合用來進行教學和練手,安裝也很方便,只需要JAVA的Jar包,有Java環境就可以使用。也可以對你的使用有個基本的檢測,做對會顯示對號。這次實驗分別嘗試了SQL、CSRF、XSS攻擊,攻擊的場景類型也較為豐富,但也相對簡單,距離實戰還有一定的距離,當然應該應付一些設計缺陷較大,安全防範不足的小網站還是足夠了,也讓我們更直觀的體會到web的脆弱性。
  • 當然除了了解各類基本的攻擊手段,也警示我們網站設計的不易,我們之前所學到的網站設計真的是皮毛中的皮毛,不僅是功能性、美觀等直觀問題。設計過程中如何避免留下可被攻擊的漏洞,如何發現並改寫更是一個值得深思研究的問題。只能感嘆學校的課程真的只是帶我們入門,起到引領指導的作用,之後還是要靠自己去學習探索,在失敗中逐步前進。

20155311《網絡對抗》Web安全基礎實踐