1. 程式人生 > 其它 >20192406樑健 2021-2022-2 《網路與系統攻防技術》實驗八實驗報告

20192406樑健 2021-2022-2 《網路與系統攻防技術》實驗八實驗報告

20192406樑健 2021-2022-2 《網路與系統攻防技術》實驗八實驗報告

1.實驗內容

(1)Web前端HTML

能正常安裝、啟停Apache。理解HTML,理解表單,理解GET與POST方法,編寫一個含有表單的HTML。

(2)Web前端javascipt

理解JavaScript的基本功能,理解DOM。

在(1)的基礎上,編寫JavaScript驗證使用者名稱、密碼的規則。在使用者點選登陸按鈕後回顯“歡迎+輸入的使用者名稱”

嘗試注入攻擊:利用回顯使用者名稱注入HTML及JavaScript。

(3)Web後端:MySQL基礎:正常安裝、啟動MySQL,建庫、建立使用者、修改密碼、建表

(4)Web後端:編寫PHP網頁,連線資料庫,進行使用者認證

(5)最簡單的SQL注入,XSS攻擊測試

(6)安裝Webgoat或類似平臺,並完成SQL注入、XSS、CSRF攻擊。

2.實驗過程

(1)Web前端HTML

1.能正常安裝、啟停Apache。

  • 正常安裝
  • 啟停Apache

啟動

停止

2.理解HTML,理解表單,理解GET與POST方法

  • HTML

超文字傳輸協議(HTTP)的設計目的是保證客戶端與伺服器之間的通訊。

HTTP 的工作方式是客戶端與伺服器之間的請求-應答協議。

web 瀏覽器可能是客戶端,而計算機上的網路應用程式也可能作為伺服器端。

  • 表單

表單在網頁中主要負責資料採集功能。一個表單有三個基本組成部分: 表單標籤:這裡麵包含了處理表單資料所用CGI程式的URL以及資料提交到伺服器的方法。 表單域:包含了文字框、密碼框、隱藏域、多行文字框、複選框、單選框、下拉選擇框和檔案上傳框等。 表單按鈕:包括提交按鈕、復位按鈕和一般按鈕;用於將資料傳送到伺服器上的CGI指令碼或者取消輸入,還可以用表單按鈕來控制其他定義了處理指令碼的處理工作。

  • GET方法

GET請求會顯示請求指定的資源。一般來說GET方法應該只用於資料的讀取,而不應當用於會產生副作用的非冪等的操作中。

GET會方法請求指定的頁面資訊,並返回響應主體,GET被認為是不安全的方法,因為GET方法會被網路蜘蛛等任意的訪問。

  • POST方法

POST請求會 向指定資源提交資料,請求伺服器進行處理,如:表單資料提交、檔案上傳等,請求資料會被包含在請求體中。POST方法是非冪等的方法,因為這個請求可能會建立新的資源或/和修改現有資源。

3.編寫一個含有表單的HTML。

程式碼如下:

<!DOCTYPE html>
<!--登入程式碼-->
<html>
<body>

<form name="form1" action="login" method="post">
使用者名稱:<br>
<input type="text" name="username" value="20192406樑健">
<br>
密碼:<br>
<input type="password" name="password" value="11111">
<br><br>
<input type="button" value="Submit">
</form> 

</body>
</html>

(2)Web前端javascipt

1.理解JavaScript的基本功能,理解DOM。

1、嵌入動態文字於HTML頁面

2、對瀏覽器事件作出響應

3、讀寫HTML元素

4、在資料被提交到伺服器之前驗證資料

5、檢測訪客的瀏覽器資訊

6、控制cookies,包括建立和修改等

  • DOM

文件物件模型 (DOM) 是HTML和XML文件的程式設計介面。它提供了對文件的結構化的表述,並定義了一種方式可以使從程式中對該結構進行訪問,從而改變文件的結構,樣式和內容。DOM 將文件解析為一個由節點和物件(包含屬性和方法的物件)組成的結構集合。簡言之,它會將web頁面和指令碼或程式語言連線起來。

一個web頁面是一個文件。這個文件可以在瀏覽器視窗或作為HTML原始碼顯示出來。但上述兩個情況中都是同一份文件。文件物件模型(DOM)提供了對同一份文件的另一種表現,儲存和操作的方式。 DOM是web頁面的完全的面向物件表述,它能夠使用如 JavaScript等指令碼語言進行修改。

2.在(1)的基礎上,編寫JavaScript驗證使用者名稱、密碼的規則。在使用者點選登陸按鈕後回顯“歡迎+輸入的使用者名稱”

程式碼如下:

<!DOCTYPE html>
<!--登入程式碼-->
<html>
<script type="text/javascript">
	function lgcheck() {
		//判斷使用者名稱是否為空
		if(form1.username.value==""||
				form1.password.value==""){
			alert("使用者名稱或密碼不能為空!")
		}else{
			document.write("歡迎"+form1.username.value)
		}
	}
</script> 
<body>

<form name="form1" action="login" method="post">
使用者名稱:<br>
<input type="text" name="username" value="20192406樑健">
<br>
密碼:<br>
<input type="password" name="password" value="11111">
<br><br>
<input type="button" value="Submit" onclick="lgcheck()">
</form> 

</body>
</html>

3.嘗試注入攻擊:利用回顯使用者名稱注入HTML及JavaScript。

  • 注入HTML

注入的程式碼如下:

<p>20192406樑健HTML注入</p>
  • 注入JavaScript

注入的程式碼如下:

<script type="text/javascript"> alert("20192406樑健JavaScript注入") </script>

(3)Web後端:MySQL基礎

1.正常安裝

2.啟動MySQL

  • 啟動服務指令:net start mysql
  • 登入指令:mysql -u root -p

3.建庫

指令:create database lj;

4.建立使用者

指令:CREATE USER dbadmin@localhost IDENTIFIED BY 'pwd123';

5.修改密碼

指令:ALTER user 'dbadmin'@'localhost' IDENTIFIED BY '20192406';

6.建表

指令:CREATE TABLE IF NOT EXISTS tasks ( task_id INT(11) NOT NULL AUTO_INCREMENT, subject VARCHAR(45) DEFAULT NULL, start_date DATE DEFAULT NULL, end_date DATE DEFAULT NULL, description VARCHAR(200) DEFAULT NULL, PRIMARY KEY (task_id) ) ENGINE=InnoDB;

(4)Web後端

1.編寫PHP網頁

修改的前端程式碼:

<!DOCTYPE html>
<!--登入程式碼-->
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript">
	function lgcheck() {
		//判斷使用者名稱是否為空
		if(form1.username.value==""||
				form1.password.value==""){
			alert("使用者名稱或密碼不能為空!")
		}else{
			alert("歡迎"+form1.username.value)
			form1.submit();
		}
	}
</script> 
</head>
<body>
<center>
<form name="form1" action="login.php" method="post">
使用者名稱:<br>
<input type="text" name="username" value="20192406樑健">
<br>
密碼:<br>
<input type="password" name="password" value="11111">
<br><br>
<input type="button" value="Submit" onclick="lgcheck()">
</form> 
</center>
</body>
</html>

後端程式碼:

<?php
//支援中文
	header("Content-type:text/html;charset=utf-8");
	$loginTel=$_POST["username"];
    $loginPwd=$_POST["password"];
    //測試用例
	// $loginId="20192406樑健";
	// $loginPwd="11111";
	$conn=mysqli_connect("localhost","root","root");
	mysqli_select_db($conn, "lj");
	$result1=mysqli_query($conn,"select * from user where uname='$loginTel' and passwd='$loginPwd'");
	$result2=mysqli_query($conn, "select * from user where uname='$loginTel'");
	//1表示使用者名稱存在密碼正確,2表示使用者名稱存在密碼錯誤,0表示使用者名稱不存在
	if(mysqli_num_rows($result1)==1){
		echo "使用者名稱密碼正確,登陸成功";
		echo "歡迎&nbsp;";
		echo $loginTel;
	}else if(mysqli_num_rows($result2)==1){
		echo "使用者名稱正確,密碼錯誤";
	}else if(mysqli_num_rows($result2)==0){
		echo "使用者名稱不存在";
	}
	mysqli_close($conn);	
?>

2.連線資料庫

PHP中連線資料庫的程式碼如下:

$conn=mysqli_connect("localhost","root","root");
mysqli_select_db($conn, "lj");
....
mysqli_close($conn);

3.進行使用者認證

PHP中使用者認證的程式碼如下:

$result1=mysqli_query($conn,"select * from user where uname='$loginTel' and passwd='$loginPwd'");
$result2=mysqli_query($conn, "select * from user where uname='$loginTel'");
//1表示使用者名稱存在密碼正確,2表示使用者名稱存在密碼錯誤,0表示使用者名稱不存在
if(mysqli_num_rows($result1)==1){
	echo "使用者名稱密碼正確,登陸成功";
	echo "歡迎&nbsp;";
	echo $loginTel;
}else if(mysqli_num_rows($result2)==1){
	echo "使用者名稱正確,密碼錯誤";
}else if(mysqli_num_rows($result2)==0){
	echo "使用者名稱不存在";
}

4.網頁效果

資料庫中的資訊如下:

uname passwd
20192406樑健 11111
admin admin
  • 輸入正確使用者名稱和密碼
  • 輸入正確使用者名稱和錯誤密碼
  • 輸入錯誤使用者名稱

(5)最簡單的SQL注入,XSS攻擊測試

1.最簡單的SQL注入測試

測試輸入內容如下:

' or '1'='1

2.XSS攻擊測試

測試輸入內容如下:

<script  type="text/javascript">alert('XSS攻擊')</script>

(6)安裝Webgoat或類似平臺,並完成SQL注入、XSS、CSRF攻擊。

本實驗使用WebGoat平臺完成一下實驗內容。

1.SQL注入

題目:SQL Injection (intro)->12頁

這關利用查詢鏈(分號;)破壞資料完整性,也就是修改非授權資料。兩個框都可以是注入點,因此有兩種解法:

Name框:Smith

TAN框:3SL99A';UPDATE employees SET salary=200000 WHERE last_name='Smith

或者

Name框:Smith';UPDATE employees SET salary=200000 WHERE last_name='Smith';-- ss

TAN框不填

2.XSS攻擊

題目:Cross Site Scripting->7頁

點選一下UpdateCart,會發現下方將credit cart number顯示出來了,那麼credit cart number的輸入框應該是一個攻擊點。

<script  type="text/javascript">alert('XSS')</script>

3.CSRF攻擊

題目:Cross-Site Request Forgeries->3頁

使用Burpsuite攔截並修改內容重發

3.問題及解決方案

  • 問題1:在執行PHP的Web後端程式碼時,發現無法執行。
  • 問題1解決方案:原因是,程式碼的函式呼叫和PHP版本不符合,解決方法是修改呼叫函式的名稱和引數,這樣就可以執行PHP的後端程式碼。
  • 問題2:在進行mysql使用時,我的mysql版本為8,所以在使用修改密碼指令時出錯。
  • 問題2解決方案:解決方法是查詢正確的指令寫法,並執行。最後成功了。

4.學習感悟、思考等

通過本次實驗,我學習了很多Web安全的內容,主要學習了很多Web攻擊方式,並在不同的平臺進行實踐,在實踐過程中我遇到了一些問題,在問題的查詢和解決過程中,發現了很多的不足,在學習程式碼的時候也發現自己之前學習的內容過了一段時間,也容易忘記,總是出錯。所以應該時常複習,並且要熟練運用搜索工具,也應該收集和整理一些常見問題,並把解決方案記錄下來。總的來說,網路空間的安全是脆弱的,我們要努力學習網路安全技術,只有掌握了更多的內容才能更加清晰的認知,對不同的網路攻擊都有所瞭解才能在遇到問題時,可以做到不慌不忙,儘量解決問題。