SQL注入、XSS、XXE、CSRF、SSRF、越权漏洞、文件上传、文件包含总结篇

SQL注入

什么是SQL注入?

是指web应用程序对用户输入的数据的合法性没有判断或者没有严格的过滤,攻击者可以在web程序中把定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

就是使用某种手段,在原来的SQL语句基础上,添加一段恶意的SQL语句并执行,从而达到不被管理员允许的目的

怎么防御?

建议在代码中对数字类型的参数先进行数字类型变换,然后再代入到SQL查询 语句中,这样任何注入行为都不能成功。井且考虑过滤一些参数,比如get参数和 post参数中对于SOL语言查询的部分。

过滤特殊字符

所以防范的时候需要对用户的输入进行检查.
特别式一些特殊字符,比如单 引号,双引号,分号,逗号,冒号,连接号等进行转换或者过建.以下为需过滤 的敏感字符或者语句:
【1】net user
【2】xp_c«ndshel I
【3】add
【4】xec master.(fco. xp_cmdshelI
【5】net I oca Igroup administrators
【6】□select
【7】count
【8】Asc
【9】char
【10】mid
【11】%
【12】,
【13】:
【14】-
【15】 insert
【16】 delete from
【17】 drop table
【18】 update
【19】truncate
【20】 from

修改php.in

修改PHP中默认配置文件php.ini中的配置,来降低sql注入的风险
safe_mode = on //开启安全模式
magic_quotes_gpc = On 〃开启过建函数
display_errors = Off 〃禁止错误信息提示 注:JBnagic_auotes_gpc选项打开,在这种情况下所有的客户端GET和POST 的数据都会自动进行addslashes处理,所以此时对字符串值的SQL注入是 不可行的,但要防止对数字值的SQL注入,如用intvalO等函数进行处理。 但如果你编写的是通用软件,则需要读取服务器的magic_Quotes_gpc后进行相应处理。

使用mysqli_real_escape_string()函数

对于MySQL用户,可以使用函数mysqli_real_escape_string():转义在 SQL 语句中使用的字符串中的特殊字符

在这里插入图片描述

加固数据库方面

1、 不要以sysadmin的身份连接数据库.而是使用特定的数据库用户,只具有读取,写入和更新数据库中适当数据的适当特权。此帐户定期检查, 确定它所具有的特权.
2、 以安全的方式创建SQL。让数据库来完成创建SQL的工作,而不是在代码 中完成。使用参数化SQL语句,同时也能提高查询的效率.
3、 保证数据库用户连接信息非明文保存.

加固管理方面

1.加强编程人员良好的安全编码意识,系统地学习安全编码的知识,减少 源代码泄鸯的风险。
2.建立起良好的代码审核、审查体系.由专人负责代码的审计,增加安全 监督环节。

Mybatis

【1】预编译
在这里插入图片描述

【2】like
1.MySQL
在这里插入图片描述2.Oracle
在这里插入图片描述

3.sql server
在这里插入图片描述

【3】in
在这里插入图片描述

防火墙

XSS

什么是XSS?

SS作为OWASP TOP 10 之一
XSS被称为跨站脚本攻击(Cross-site scripting),本来应该缩写为CSS,但是由于和CSS(Cascading Style
Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击) 主要基于javascript (JS) 完成恶意的攻
击行为。
JS可以非常灵活的操作html,css和浏览器,这使得XSS攻击的"想象"空间特别大。XSS通过将精心构造的
代码(JS)代码注入到网页中,并由浏览器解释运行这段JS代码,以达到恶意攻击的效果。
当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来,用户浏览器就会解析这段XSS代码,也就
是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascrit解释器,可以解
析javascript,然而浏览器不会判断代码是否恶意。也就是说,XSS的对象是用户和浏览器。

漏洞发生在哪?

服务器、微博、留言板、聊天室等等收集用户输入的地方都有可能被注入XSS代码,都存在遭受XSS的风险,只要
没有对用户的输入进行严格过滤,就会被XSS

XSS的危害

XSS利用JS代码实现攻击,有很多种攻击方法,以下简单列出几种

  1. 盗取各种用户账号
  2. 窃取用户Cookie资料,冒充用户身份进入网站
  3. 劫持用户回话,执行任意操作
  4. 刷流量,执行弹窗广告
  5. 传播蠕虫病毒

XSS Platform 根据各种需求生成 XSS攻击代码 比如说获得管理员Cookie 等等
获得管理员cookie 就可以直接访问后台了

在这里插入图片描述

XSS的分类

XSS漏洞大概可以分为三个类型:反射型XSS、存储型XSS、DOM型XSS
反射型XSS(用户触发)
反射型XSS是非持久性、参数型的跨站脚本
反射型XSS的JS代码在Web应用的参数(变量)中,如搜索框的反射型XSS

反射型

就是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析、执行。
存在 欺骗性,把存在反射型XSS漏洞的地址发给你,你点击了,造成XSS的攻击。

存储型

存储型XSS是持久性跨站脚本
持久性体现在XSS代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中,
存储型XSS通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写入数据库中。
此时,我们只完成了第一步,将恶意代码写入数据库。因为XSS使用的JS代码,JS代码的运行环境是浏览
器,所以需要浏览器从服务器载入恶意的XSS代码,才能真正触发XSS

DOM型

DOM XSS(使用DOM事件才能触发)
DOM XSS比较特殊。owasp关于DOM型号XSS的定义是基于DOM的XSS是一种XSS攻击
其中攻击的payload由于修改受害者浏览器页面的DOM树而执行的
其特殊的地方就是payload比较难以检测
可能触发DOM型XSS的属性
1、document.referer属性
2、location属性
3、innerHTML属性

XSS防御

【1】对输入和URL参数进行过滤(白名单和黑名单)
【2】对输出进行编码
在输出数据之前对潜在的威胁的字符进行编码、转义是防御XSS攻击十分有效的措施。如果使用好的话,理论上是可以防御住所有的XSS攻击的。
对所有要动态输出到页面的内容,通通进行相关的编码和转义。当然转义是按照其输出的上下文环境来决定如何转义的。

  1. 作为body文本输出,作为html标签的属性输出
  2. URL属性
    如果 < script> , < style> , < imt> 等标签的 src 和 href 属性值为动态内容,那么要确保这些url没有执
    行恶意连接。
    确保:href 和 src 的值必须以 http://开头,白名单方式;不能有10进制和16进制编码字符。

HttpOnly 与 XSS防御

XSS 一般利用js脚步读取用户浏览器中的Cookie,而如果在服务器端对 Cookie 设置了HttpOnly 属性,那么js脚本就不能读取到cookie,但是浏览器还是能够正常使用cookie。
一般的Cookie都是从document对象中获得的,现在浏览器在设置 Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的 document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响 ,因为Cookie会被放在浏览器头中发送出去(包括ajax的时 候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie
信息的安全也保证了应用。如果你正在使用的是兼容 Java EE 6.0 的容器,如 Tomcat 7,那么 Cookie类已经有了 setHttpOnly 的方法来使用 HttpOnly 的 Cookie 属性了。
cookie.setHttpOnly(true );

XXE

什么是XXE漏洞?

XXE(XML External Entity)是指xml外部实体攻击漏洞。XML外部实体攻击是针对解析XML输入的应用程序的一种攻击。当包含对外部实体的引用的XML输入被弱配置XML解析器处理时,就会发生这种攻击。
这种攻击通过构造恶意内容,可导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等危
害。

XXE防御

1、检查所使用的底层解析库,默认禁止外部实体的解析.
2、增强対系统的监控,防止此问题被人利用.
3、使用第三方应用代码及时升级补丁
4、对于PHP.由于sinplexml_load_string函数的XML解析问题出在1 ibxml库上,所以 加载实体前可以调用这样一个函数以进行防护

<?php // with the XM.Reader functionality: $doc = XMLReader::xml(SbadXml. ,UTF-8*. LIBXML_NONET): // with the DOM functionality: Sdom = new DOWocument 0 : $dom->1oadXML(SbadXml. L1BXML_DTDLOAD|L18XML_DTDATTR): ?>

5、在这里插入图片描述6、 JAVA
在这里插入图片描述

7、python
在这里插入图片描述8、.Net
在这里插入图片描述

9、ASP
在这里插入图片描述
10、过滤字符
在这里插入图片描述

11、WAF
12、过滤用户提交的XML数据
过滤关键词:!ENTITY,或者SYSTEM和PUBLI

CSRF

什么是CSRF?

CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点 ,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。

CSRF攻击原理比较简单,如图1所示。其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意
网站,User C为Web A网站的合法用户。

  1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
  2. 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
  3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;
  4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;
  5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

CSRF漏洞防御

1、验证HTTP Referer字段
2、在请求地址中添加token并验证
3、在HTTP头中自定义属性并验证
4、用户端的防御
CSRF漏洞防御主要可以从三个层面进行,即服务端的防御、用户端的防御和安全设备的防御。
5、 服务端的防御

  1. 验证HTTP Referer字段
    根据HTTP协议,在HTTP头中有一个字段叫Referer,它记录了该HTTP请求的来源地址。在通常情况
    下,访问一个安全受限页面的请求必须来自于同一个网站。比如某银行的转账是通过用户访问http://ba
    nk.test/test?page=10&userID=101&money=10000页面完成,用户必须先登录bank.test,然后通过点
    击页面上的按钮来触发转账事件。当用户提交请求时,该转账请求的Referer值就会是转账按钮所在页面
    的URL(本例中,通常是以bank. test域名开头的地址)。而如果攻击者要对银行网站实施CSRF攻击,
    他只能在自己的网站构造请求,当用户通过攻击者的网站发送请求到银行时,该请求的Referer是指向攻
    击者的网站。因此,要防御CSRF攻击,银行网站只需要对于每一个转账请求验证其Referer值,如果是
    以bank. test开头的域名,则说明该请求是来自银行网站自己的请求,是合法的。如果Referer是其他网
    站的话,就有可能是CSRF攻击,则拒绝该请求。
  2. 在请求地址中添加token并验证
    CSRF攻击之所以能够成功,是因为攻击者可以伪造用户的请求,该请求中所有的用户验证信息都存在于
    Cookie中,因此攻击者可以在不知道这些验证信息的情况下直接利用用户自己的Cookie来通过安全验
    证。由此可知,抵御CSRF攻击的关键在于:在请求中放入攻击者所不能伪造的信息,并且该信息不存在
    于Cookie之中。鉴于此,系统开发者可以在HTTP请求中以参数的形式加入一个随机产生的token,并在
    服务器端建立一个拦截器来验证这个token,如果请求中没有token或者token内容不正确,则认为可能
    是CSRF攻击而拒绝该请求。
  3. 在HTTP头中自定义属性并验证
    自定义属性的方法也是使用token并进行验证,和前一种方法不同的是,这里并不是把token以参数的形
    式置于HTTP请求之中,而是把它放到HTTP头中自定义的属性里。通过XMLHttpRequest这个类,可以
    一次性给所有该类请求加上csrftoken这个HTTP头属性,并把token值放入其中。这样解决了前一种方法
    在请求中加入token的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心
    token会通过Referer泄露到其他网站。

6、 其他防御方法

  1. CSRF攻击是有条件的,当用户访问恶意链接时,认证的cookie仍然有效,所以当用户关闭页面时
    要及时清除认证cookie,对支持TAB模式(新标签打开网页)的浏览器尤为重要。
  2. 尽量少用或不要用request()类变量,获取参数指定request.form()还是request. querystring (),这
    样有利于阻止CSRF漏洞攻击,此方法只不能完全防御CSRF攻击,只是一定程度上增加了攻击的难
    度。

SSRF

什么是SSRF?

服务端请求伪造攻击(Server-side Request Forgery)
很多web应用都提供了从其他的服务器上获取数据的功能。
使用用户指定的URL, web应用可以获取图片。下载文件,读取文件内容等。
这个功能如果被恶意使用,可以利用存在缺陷的web应用作 为代理攻击远程和本地的服务器.这种形式的攻击称为服务端请求伪造攻击 (Server-side Request Forgery) 。
—般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔绝的内部系统)。
SSRF形成的原因大都是由于服务端提供了从其他服务器应 用获取数据的功能且没有対目标地址做过滤与限制。
比如从指定URL地批获取网页文本内容,加载指定地址的图片,下载等等。
攻击者利用ssrf可以实现的攻击主要有5种:
1.可以对外网、服务器所在内网’ 本地进行端口扫描,获取一些服务的banner信息。
2.攻击运行在内网或本地的应用程序(比如溢岀)。
3.对内网web应用进行指纹识别,通过访问默认文件实现。
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts?, SQli 等)。
5.利用file协议读取本地文件等。

SSRF防御

1、过滤返回信息,验证远程^务器对请求的响应是比较容易的方法。如 果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证 返回的信息是否符合标准。统一错误信息,避免用户可以根据错误信息来判断远 端服务器的端口状态。
2、限制请求的端口为http常用的端口,比如,80,443,8080.8090.
3、黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
4、禁用不需要的协议。仅仅允许http和https请求。可以防止类似于 file:///. gopher://, ftp:// 等引起的问题。
5、统一错误信息
6、设置URL白名单

越权漏洞

什么是越权漏洞?

越权漏洞又分为水平越权,垂直越权,简单来理解的话,就是普通用户操作的权限,可以经过漏洞而变成管理员的权限,或者是可以操作其它人账号的权限,也叫未授权漏洞,正常如果访问管理员的一些操作,是需要有安全验证的,而越权导致的就是绕过验证,可以访问管理员的一些敏感信息,一些管理员的操作,导致数据机密的信息泄露。垂直越权漏洞可以使用低权限的账号来执行高权限账号的操作,比如可以操作管理员的账号功能,水平越权漏洞是可以操作同一个层次的账号权限之间进行操作,以及访问到一些账号敏感信息,比如可以修改任意账号的资料,包括查看会员的手机号,姓名,充值记录,撤单记录,提现记录,注单记录等等,也可以造成使用水平越权来执行其他用户的功能,比如删除银行卡,修改手机号,密保答案等等。

水平越权:
算法未对发送HTTP请求的用户进行用户身份合法性的校验,也为对请求进行权限控制
垂直越权:

  1. 先用bp获得admin超级管理员用户 添加用户的请求信息
  2. 在再获得普通客服用户的登录信息
  3. 使用普通用户的cookie 发现也能执行添加用户的操作(出现越权漏洞)

怎么防止越权漏洞?

对存在权限验证的页面进行安全效验,效验网站APP前端获取到的参数,ID,账户密码,返回也
需要效验。对于修改,添加等功能进行当前权限判断,验证所属用户,使用seesion来安全效验
用户的操作权限,get,post数据只允许输入指定的信息,不能修改数据包,查询的越权漏洞要检
测每一次的请求是否是当前所属用户的身份,加强效验即可。

文件上传

什么是文件上传?

为了让用户将文件上传到网站,就像是给危机服务器的恶意用户打开了另一扇门。即便如此,在今天的
现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用
户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。向用户提供的
功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站
的权限,或危及服务器的可能性是非常高的。上传文件本身没有错,问题与漏洞在于服务器怎么处理上
传的文件。
一般的情况有:

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

文件上传的前提
1,网站上传功能能正常使用
2,文件类型允许上传
3,上传路径可以确定
4,文件可以被访问,可以被执行或被包含
linux文件权限
r=4
w=2
x=1

怎么防御文件上传漏洞?

针对文件上传漏洞的特点和必须具备的三个条件,我们阻断任何一个条件就可以达到 组织文件上传攻击的目的:
1、 最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的 权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理, 一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
2、 文件类型检查:强烈推荐白名单方式,结合MIME Type、后缀检查等方式(即只允许 允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数, 处理图片的同时破坏其包含的HTML代码;
3、 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
4、 单独设置文件服务器的域名;

文件包含

什么是文件包含?

文件包含是指程序代码在处理包含文件的时候没有严格控制。
导致用户可以构造参数 包含远程代码在服务器上执行,并得到网站配置或者敏感文件,进而获取到服务器权 限,造成网站被恶意删除,用户和交易数据被篡改等一系列恶性后果。
主要包括本地文件包含和远程文件包含两种形式
由于开发人员编写源码,开放若将可重复使用的 代码插入到单个的文件中,井在需要的时候将它们包含在特殊的功能代码文件中,然 后包含文件中的代码会被解释执行。
由于并没有针对代码中存在文件包含的函数入口 做过滤导致客户端可以提交恶意构造语句提交,井交由服务器端解释执行。
文件包含攻击中WEB服务器源码里可能存在inlcudeO此类文件包含操作函数,可以通过客户 端构造提交文件路径,是该漏洞攻击成功的最主要原因。

怎么修复文件包含漏洞?

1、 PHP配置php. ini关闭远程文件包含功能(allow.urljnclude = Off)
2、 严格检查变量是否已经初始化.
3、 建议假定所有输入都是可疑的,尝试对所有输入提交可能可能包含的文件地址, 包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现…/之类 的目录跳转符。
4、 严格检查include类的文件包含函数中的参数是否外界可控.
5、 不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。
6、 在发布应用程序之前测试所有已知的威胁
7、 设置文件白名单

猜你喜欢

转载自blog.csdn.net/m0_57379855/article/details/123677978