第二篇原理篇(3)

2019-04-28  本文已影响0人  留白_bb77

命令执行漏洞

PHP:提供了部分函数用来执行外部应用程序,例如: system()、 shell_ exec()、 exec()和passthru()。

在PHP中,代码执行漏洞出现较多,像preg. replace()、 ob start()、 array_ map()等的数都存在代码执行的问题

java

框架执行漏洞

struts2

thinkPHP

防范

尽量不要使用系统执行命令;

在进入执行命令函数/方法之前,变量一定要做好过滤,对敏感字符进行转义;

在使用动态函数之前,确保使用的函数是指定的函数之一;

对PHP语言来说,不能完全控制的危险函数最好不要使用。

文件包含漏洞

PHP包含

      PHP中提供了四个文件包含的函数,分别是include()、 include_ once()、require() 和require_ once()。 这四个函数都可以进行文件包含,但作用却不- -样,其区别如下:

require 找不到被包含的文件时会产生致命错误(E_ COMPILE ERROR),并停止脚本:

include 找不到被包含的文件时只会产生警告(E_ WARNING),脚本将继续执行:

include once:此语句和include()语句类似,唯-区别是如果该文件中的代码已经被包含,则不会再次包含:

require_ once:此行语句和require()语句类似,唯-区别是如果该文件中的代码已经被包含,则不会再次包含。

本地包含

远程包含:要使用远程包含功能,首先需要确定PHP是否已经开启远程包含功能选项( PHP默认关闭远程包含功能)。开启远程包含功能需要在php.ini 配置文件中修改,修改后需要重启Web 容器服务使其生效,选项如下:

allow url_ include = Off

//把Off更改为On

PHP文件包含利用

1.读取敏感文件

2.远程包含shell

3.本地包含配合文件上传

4.使用PHP封装协议

PHP带有很多内置URL风格的封装协议,这类协议与fopen(). copy()、file_ exists()、 filesize()等文件系统函数所提供的功能类似。

①使用封装协议读取PHP文件。②写入PHP文件。使用p://input 可以执行PHP 语句,但使用这条语句受限于allow url_ include 选项。只有在allow url_ include 为On时才可以使用。

5.包含Apache日志文件

某个PHP文件存在本地包含漏洞导致无法上传文件时,这种情况就像明明有SQL注入漏洞,却无法注入出数据一样,但是,找到Apache路径,利用包含漏洞包含Apache日志文件也可以获取WebShell。Apache运行后一般默认 会生成两个日志文件,acess.log (访问日志)和error.log (错误日志), Apache的访问日志文件记录了客户端的每次请求及服务器响应的相关信息

6.截断包含

这种方法只适用于magic_ quotes_ gpc = Off时,如果为On, %00(NULL)将 会被转义,从而无法正常截断。magic _quotes_ gpe为On的情况会为以下预定义字符转义:单引号()双引号(")反斜杠(\)NULL

7.绕过WAF防火墙

jsp包含

1.静态包含

      <%@ include file="pagetxt"%>为JSP中的静态包含语句,静态包含语句先进行包含,再做处理操作。JSP语法规定,include 指令为静态包含,只允许包含一个已经存在于服务器中的文件,而不能使用变量来控制包含某个文件。这就意味着使用include指令将不存在文件包含漏洞。

2.动态包含

<jsp:include page="page.txt" />为动态包含语句。动态包含与静态包含恰恰相反,在运行时, 首先会处理被包含页面,然后再包含,而且可以包含一个动态页面(变量)。

由于语言设计的差异,相对来说,JSP 比PHP拥有更高的安全性。

杜绝方法

严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;

路径限制:限制被包含的文件只能在某一文件夹内,一 定要禁止目录跳转字符,如../”

包含文件验证:验证被包含的文件是否是白名单中的一员;

尽量不要使用动态包含,可以在需要包含的页面固定写好,如: include("head.php");。

CSRF

CSRF的攻击建立在浏览器与Web服务器的会话中:欺骗用户访问URL

检测

1.手工检测

2.半自动检测:

CSRFtester

单击“Start Recording"按钮开启CSRFTester的检测工作,在“Setp"属性中选择添加用户的请求,并将“Form Parameter” 框中的“edtName”值改为“CSRFTest",然后单击“Generate HTML”按钮生成CSRF POC。选择-一个保存位置后, 将会自动打开这个已经生成的POC进行CSRF攻击。如果CSRF攻击成功,网站将会添加一个名为“CSRFTest”的用户。CSRFTester 是将所有的属性生成为隐藏的input 标签,并添加了默认值,当访问这个页面时,JavaScript 将会自动提交这个表单。

Burp Suite Scanner 模块同样也支持检测CSRF漏洞

使用Burp Suite自动生成CSRF POC,在任意HTTP请求、URL上单击鼠标右键,选择“Engagement tools”→“Generate CSRF POC"即可生成CSRF POC。Burp Suite的CSRF POC也是根据请求参数生成的,可以直接单击“Test in browser”按钮进行测试。单击后,Burp Suite将会自动打开浏览器使用这段POC进行CSRF攻击。

预防

1.二次确认

在调用某些功能时进行二次验证,如:删除用户时,产生一个提示对话框,提示“确定删除用户吗?”。转账操作时,要求用户输入二次密码。设置验证码,在进行敏感操作时输入验证码。

当二次验证后,即使用户打开了CSRF POC页面,也不会直接去执行,而需要用户再次输入才可以完成攻击。这样,当用户突然收到提示后,可能会心存怀疑,就不再会乖乖地中招。

2.token认证

CSRF 攻击成功的两个要素:攻击者可得知URL的所有参数项,并了解其含义;诱导用户访问构造好的POC。

毎当用户登录后会随机生成一段字符串, 并且存儲在Session中。

在敏感操作中加入隠藏标签,value 即カSession中保存的字符串,如果为GET请求,考虑使用在Cookie中存储Token。

提交请求后,服务器端取出Session中的字符串与提交的Token对比,如果一致,则认为是正常请求,否则可能是CSRF攻击。

更新Token值。

当网站同时存在XSS. CSRF漏洞时,Token 防御机制将会失效,因为攻击者可以通过JavaScript获取Token值

所以在防范CSRF时,首先需要确定网站是否存在XSS漏洞,如果网站存在XSS漏洞,那么防范CSRF是没有任何意义的。

逻辑错误漏洞

挖掘

发现网站所提供的功能模块,针对具体的功能确定业务流程,详细划分具体步骤,拦截HTTP/HTTPS请求,分析其参数项的含义;修改参数值,尝试触发逻辑漏洞。

简单地说,黑客挖掘逻辑漏洞有两个重点,就是业务流程和HTTP/HTTPS请求篡改。

绕过授权验证

水平越权:相同级别(权限)的用户或者同角色的不同用户之间,可以越权访问、修改或者刪除的非法操作。如果出现此类漏洞,那么将可能会造成大批量数据泄露,严重的甚至会造成用户信息被恶意篡改。

垂直越权又被分为向上越权与向下越权。是不同级别之间或不同角色之间的越权。

密码找回逻辑漏洞

支付逻辑漏洞

指定账户恶意攻击

代码注入

按照owasp分类包括:os命令执行

文件包含

动态函数调用

代码执行

按照Wikipedia还包括:SQL注入,XML注入,xss

XML(可拓展标识语言)注入

XML注入是通过改写XML实现的,与xss跨站漏洞相似,此漏洞利用成功的关键点就是闭合XML标签。XML注入时的两大要素为:标签闭合和获取XML表结构。

修复:转义

xpath注入

XPath即为XML路径语言(XML Path Language), XPath 基于XML的树状结构,提供在数据结构树中找寻节点的能力。简单地说,XPath 就是选取XML节点的一门语言。

XPath最强大的功能在于逻辑运算,使用XPath将会使程序变得有逻辑性,但如果这一点使用不当,可能将会造成注入漏洞

修复参照XML注入

json注入

JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。JSON可以将JavaScript中的对象转换为字符串,然后在函数、网络之间传递这个字符串。这个字符串看起来有点儿怪异,但是JavaScript很容易解释它,而且JSON可以表示:比“Key/ Value”更复杂的结构。

JSON是根据引号(")、 冒号(:)、 逗号(,) 和花括号({)区分各字符的意义的。如果有恶意用户向JSON中注入恶意字符,那么JSON将解析失败。

防御:关键字符转义

HTTP Parameter Pollution即HTTP参数污染,简称HPP

经常用来绕过--些Web应用防火墙。

URL跳转与钓鱼

URL跳转

1.客户端跳转

客户端跳转也被称为URL重定向,用户浏览器的地址栏URL会有明显的变化

2.服务器端跳转

服务器端跳转也称为URL转发,服务器端跳转时,用户浏览的地址栏URL是不会变化的

webserver远程部署

通过远程部署获取WebShell 并不属于代码层次的漏洞,而是属于配置性错误漏洞。

Tomcat

Jboss

weblogic

上一篇下一篇

猜你喜欢

热点阅读