web应用安全漏洞

news2024/11/26 8:30:39

注入类

数据库注入

SQL注入

结构化查询语言 (Structured Query Language)简称SQL,结构化查询语言是一种数
据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
关系型数据库 ,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数
据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据
库。常见的关系型数据库有Oracle、DB2、Microsoft SQL Server、MySQL、 Microsoft Access

sql语句可分为

数据查询语言(DQL):用以从表中获得数据。常用保留字: SELECT 、WHERE、
ORDER BY、GROUP BY、HAVING
数据操作语言(DML):用于添加、修改、删除表中的行。常用保留字: INSERT
UPDATE DELETE
事务控制语言(
TCL):确保被DML语句影响的表的所有行及时得以更新。常用保留 字:COMMIT、SAVEPOINT、ROLLBACK
数据控制语言(DCL):通过GRANT或REVOKE实现权限控制,确定单个用户和用
户组对数据库对象的访问
数据定义语言(DDL):在数据库中创建新表或修改、删除表。常用保留字:
CREATE、ALERT、DROP
指针控制语言(CCL):通过DECLARE CURSOR、FETCH INTO和UPDATE
WHERE CURRENT

  

        SQL注入攻击是由于web应用程序开发中,没有对用户输入数据的合法性进行判断,攻击者可以通过输入区域(如URL、表单等),利用某些特殊构造的SQL的特殊字符和指令,提交一段数据库查询代码,操纵并获得敏感数据。攻击的对象是:数据库

示例:

String query = "SELECT * FROM users WHERE userName = '"+ 用户名变量 + "' AND password = '"+ 密码变量 + "'";

ResultSet rs = stmt.execute(query);

如果使用攻击载荷:

用户名: admin’ or ‘1’=‘1

密 码:admin@123’or ‘1’=‘1

        单引号用于闭合 

sql注入的步骤        

识别Web应用与数据库交互的可能输入(识别潜在注入点)
SQL注入语句测试
根据服务器返回判别注入语句是否影响了SQL执行结果以判断是否存
在SQL注入 

sql注入分类

– Error-based SQL injection(报错型注入)通过返回的错误的信息

– Boolean-based blind SQL injection(布尔型注入) 通过条件的正误的判断

– Time-based blind SQL injection(基于时间延迟注入) 判断是否会延时返回请求的结果

按照注入参数类型分为

1.数字型注入
http://test.com/shownews.php?id=1
select * from news where news_id=1
2.字符型注入
http://test.com/show.php?name=apple
select * from fruits where name= ' apple '

测试sql注入的类型: 

基于应用开发语言判断数据库类型
Oracle: JAVA
DB2: JAVA
SQL Server: C#、ASP、.NET
MySQL: PHP、JAVA

基于特有的函数判断数据库类型

 基于特有的数据表进行判断

sql注入按照注入方式分为

显示注入
union query #联合查询注入,通过union联合查询获取查询结果
error based #报错注入,通过报错信息获取查询结果
盲注
boolean based blind #布尔盲注,通过应用返回不同的值推断条件真假
time based blind #时间盲注,通过不同的时间延迟推断条件真假
优先级: union query≥error based>boolean based blind>time based blind

联合查询注入 

union query
前提:页面可以显示数据库查询结果
id=1 order by 5 #猜字段数
id=-1 union select 1,2,3,4,5 #测试哪个字段有回显
id=-1 union select 1,concat(user(),0x2b,database()),3,4 #获取数据库用户和数据库
id=-1 union select 1,group_concat(distinct table_name),3,4 from
information_schema.tables where table_schema=database() #获取表名
id=-1 union select 1,group_concat(distinct column_name),3,4 from
information_schema.columns where table_name= 'user' #获取列名
id=-1 union select 1,concat(id,0x2b,name,0x2b,password),3,4 from user #获取具
体数据

 报错注入

error based
前提:应用可以输出数据库报错信息
floor()
and (select 1 from(select count(*),concat(version(),floor(rand(0)*2))x from
information_schema.tables group by x)a)
updatexml()
and 1=(updatexml(1,concat(0x3a,(select user())),1))
extractvalue()
and extractvalue(1,concat(0x5c,(select user())))
exp()
and exp(~(select * from(select user())a))

布尔盲注

前提:条件真假页面有差别,可区分。可根据返回页面不同判断条件真假
需要一位一位猜解,常用到substr、ascii、mid等函数
if(substr(flag,1,1)in(0x66),3,0)
select case when ascii(mid((select flag from flag),1,1))=65 then 'A' else 'B' end

时间盲注
前提:在其他注入方式使用不了的情况下才会考虑时间盲注,需要借助时间延迟函数或
其他方式达到时延的效果来判断条件真假
if(substr(flag,1,1)in(0x66),sleep(2),0)
select case when ascii(mid((select flag from flag),1,1))=65 then
benchmark(100000,sha1('1 ')) else '' end

提交参数类型

– 数字型

– 字符型

– 搜索型

sql注入防范措施:

  1. 使用参数化查询

  2. 严格限定参数类型和格式,明确参数检验的边界,必须在服务端正式处理之前对提交的数据的合法性进行检查;

  3. 验证输入/参数过滤,即白/黑名单验证;

SQL注入的危害:

  • 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。

  • 网页篡改:通过操作数据库对特定网页进行篡改。

  • 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击

  • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。

  • 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

  • 破坏硬盘数据,瘫痪全系统。

跨站脚本攻击xss

跨站脚本攻击:web开发者在编写应用程序时没有对用户提交的语句和变量进行过滤和限制从本质上来说就是将数据注入到了静态脚本代码中(HTML或者Javascript等),当浏览器渲染整个HTML文档的过程中触发了注入的脚本,导致了XSS攻击的发生。

分类

1.反射型XSS跨站代码一般存在于链接中,请求这样的链接时,跨站代码经过服务端反射回来,这类跨站的代码一般不存储到服务端。

2.存储型XSS: 存储型XSS,它和反射型XSS最大的不同就是,攻击脚本将被永久地存放在目标服务器的数据库和文件中。通常是因为服务器端将用户输入的恶意脚本没有经过验证就存储在数据库中,并且通过调用数据库的方式,将数据呈现在浏览器上。

3.DOM型XSS一种基于DOM的跨站,这是客户端脚本自身解析不正确导致的安全问题

反射性XSS: 

 

  1. 用户正常登录
  2. 攻击者向客户发送恶意的url
  3. 客户使用浏览器访问恶意的url
  4. 服务端对攻击者的js做出回应
  5. 攻击中的js代码进行执行
  6. 用户的浏览器向攻击者发送会话令牌
  7. 攻击者劫持会话用户

存储型XSS

  1. 用户正常浏览服务器的信息
  2. 通过发帖向服务器发送包含恶意代码的帖子
  3. 用户向服务器请求帖子的内容
  4. 服务器返回了包含恶意代码的帖子
  5. 客户端服务器执行了恶意的代码 

DOM型XSS 

不可控的危险数据,未经过滤被传入存在缺陷的 JavaScript代码处理,最终触发 DOM XSS 漏洞。
与反射型 XSS 、存储型 XSS 的区别就在于 xss 代码并不需要服务器解析响应的直接参与,触发XSS 靠的是浏览器端的DOM解析

XSS的防范措施

对用户提交内容进行合法性校 验
对用户提交内容进行转义处理
对用户输入的长度进行限制
限制Cookie到期时间
对输出数据使用HtmlEncoder对一些字符做转义处理

 CSRF跨站请求伪造

服务器收到攻击者伪造的来自浏览器的请求并执行

跟跨站脚本(XSS)相比,XSS利用的是用户浏览器对网站的信任,CSRF利用的是网站对用户浏览器的信任。

要完成CSRF攻击需要的条件

1.账号不能登出

2.双方需要使用同样的浏览器

CSRF与XSS区别
攻击流程
攻击者发现XSS漏洞——构造代码——发送给受
害人——受害人打开——攻击者获取受害人的
cookie——完成攻击
攻击者发现CSRF漏洞——构造代码——发送给受
害人——受害人打开—— 受害人执行代码 ——完
成攻击
区别
XSS容易发现,因为攻击者需要登录后台完成攻击,管理员可以看日志发现攻击者。
CSRF则不同,他的攻击一直是管理员自己实现的,攻击者只负责了构造代码

CSRF防护

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的
  request.getHeader("REFERER");
通过检查Referer的值,我们就可以判断这个请求是合法的还是非法的,那么Refere Check 可以用于监控CSRF攻击的发生

 文件上传漏洞

非法文件上传产生的主要原因就是在服务器端没有对用户上传的文件类型做校验或者校验不完整,导致用户可以上传恶意脚本到服务器
  可利用该缺陷上传 Webshell 、病毒及其他恶意代码能够进行进一步提权,
获取数据库信息(拖库)甚至那倒服务器权限

文件上传防护 

1、服务器端添加上传文件类型“白名单” 。校验功能,仅允许业务需求类型上传
2、服务器端添加上传文件名特殊字符过滤机制,防止特殊字符引起的文件解析漏洞
3、服务器端添加上传文件重命名机制,包含文件后缀格式重命名
4、服务器端添加上传文件内容识别机制,防止恶意文件伪装图片等类型文件上传
5、服务器端单独创建上传目录,并限制目录解析权限,杜绝目录解析网页类型文件

路径遍历-任意文件下载

服务器端,接收浏览器传来的文件名称,在服务器端拼凑成文件的绝对路径,并且用输出流下载
String path = request.getParameter("path");
java.io.OutputStream os = response.getOutputStream();
java.io.FileInputStream fis = new java.io.FileInputStream(path);
byte[] b = new byte[1024];
int i = 0;
while ((i = fis.read(b)) > 0 ){
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();

构造攻击载荷
../../../../../../../etc/passwd

 路径遍历防护

1、要下载的文件地址保存至数据库中。
2、文件ID使用随机数命名
3、文件路径保存至数据库,用户提交文件对应ID下载文件。
4、下载文件之前做权限判断。
5、记录文件下载日志
针对文件的访问,直接给出文件路径的链接。如:
<a href= “http://xx.xx.xx.xx/upload/file1.jpg”>

broken Authentication 失效的身份认证

1.用户身份验证凭证没有使用哈希或加密保护;
2.认证凭证可猜测
3.SessionId暴露在URL里
4.SessionId没有超时限制
5.密码、会话ID和其他认证凭据使用未加密连接传输

认证信息未加密:

密码信息明文传输、密码信息明文存储

会话管理:

会话更新:

会话标识信息在认证前后是否进行了更新操作。
会话存放:
会话标识信息是否存放在了URL链接或页面信息等不安全的地方。
会话销毁:
会话使用完毕或权限注销后是否进行会话终止及销毁操作。

失效的访问控制

网站权限是指系统设置的某种安全规则或者安全策略,用户可以访问而且只能访问自己
被授权的资源。
越权攻击是指攻击者通过技术手段,查看或使用了非自己权限下的功能或信息。 

 未授权攻击

未授权查看
攻击者在未登录状态下, 通过特定链接地址,查看到他人用户信息
未授权功能使用
攻击者在未登录状态下, 通过特定链接地址,使用特定用户或系统功能

 越权

垂直越权漏洞 ,也称权限提升漏洞,由于Web应用程序没有做权限控制或者仅在菜单上做了权限控制,导致的恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升目的
攻击者使用 低权限 账户,查看或使用到了 高权限 账号才能使用的信息和功能
水平越权漏洞 ,Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或判断数据所属人时,从用户提交的request参数(用户可控数据)中,获取了数据所属人id,导致恶意攻击者可以通过变换数据ID,或变换所属人id,修改不属于自己的数据。恶意
用户可以删除或修改其他人数据
攻击者使用有特定权限账户,访问或使用到了 同级别 其他用户的模块功能

 越权漏洞防护

垂直越权漏洞: 在调用功能之前,验证当前用户身份是否有权限调用相关功能(推荐使用过滤器,进行统一权限验证)
水平越权漏洞: 在用户进行操作时,从session中获取用户id,将传入的参数与用户的身份做绑定校验。

 Java反序列化漏洞

序列化:ObjectOutputStream类 --> writeObject()

该方法对参数指定的 obj 对象进行序列化,把字节序列写到 一个目标输出流中,按 Java 的标准约定是给文件一个 .ser 扩展名
1) 创建一个对象输出流,它可以包装一个其他类型的目
标输出流,如文件输出流;
2) 通过对象输出流的writeObject()方法写对象。
反序列化: ObjectInputStream类 --> readObject()
该方法从一个源输入流中读取字节序列,再把它们反序列化 为一个对象,并将其返回
1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
2) 通过对象输入流的readObject()方法读取对象

 攻击者可以进行恶意的构造,让反序列化产生非预期的对象,非预期的对象在产生过程中就可能带来任意代码执行。

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

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

相关文章

STM32(一)准备开发环境CLion+CubeMX

本篇内容 一、CLion和STM32CubeMX基础安装二、安装OpenOCD三、安装交叉编译工具链四、配置CLion并点亮第一个LED灯五、烧录程序六、错误排查 本篇安装配置STM32的开发环境&#xff0c;使用的是稚晖君同款CLionSTM32CubeMX的开发环境 一、CLion和STM32CubeMX基础安装 软件安装只…

Java-API简析_java.lang.Integer类(基于JDK1.8)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/130730986 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

Python绘制带误差棒的柱状图渐变色填充含数据标注(进阶)

往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 文章目录 准备数据一、绘制图表二、…

Android RecyclerView实现吸顶动态效果,附详细效果图

文章目录 一、ItemDecoration二、实现RecyclerView吸顶效果1、实现一个简单的RecyclerView2、通过ItemDecoration画分割线3、画出每个分组的组名4、实现吸顶效果 完整demo 链接:https://download.csdn.net/download/JasonXu94/87786702 一、ItemDecoration [外链图片转存失败…

SpringDataRedis

SpringDataRedis SpringDataRedis简介RedisTemplate对Redis操作类型SpringDataRedis快速入门1、引入spring-boot-starter-data-redis依赖2、在application.properties配置Redis信息3、注入RedisTemplate并测试 SpringDataRedis的序列化方式现象分析SpringDataRedis的序列化方式…

基于RK3588的以太网PHY的问题分析

环境:RK3588为荣品电子核心板,PHY为裕太微电子YT8521; 首先上电后识别不到以太网: 1.先怀疑驱动的问题,因为本方案中直接使用的是荣品电子官方的驱动; 对比原理图及驱动。涉及到一个配置问题。 基于时钟来源的不通,驱动程序可分为四种模式,PHY的时钟和TXCLK的时钟;…

北华大学第九届程序设计竞赛 题解

5.14和队友VP一场&#xff0c;第二次VP&#xff0c;状态明显比第一次好很多&#xff0c;总共A了7题&#xff0c;基本是能做出来的都做出来了&#xff0c;最后还剩下接近2小时的时间。。。。。 A "北华"有几何 思路&#xff1a;数图片中“北华”的数量&#xff0c;直…

双平台GraalVM编译二进制程序

本文示例均采用Java11&#xff0c;GraalVM目前无法支持跨平台编译&#xff0c;比如&#xff0c;我通过Linux直接编译Windows可执行的exe&#xff0c;是不行的。 因此&#xff0c;需要掌握两种平台的GraalVM的安装、使用。 一、背景 1.1 为何GraalVM快&#xff1f; 常规Java…

永恒之塔私服 2.0包楼纳斯达克 网游的诺曼底登陆-

二战末期的诺曼底登陆&#xff0c;至今让人历历在目。盟军自此在西欧展开大规模进攻&#xff0c;加速了纳粹德国的崩溃。从某种意义上说&#xff0c;诺曼底登陆是整个二战一次生死攸关的转折点。《永恒之塔2.0&#xff1a;进军龙界》登上纳斯达克&#xff0c;也是一场激荡人心的…

基于自动编码器VAE的声音生成之音频预处理模块preprocess pipeline的实现和代码讲解

文章目录 概述Preprocessline模块实现以及代码讲解Loader模块Padder模块LogSpectrogramExtractor模块MinMaxNormaliser模块Saver模块PreprocessPipeLine模块知识补充property修饰词 总结 概述 这部分是将原来基于mnist手写数据集生成模型&#xff0c;一个用到基于FSDD音频数据…

蓝桥:前端开发笔面必刷题——Day2 数组(二)

文章目录 &#x1f4cb;前言&#x1f3af;删除有序数组中的重复项&#x1f4da;题目内容✅解答 &#x1f3af;移动零&#x1f4da;题目内容✅解答 &#x1f3af;长度最小的子数组&#x1f4da;题目内容✅解答 &#x1f3af;反转字符串数组&#x1f4da;题目内容✅解答 &#x1…

麒麟操作系统软件更新灾难连篇之二:QQ罢工

在解决了中文输入法消失的问题后&#xff0c;还没缓过气来&#xff0c;又发现QQ罢工了&#xff1a;双击电脑桌面上的QQ图标&#xff0c;没有显示QQ登录界面。 重启电脑再试&#xff0c;还是不显示QQ登录界面。 前不久腾讯正式宣布&#xff0c;QQ Linux 版 3.0 已在 QQ 官网上…

最好用的文本与文件查询软件AnyTXT Searcher与Listary简介

1. 工具简介 1.1 Listary简介 Listary是一个革命性的Windows搜索工具&#xff0c;借助 Listary软件&#xff0c;你可以快速搜索电脑文件、定位文件、执行智能命令、记录访问历史、快速切换目录、收藏常用项目等。 Listary为Windows传统低效的文件打开/保存对话框提供了便捷、…

Apache Tomcat AJP协议文件读取与包含

永远也不要忘记能够笑的坚强&#xff0c;就算受伤&#xff0c;我也从不彷徨。 0x01.漏洞情况分析 Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目&#xff0c;作为目前比较流行的Web应用服务器&#xff0c;深受Java爱好者的喜爱&#xff0c;并得到了部分软件开发商的…

makefile 学习(2):C语言的编译及库文件的生成与链接

文章目录 1. 介绍2. C语言编译2.1 预处理2.2 生成汇编语言2.3 编译目标文件2.4 编译为可执行文件 3. .a静态库的编译与链接案例 4 .so 动态库的编译与链接 1. 介绍 编译C语言的相关后缀 .a 文件是一个静态库文件.c文件是c语言的源文件.h c语言的头文件.i 是预处理文件.o 目标文…

两个用字符串表示的大数字的和

文章目录 题目详情Java实现分析Java 怎么获取到字符串中的对应位置的数字值Java完整代码测试验证 python实现python 怎么获取到字符串中的对应位置的数字值python完整代码 总结 这是遇到的一道快手数仓岗位的面试题目&#xff0c;题目大意如下&#xff1a; 题目详情 现在有两个…

【树莓派4B安装18.04桌面+远程SSH】

【树莓派4B安装18.04桌面远程SSH】 1. 前言2 .树莓派安装ubuntu18.04 系统2.1 下载ubuntu Server 18.04 的镜像包2.2 镜像烧录2.3 高级设置2.4 配置WiFi2.5 ssh文件配置2.6 Pi 4B启动文件 3. 安装finalshell3.1 windows版下载3.2 windows版安装3.3 SSH连接 4. 安装ubuntu桌面4.…

【野火启明_瑞萨RA6M5】梦的开始 ---- 点灯(寄存器)

文章目录 一、IOPORT简介二、IOPORT的框图分析三、IOPORT的寄存器描述1. 端口引脚功能选择寄存器2. 端口输出数据寄存器3. 端口输入数据寄存器4. 端口输出置位/复位寄存器5. 写保护寄存器 四、点亮LED灯&#xff08;寄存器&#xff09; 从本文开始&#xff0c;我将以瑞萨RA系列…

【夜莺(Flashcat)V6监控】3.链路追踪

链路追踪 介绍 链路追踪是分布式系统下的一个概念&#xff0c;它的目的就是要解决上面所提出的问题&#xff0c;也就是将一次分布式请求还原成调用链路&#xff0c;将一次分布式请求的调用情况集中展示&#xff0c;比如&#xff0c;各个服务节点上的耗时、请求具体到达哪台机…

Java 把一个 List 转换为字符串

在本快速指南中&#xff0c;我们将会解释如何在 Java 把一个 List 转换为 String 字符串。 这个在某些特定的场合可能比较有用&#xff0c;比如说在控制台中输出 List 中的内容&#xff0c;转换为可以人为阅读的内容来进行调试。 使用 List 中标准的 toString() 方法 一个最简…