20232906 2023-2024-2 《网络与系统攻防技术》第十次作业

20232906 2023-2024-2 《网络与系统攻防技术》第十次作业

1.实验内容

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

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

  • 熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
  • 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
  • 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
  • SQL对抗:修复上述SQL注入攻击漏洞。

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

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

  • 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
  • 弹窗显示cookie信息:将cookie信息显示。
  • 窃取受害者的cookies:将cookie发送给攻击者。
  • 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
  • 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
  • 编写XSS蠕虫。
  • 对抗XSS攻击。

2.实验过程

2.0 环境配置

  1. 这次实验需要使用SEEDUbuntu-16.04-32,可以通过DigitalOcean链接下载,下载后解压即可得到.vmdk文件。

  2. 在Vmware中选择“创建新的虚拟机”——“自定义”——Workstation14.x——“稍后安装操作系统”——“Linux”——“Ubuntu”——位置随意——处理器2内核1——内存2048MB——“网络地址转换”——“LSI Logic”——“SCSI”——“使用现有虚拟磁盘”——选择步骤1解压的文件中的“SEEDUbuntu-16.04-32bit.vmdk”完成创建。

  3. 开机后,点击“虚拟机(M)”——安装Vmware Tools

  4. 在左边栏中点击DVD图标,找到其中的压缩包tar文件,将其复制到home目录下,如图一所示。


    图一 复制压缩包
  5. 双击压缩包并点击“Extract”进行解压,然后进入解压得到的文件夹中,鼠标右键——“Open in Terminal”,然后在终端中输入命令sudo ./vmware-install.pl,在安装过程中,遇到【Y/N】输入y,遇到其他提示直接按回车,安装结束后重启虚拟机即可完成安装。

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

2.1.1 基础知识
  1. SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server 等。
  2. SQL注入是一种非常常见的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一。 SQL注入其实就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。这个问题的来源是,SQL数据库的操作是通过SQL语句来执行的,而无论是执行代码还是数据项都必须写在SQL语句之中,这就导致如果我们在数据项中加入了某些SQL语句关键字(比如说SELECT、DROP等等),这些关键字就很可能在数据库写入或读取数据时得到执行。
2.1.2 熟悉SQL语句
  1. 首先我们熟悉一下SQL语句的使用,在SEED Ubuntu中输入命令mysql -u root -p,然后回车并输入密码seedubuntu登录数据库,如图二所示。

    -u:指定用户名
    -p:指定密码。


    图二 登录MySQL数据库
  2. 输入命令查询Users数据库中的数据表,并使用命令读取数据表中的字段,每行分别输入回车执行,如图三所示。

    use Users;	//切换到Users数据库
    show tables;	//查询Users数据库中的数据表
    select * from credential;	//查询credential表中的条目
    

    图三 查询Users数据库中的数据表
2.1.3 对 SELECT 语句的SQL注入攻击
  1. SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集

  2. 2.1.2中的数据表是http://www.seedlabsqlinjection.com/使用的数据,我们访问该网站,随意输入用户名和密码,网站提示如图四所示。


    图四 随意输入用户名和密码后网站提示
  3. 单击“F12”——“Network”,然后刷新网页,可以发现用户名和密码通过GET请求(通过URL的传参也可以看出)提交至unsafe_home.php页面进行身份检验,如图五所示。


    图五 查看网络流量
  4. 据上述分析,我们检查一下unsafe_home.php的相关代码,在终端中使用命令vim /var/www/SQLInjection/unsafe_home.php,结果如图六所示。首先检查了一下Session确认是否已经登录,然后和Users数据库建立连接,并从credential表中查找用户输入的用户名和密码组合是否存在。


    图五 unsafe_home.php
  5. 继续往下看,可以发现如图六所示代码,如果用户为Admin,则会输出所有用户的信息。


    图六 判断是否为管理员
  6. 其中,我们要注入的SQL查询为:

    SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd';
    
  7. 在SQL语句中,“#”表示注释,如果我们的用户名输入为“Admin’#”,则SQL查询变为:

    SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= 'Admin'#' and Password='$hashed_pwd';
    

    不难看出' and Password='$hashed_pwd'被当作注释而无法发挥作用,所以只需要输入用户名:Admin'#即可进入该网站的管理员界面,如图七所示,同理将用户名换为[数据表中6用户名之一]'#既可以登入对应用户的账户:


    图七 成功进行SQL注入攻击
2.1.4 对 UPDATE 语句的SQL注入攻击
  1. UPDATE 语句用于更新表中已存在的记录。

  2. 按照2.1.3的分析,我们输入用户名Alice'#登入Alice的账户,如图八所示。


    图八 通过SQL注入攻击登入Alice账户
  3. 单击“F12”——“Network”,然后单击“Edit Profile”然后直接点“Save”,如图九所示,浏览器将修改后的数据传入unsafe_edit_backend.php中进行处理。


    图九 数据传入unsafe_edit_backend.php中处理
  4. 在终端中输入命令vim /var/www/SQLInjection/unsafe_edit_backend.php查看对应的代码,如图十所示。正常情况下员工可以修改自己的昵称、右键、地址、密码和电话号码。


    图十 unsafe_edit_backend.php
  5. 其中,我们要注入的SQL语句为:

UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;
2.1.5 SQL对抗

2.2 SEED XSS跨站脚本攻击实验

3.问题及解决方案

  • 问题1:在2.3时,使用命令execstack操作系统提示——无法定位软件包 execstack

  • 问题1解决方案:通过百度搜索,我找到了execstack的官方网站并成功找到了execstack的安装包,由于kali是Debian的发行版,所以选择了Debian版本的进行下载,具体下载地址见下面的链接。进入链接后在Download处即可找到资源的下载链接。

    https://debian.pkgs.org/10/debian-main-amd64/execstack_0.0.20131005-1+b10_amd64.deb.html

    下载到本地后,使用apt的命令即可完成安装

    apt install ./execstack_0.0.20131005-1+b10_amd64.deb
    
  • 问题2:在2.3中,获取地址后修改字符串的数据然后重新执行发现依旧不成功

  • 问题2解决方案:使用gdb进行调试,发现了每一次esp中的地址都不相同,结合实验指导书的相关内容,发现是没有关闭地址随机化,使用相应命令关闭地址随机化即可。

    echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
    

4.学习感悟、思考等

本次实验进行的是缓冲区溢出攻击,通过动手实践的方式我弄懂了缓冲区溢出的基本原理和常用的方法以及可执行程序的分析方法。在本次实验中,经过王老师的讲解和刘老师的博客,我成功地入门了缓冲区溢出这一个我曾以为困难重重的课题。同时,此次实验也使我对于二进制文件有了初步的了解,拿到了二进制文件,我也不再会不知所措,而是可以通过工具对其进行一定的分析,可以说收获颇多。

本次实验也暴露出了我在某些方面还有所欠缺,例如对于汇编语言的了解还不够深入,很多命令还需要老师的点拨才能够明白它的功能;本次实验中的Shellcode是老师直接提供给我的,是只针对于获得Shell这个功能的。如果要实现其他的功能,编写自己的Shellcode,还需要我对于Shellcode的相关知识认真学习;本次实验对于地址随机化和堆栈保护都进行了关闭,那么在地址随机化和堆栈保护开启的时候如何进行缓冲区溢出攻击也值得我深入思考。只有这样我才能够在此次实验的基础上取得更大的进步。

最后,感谢王老师和刘老师的细心讲解和耐心帮助,也感谢在实验过程中给我帮助的同学们。正因为有你们的帮助我才能够顺利地完成本次实验,谢谢!

参考资料

  • SEED Labs - Wenliang Du
  • 入坑解读 | 什么是SQL注入? - 信息安全发送者
  • execstack_0.0.20131005-1+b10_amd64.deb

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629930.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt多文档程序的一种实现

注&#xff1a;文中所列代码质量不高&#xff0c;但不影响演示我的思路 实现思路说明 实现DemoApplication 相当于MFC中CWinAppEx的派生类&#xff0c;暂时没加什么功能。 DemoApplication.h #pragma once#include <QtWidgets/QApplication>//相当于MFC中CWinAppEx的派生…

【Python报错】Python安装模块时报错Fatal error in launcher

【Python报错】Python安装模块时报错Fatal error in launcher 最近需要用到python下载一个小工具&#xff0c;自信敲下回车键本想看到黑乎乎的终端上会出现快速跳跃的命令代码&#xff0c;没想到&#xff0c;报错了...... Fatal error in launcher: Unable to create process …

外卖系统拦截器实现(Interceptor)

SpringMVC的拦截器主要是用于拦截控制器方法的执行&#xff1b; 概念&#xff1a;是一种动态拦截方法调用的机制&#xff0c;类似于过滤器。在Spring中动态拦截控制器中方法的执行。 作用&#xff1a;在指定的控制器中调用前后执行预先设定的代码&#xff0c;完成功能增强。 应…

day08|字符串题目part01

相关题目&#xff1a; ● 344.反转字符串 ● 541. 反转字符串II ● 卡码网&#xff1a;54.替换数字 ● 151.翻转字符串里的单词 ● 卡码网&#xff1a;55.右旋转字符串 344.反转字符串—双指针的应用 力扣链接 思路&#xff1a;创建两个指针分别指向头部和尾部&#xff0c;首…

【JavaEE进阶】 Bean的作用域与生命周期

文章目录 &#x1f343;Bean的作用域&#x1f6a9;作用域的使用&#x1f6a9;观察Bean的作用域&#x1f388;单例作用域&#x1f388;多例作用域&#x1f388;请求作用域&#x1f388;会话作⽤域&#x1f388;Application作⽤域 &#x1f384;Bean的⽣命周期⭕总结 &#x1f34…

Linux 第三十三章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

rocketmq的存储和检索

messageId是rocketmq自动生成的。

JSP+SQL学生成绩管理系统

Java版本&#xff1a;1.8 数据库&#xff1a;MySQL 框架&#xff1a;Spring Spring MVC MyBatis 服务器&#xff1a;Tomcat 前端解析框架&#xff1a;Thymeleaf 开发工具&#xff1a;Idea 2017 版本管理工具&#xff1a;Maven 版本控制工具&#xff1a;GitHub 经过对系统的需…

国际化日期(inti)

我们可以使用国际化API自动的格式化数字或者日期&#xff0c;并且格式化日期或数字的时候是按照各个国家的习惯来进行格式化的&#xff0c;非常的简单&#xff1b; const now new Date(); labelDate.textContent new Intl.DateTimeFormat(zh-CN).format(now);比如说这是按照…

link.click()时浏览器报错The file at ‘data:image/png;base64,iVBORw

代码如下&#xff1a; const dataURL canvas.toDataURL({format: "png",width: 400,height: 400, });const link document.createElement("a"); link.download new Date().getTime();link.href dataURL; document.body.appendChild(link); link.click…

【考研数学】准备开强化,更「张宇」还是「武忠祥」?

数一125学长前来回答&#xff0c;选择哪位老师的课程&#xff0c;这通常取决于你的个人偏好和学习风格&#xff01; 张宇老师和武忠祥老师都是非常有经验的数学老师&#xff0c;他们的教学方法各有特点。 张宇老师的教学风格通常被认为是通俗易懂&#xff0c;善于将复杂的概念…

x264 帧类型代价计算原理:slicetype_mb_cost 函数分析

slicetype_mb_cost 函数 函数功能 计算每个宏块 MB 的代价 cost。函数参数分析 x264_t *h:全局编码结构体x264_mb_analysis_t *a:宏块分析结构体x264_frame_t **frames:系列帧数据结构体int p0:帧序号之一,一般指向靠前帧int p1:帧序号之一,一般指向靠后帧int b:帧标志…

《系统架构设计师教程(第2版)》第4章-信息安全技术基础知识-02-信息加密技术

文章目录 1. 信息加密技术1.1 数据加密1.2 对称密钥加密算法1&#xff09;数据加密标准&#xff08;DES)2&#xff09;三重DES&#xff08;Triple-DES&#xff09;3&#xff09;国际数据加密算法&#xff08;IDEA&#xff09;4&#xff09;高级加密标准&#xff08;AES&#xf…

【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类

标题&#xff1a;【C -&#xff1e; Cpp】由C迈向Cpp &#xff08;6&#xff09;&#xff1a;静态、友元和内部类 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 &#xff08;一&#xff09;静态成员 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

Zynq UltraScale+ RFSoC 配置存储器器件

Zynq UltraScale RFSoC 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Zynq UltraScale RFSoC 器件执行擦除、空白检查、编程和验证等配置操 作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 &#xff0c; 并支持通过 Vivado 软件对其中所列…

扭亏为盈的赛力斯,真正进入稳态了吗?

“72小时内大定破1万台”。5月15日&#xff0c;问界新M5开启全国大规模交付&#xff0c;从当前取得的成绩来看&#xff0c;赛力斯的“富贵”似乎还将延续。 其实&#xff0c;此前基于问界新M7等车型的爆火&#xff0c;赛力斯已经找到了创收轨道。财报显示&#xff0c;2024年一…

无代码无国界:我们正在走向软件安全的狂野西部吗?

我们使用的几乎所有东西都是基于代码构建的&#xff0c;从汽车到智能冰箱再到门铃。在企业中&#xff0c;无数的应用程序保持设备、工作流程和操作的运行。因此&#xff0c;当早期的无代码开发平台于 2010 年推出时&#xff0c;承诺为公民开发人员提供更易于访问的应用程序开发…

用友GRP-U8 bx_dj_check.jsp SQL注入漏洞复现(XVE-2024-10537)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;作者不为此承担任何责任。工具来自网络&#xff0c;安全性自测&#xff0c;如有侵权请联系删…

【2024华为HCIP831 | 高级网络工程师之路】刷题日记(18)

个人名片&#xff1a;&#x1faaa; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&a…

动态手势识别(VGG11)

学校的大作业要做一个视频图像处理相关的&#xff0c;就做了动态手势识别 VGG代码 import torch import torch.nn as nnclass VGG_11_3D(nn.Module):def __init__(self, num_classes, pretrainedFalse):super(VGG_11_3D, self).__init__()self.conv1 nn.Conv3d(3, 64, kernel…