20145307陳俊達《網絡對抗》Exp9 Web安全基礎實踐

20145307陳俊達《網絡對抗》Exp9 Web安全基礎實踐

基礎問題回答

1.SQL注入攻擊原理,如何防護?java

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

對於SQL注入攻擊的防範,我以爲主要仍是應該從代碼上入手:正則表達式

採用預編譯語句集PreparedStatement,它內置了處理SQL注入的能力,只要使用它的setXXX方法傳值便可。它的原理就是sql注入只對sql語句的準備(編譯)過程有破壞做用,而PreparedStatement已經準備好了,執行階段只是把輸入串做爲數據處理,而再也不對sql語句進行解析準備,所以也就避免了sql注入問題;sql

使用正則表達式過濾傳入的參數,對一些包含sql注入的關鍵字進行過濾;瀏覽器

採用字符串過濾的方法;安全

jsp中調用該函數檢查是否包含非法字符,防止SQL從URL注入。服務器

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

XSS是代碼注入的一種,它容許惡意用戶將代碼注入到網頁上,並可以被瀏覽器成功的執行,其餘用戶在觀看網頁時就會受到影響。這類攻擊一般包含了HTML以及用戶端腳本語言。XSS攻擊的主要目的是,想辦法獲取目標攻擊網站的cookie,由於有了cookie至關於有了seesion,有了這些信息就能夠在任意能接進互聯網的pc登錄該網站,並以其餘人的身份登錄,作一些破壞。網絡

XSS的防護能夠從如下兩方面來進行:xss

一種方法是在表單提交或者url參數傳遞前,對須要的參數進行過濾;

檢查用戶輸入的內容中是否有非法內容,如尖括號、引號等,嚴格控制輸出。

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

咱們知道XSS是跨站腳本攻擊,就是在用戶的瀏覽器中執行攻擊者的腳本,來得到其cookie等信息。而CSRF是借用用戶的身份,向web server發送請求,由於該請求不是用戶本意,因此稱爲「跨站請求僞造」。

對於CSRF的防護也能夠從如下幾個方面入手:

經過referer、token或者驗證碼來檢測用戶提交;

儘可能不要在頁面的連接中暴露用戶隱私信息,對於用戶修改刪除等操做最好都使用post操做;

避免全站通用的cookie,嚴格設置cookie的域。

實踐內容

關於WebGoat

Cross-Site Scripting(XSS)練習

Injection Flaws練習

簡介WebGoat

WebGoat是OWASP組織研製出的用於進行web漏洞實驗的應用平臺,用來講明web應用中存在的安全漏洞。WebGoat運行在帶有java虛擬機的平臺之上,目前提供的訓練課程有不少,包含了XSS、線程安全、SQL注入等。

啓動啓動:WebGoat使用8080端口,因此在瀏覽器上訪問localhost:8080/WebGoat,進入WebGoat

Cross-Site Scripting(XSS)練習

Phishing with XSS

tips: 先建立一個form,讓受害人在咱們建立的form中填寫用戶名和密碼,讀取受害人輸入的用戶名和密碼,發送給 http://localhost:8080/WebGoat/catcher?PROPERTY=yes... 在搜索框中輸入攻擊代碼後點擊搜索

Stored XSS Attacks

tips: 致使其餘用戶訪問時載入非預期的頁面或內容,message中輸入一串代碼:

Reflected XSS Attacks

將帶有攻擊性的URL做爲輸入源,輸入

Cross Site Request Forgery(CSRF)

咱們寫一個URL誘使用戶點擊觸發CSRF攻擊,在message框中輸入這樣一串代碼:

CSRF Prompt By-Pass

在瀏覽器中手動輸入URL:localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=5000 進入確認轉帳請求頁面,點擊CONFIRM按鈕以後,在瀏覽器中輸入URL:localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM,成功轉走了5000元:

Injection Flaws練習

Command Injection

在下拉菜單中能看到修改後的值,選中修改後的值再點view,能夠看到命令被執行,出現系統網絡鏈接狀況:

Numeric SQL Injection

注入SQL字符串的方式查看全部的天氣數據,加上一個1=1這種永真式便可,選中Columbia,點Go,能夠看到全部天氣數據:

Log Spoofing

在User Name文本框中輸入jc1%0d%0aLogin Succeeded for username: admin

String SQL Injection

在文本框中輸入' or 1=1 --

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

以用戶Neville登陸,在密碼欄中輸入' or 1=1 --進行SQL注入,對字符長度進行修改:

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

把的value值改成101 or 1=1 order by salary desc --,這樣老闆的信息就會被排到第一個

Database Backdoors

輸入注入語句:101; update employee set salary=10000,成功把該用戶的工資漲到了10000,使用語句101;CREATE TRIGGER BackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='1234@163.com' WHERE userid = NEW.userid建立一個後門

Blind Numeric SQL Injection

先輸入語句101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );查看pin數值是否大於10000,以後慢慢縮小範圍,最終能夠肯定pin的值在2000到2500之間,而後打開BurpSuite,抓包而後send to intruder進行暴力破解,選好攻擊位置後要設置載荷

實驗總結與體會

最後一次實驗了,感受跟本身之前作的不少ctf的題不少相同之處,用網頁源碼分析,用burp分析,不少思路類似之處。多作一些就會又一個大體的思想來把控了。

相關文章
相關標籤/搜索