Exp9 Web安全實踐基礎 20154328 常城

Exp9 Web安全基礎實踐

1、基礎問題回答

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

  • SQL注入攻擊就是經過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意SQL命令的目的。
  • 對於SQL注入攻擊的防範,主要仍是從代碼上入手:
  1. 採用預編譯語句集PreparedStatement,它內置了處理SQL注入的能力,只要使用它的setXXX方法傳值便可。它的原理就是sql注入只對sql語句的準備(編譯)過程有破壞做用,而PreparedStatement已經準備好了,執行階段只是把輸入串做爲數據處理,而再也不對sql語句進行解析準備,所以也就避免了sql注入問題;
  2. 使用正則表達式過濾傳入的參數,對一些包含sql注入的關鍵字進行過濾;
  3. 採用字符串過濾的方法;
  4. jsp中調用該函數檢查是否包含非法字符,防止SQL從URL注入。

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

  • SS是代碼注入的一種,它容許惡意用戶將代碼注入到網頁上,並可以被瀏覽器成功的執行,其餘用戶在觀看網頁時就會受到影響。這類攻擊一般包含了HTML以及用戶端腳本語言。XSS攻擊的主要目的是,想辦法獲取目標攻擊網站的cookie,由於有了cookie至關於有了seesion,有了這些信息就能夠在任意能接進互聯網的pc登錄該網站,並以其餘人的身份登錄,作一些破壞。
  • 防護能夠從如下兩個方面進行:
  1. 在表單提交或者URL參數傳遞前就對其參數進行過濾
  2. 檢查用戶輸入的內容中是否有非法的內容,例如尖括號、引號等之類的字符,嚴格控制輸出。

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

  • 咱們知道XSS是跨站腳本攻擊,就是在用戶的瀏覽器中執行攻擊者的腳本,來得到其cookie等信息。而CSRF是借用用戶的身份,向web server發送請求,由於該請求不是用戶本意,因此稱爲「跨站請求僞造」。
  • 對CSSRF的防護能夠從一下幾個方面進行;
  1. 經過referer、token或者驗證碼來檢測用戶提交;
  2. 儘可能不要在頁面的連接中暴露用戶隱私信息,對於用戶修改刪除等操做最好都使用post操做;
  3. 避免全站通用的cookie,嚴格設置cookie的域。

2、實踐內容

1. 關於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:
  1. 打開後會發現本身的虛擬機中沒有安裝,我使用的是楊正暉分享的WebGoat7.1下載好後,將它放入home中,再次輸入java -jar webgoat-server-7.1-exec.jar(由於下載的是7.1的版本,所以命令中的版本號須要從新改一下)
  1. 打開瀏覽器,輸入localhost:8080/WebGoat
  1. 選擇默認帳號、密碼便可登錄成功

2. SQL練習

Numeric SQL Injection

  • 原理是這裏有一個SQL語句
  • SELECT * FROM weather_data WHERE station = [station]
  • 能夠攔截報文將station字段後補充成一個永真式101 OR 1=1
  • 可使用kail上自帶的火狐開發人員的調試工具將文本框打開。
  • 將原語句修改成:SELECT * FROM weather_data WHERE station = 101 OR 1=1html

  • 因爲1=1恆成立,點擊go,看到全部城市的天氣,成功。前端

Log Spoofing

  • 日誌僞造,目的是經過注入惡意字符串,按照規則僞造出一條日誌,在Username輸入
  • zh%0d%0aLogin Succeeded for username: admin
  • 其中%0d和%0a爲CRLF換行符,看到的輸出爲java

  • 第二行就是咱們剛剛僞造出來的web

XPATH Injection

  • 題乾的意思爲你的帳號及密碼爲Mike/test123。你的目標是嘗試查看其餘員工的數據。
  • 仍是須要構建永真式
  • cc' or 1=1 or 'a'='a正則表達式

String SQL Injection

  • 字符注入,這裏和前面數字注入的方法差很少,構造一個永真式,仍是用的以前的'or 1='1
  • 'cc' OR '1'='1
  • SELECT * FROM user_data WHERE last_name = 'cc' OR '1'='1'sql

LAB: SQL Injection

Stage 1:String SQL Injection

  • 使用String SQL注入來繞過身份驗證。
  • 以用戶Neville登陸,在密碼欄中輸入' or 1=1 --永真式進行SQL注入,可是發現登陸失敗。發現password的最大長度爲8,更改最大長度,將其改成100瀏覽器

  • 再次登陸,成功安全

Stage 3:Numeric SQL Injection

  • 該題目的目的是經過注入語句,瀏覽到本來沒法瀏覽的信息。繞過認證執行SQL注入,經過一個普通員工的帳戶larry,瀏覽其BOSS的帳戶信息。
  • 先使用上面的Larry的帳戶
  • 由於刷新了網頁咱們須要從新修改最大字符長度服務器

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

  • 點擊ViewProfile進去,便可查看老闆的詳細信息

SQL字符串注入(String SQL Injection)

  • 題目大意是:這個表單容許使用者查詢他們的信用卡號,使用SQL注入讓全部的信用卡號都看得見。
  • 咱們構造一個永真式「1」,那麼無論前面的WHERE是否成立都能執行,因此構造語句'or 1='1,成功獲得了所有的信用卡號。

Database Backdoors

  • 輸入注入語句:101; update employee set salary=65000,

  • 接下來使用語句
  • 101;CREATE TRIGGER yqhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20154322@qq.com' WHERE userid = NEW.userid建立一個後門,把表中全部的郵箱和用戶ID都設爲個人。

數字盲注(Blind Numeric SQL Injection)

  • 題目中說明了下面的表單容許用戶輸入賬號並肯定它是否有效,即返回值只有帳戶有效或無效兩種。
  • 先輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 4000);,結果是
    Account number is valid.帳戶有效,再試試先輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 4000);,結果是
    Account number is valid.帳戶有效,再試試

  • 再輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2500 );,結果是
    Invalid account number.,帳戶無效。也就是說,咱們要找的數在2000~2500之間
  • 利用二分法,屢次嘗試,找到數字爲2364

盲字符串注入(Blind String SQL Injection)

  • 輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) >'z' );進行猜解,發現結果爲Account number is valid,帳戶有效。再往大寫的字母猜想,最終肯定首字母爲J

  • 接下來猜第二個字母
    輸入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 2, 1) >'h' );發現結果爲Account number is valid,帳戶有效。
  • 最後肯定第二個字母爲「i」
  • 重複上述步驟,最終肯定用戶名爲「Jill」

3.Cross-Site Scripting (XSS)

跨站腳本釣魚攻擊(Phishing with XSS)

  • 題目要求是關於一個頁面中存在XSS漏洞時,他如何支持釣魚攻擊。要求咱們利用xss和html注入達到這些目標。
  • 使用XSS和HTML插入製做一個釣魚網站,將其輸在search框中,代碼以下:

  • 輸入後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼

  • 成功

反射型XSS(Reflected XSS Attacks)

  • 輸入帶有攻擊性的URL,如,就會彈出對話框

存儲型xss(Stored XSS Attacks)

  • 在Title裏輸入「Test Stored XSS」,
  • 在 Message裏輸入

4. CSRF

Cross Site Request Forgery(CSRF)

  • 實驗目標:向新聞組發送一封email。這個email包含一個image,其URL指向一個惡意請求。
  • CSRF就是冒名登陸,用代碼僞造請求
  • 在Title輸入:20154328,在Message輸入:

  • 點擊「Submit」,在Message List下出現一條提交的記錄,以下圖所示:

CSRF Prompt By-Pass

  • 在Title輸入:20154328;在Message輸入:

  • 以下圖所示:

CSRF Token By-Pass

  • 在Title輸入:20154328
  • 在Message輸入構造的代碼

  • 擊Submit,而後在Message List裏點擊「CSRF Token By-Pass Attack」,以下圖所示:

實驗總結與體會

  • 作這些題目其實頗有意思,結合了一些情景,讓咱們更加接近於實戰。此次作的只是關於Web安全,還有不少其餘方面的,好比逆向、密碼等,以前也作過一些相似CTF的題目,雖然有的時候作出一道題目須要腦洞比較大,可是作得多了以後就會發現其實也沒有那麼難想到,由於不少套路你慢慢在作題中就能領悟到,我以爲作題的過程也是一我的思考的過程,就算實在沒想出來最後看了別人寫的writeup也會很受啓發,經歷了思考的東西永遠都是印象最深的。
  • 經過此次的實驗讓我深入地理解了SQL注入,XSS,CSRF等攻擊的攻擊原理和方法。也再一次提醒我,陌生連接不要點。學完了發現,像SQL,XSS這些攻擊大都須要猜想你的源代碼,知道了你的源代碼就很好攻擊了,感受只要知道了你源代碼我總能給你作點惡意攻擊,同時,編寫WEB前端後臺的時候也要注意常見的或可能遇到的攻擊,最後能不能攻擊到,攻防你來我往地,就要看誰思路廣、套路深了。
相關文章
相關標籤/搜索