Injection Attacks-Log 注入

日志注入(也称日志文件注入)

很多应用都维护着一系列面向授权用户、通过 HTML 界面展示的日志,因而成为了攻击者的首要目标,这些攻击者试图伪装其他攻击、误导日志读者,甚至对阅读和分析日志监测应用的用户安装后续攻击程序。

日志的脆弱性取决于对日志编写过程的控制,以及是否确保对日志条目进行任何监控或分析时,日志数据被看作非置信数据源。

简单的日志系统可能使用file_put_contents()函数向文件中写入文本行。比如,程序员可能采用以下格式的字符串来记录登录失败的情形:

sprintf("Failed login attempt by %s", $username);

那么万一攻击者使用诸如“AdminnSuccessful login by Adminn”形式的用户名呢?

如果把来自非置信输入的该字符串插入日志中,攻击者就能顺利将其失败登录伪装为管理员用户无辜的失败登录。如再成功添加一次重试,数据的可信度甚至会更高。

当然,重点在于攻击者可以添加各种日志条目,还可注入XSS矢量,甚至还能注入字符,扰乱日志条目在控制台的显示。

日志注入的目的

注入的目标也可能为日志格式解释程序。如果分析器工具使用正则表达式解析日志条目,将其分解成数据字段,那么,注入的字符串可以通过精心构造以确保正则表达式与注入的多余字段相匹配,而非正确字段。例如,以下条目便可能造成问题:

$username = "iamnothacker! at Mon Jan 01 00:00:00 +1000 2009"; sprintf("Failed login attempt by $s at $s", $username, )

更过分的使用日志注入的攻击者可能试图建立目录遍历攻击,使日志出现在浏览器中。正常情况下,向日志消息中注入PHP代码并在浏览器中打开日志文件便可成功进行代码注入,攻击者可用精心设计并随意执行这类代码注入。这一点无需多讲。如果攻击者能在服务器上执行PHP,那么问题就大了,此时你的系统最好有足够的深度防御来将损害降至最低。

防御日志注入

最简单的日志注入防御方法是利用受认可的字符白名单对所有出站日志消息进行清理。比如,我们可以将所有日志限制为字母数字字符和空格。不属于该字符列表的消息可能被认定为有害消息,进而出现有关潜在本地包含漏洞(LFI)的日志消息,以便告知你攻击者可能进行的尝试。这种方法很简单,适用于简单文本日志,此类日志消息无法避免非置信输入的出现。

第二种防御则是将非置信输入部分编码为类似base64的编码,其中保存着数量有限的认可的字符描述,同时还可在文本中存储大量信息。

路径遍历(也称目录遍历)

路径遍历(也称目录遍历)攻击通过读取或写入 web 应用的文件而试图影响后端操作,其方法为注入能控制后端操作所采用文件路径的参数。照此,通过推进信息披露以及本地/远程文件注入,这类攻击可以顺利取得成功。

我们将分别对这类后续攻击进行阐述,但路径遍历是使这些攻击达成的根本漏洞之一。尽管以下功能特定于操纵文件路径这一概念,但值得一提的是,许多PHP函数都不仅仅接受单纯的文件路径。譬如,PHP中的include()file() 等函数能接受URI。这似乎很违反常理,但这使得以下两种采用绝对文件路径(即不依靠相关文件路径的自动加载)的函数调用方法带来相同的效果。

include(‘/var/www/vendor/library/Class.php’); include(‘file:///var/www/vendor/library/Class.php‘);

关键在于,在相关路径处理的同时(php.ini和可用自动加载器的 include_path 设定 ),类似的PHP函数在各种形式的参数操纵下显得尤其脆弱,其中包括文件URI 方案替换——一旦文件路径初始处注入了非置信数据,攻击者便可注入HTTP或 FTP URI。后面我们将在远程文件包含攻击中对这一点进行进一步阐述,现在继续探讨文件系统路径遍历的问题。

路径遍历缺陷的各种情况有一个共同特点,即文件路径因受操纵而指向不同的文件。这一点通常通过向参数注入一系列 ../ (点-点-斜线)序列来实现,上述参数被整个添加或插入到 include()require()file_get_contents()等函数,甚至在有的人看来不那么可疑的函数中,比如DOMDocument::load()

点-点-斜线序列允许攻击者使系统导航或回溯至父目录。因此像/var/www/public/../vendor 这样的路径实际上会指向/var/www/public/vendor/public 后的点-点-斜线序列会回溯到该目录的父目录,也就是/var/www。从该简单示例可以看出,利用这一方法,攻击者便可读取通过网站服务器可访问的/public 目录以外的文件。

当然,路径遍历不仅仅用于回溯。攻击者也可注入新的路径元素,从而访问无法通过浏览器访问的子目录,无法访问的原因可能为子目录或其父目录之一中的.htaccess中的deny from all 指令。PHP的文件系统操作不考虑Apache或其他网站服务商是如何配置并控制非公共文件和目录的入口的。

路径遍历示例

防御路径遍历估计

原文地址:http://phpsecurity.readthedocs.org/en/latest/Injection-Attacks.html#log-injection-also-log-file-injection

时间: 2024-12-09 09:07:57

Injection Attacks-Log 注入的相关文章

SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具

1.关于SQL Injection 迄今为止,我基本没有看到谁写出一篇很完整的文章,或者说很成熟的 解决方案(能做到 的人肯定很多,问题是没有流传开来,很遗憾) 我简单的说几点,希望启发大家思考,起到抛砖引玉的作用 一.SQL Injection的原理 SQL Injection的实现方法和破坏作 用有很多,但万变不离其宗,其原理可以概括为一句话 :SQL Injection就是向服务器端提交事先准备好的数据,拼凑出攻击者想要的SQL语句,以改变数据库操作执行计划. 我想,这么说也许不算精炼,但

SQL Injection with MySQL 注入分析_安全教程

声明 本文仅用于教学目的,如果因为本文造成的攻击后果本人概不负责,本文所有代码均为本人所写,所有数据均经过测试.绝对真实.如果有什么遗漏或错误,欢迎来安全天使论坛和我交流. 前言 2003年开始,喜欢脚本攻击的人越来越多,而且研究ASP下注入的朋友也逐渐多了起来,我看过最早的关于SQL注入的文章是一篇99年国外的高手写的,而现在国外的已经炉火纯青了,国内才开始注意这个技术,由此看来,国内的这方面的技术相对于国外还是有一段很大差距,话说回来,大家对SQL注入攻击也相当熟悉了,国内各大站点都有些堪称

初级教程之SQL Injection(SQL注入攻击)

攻击|教程 因为目前SQL注入是非常热门而且技术门槛较低的攻击手段,并且非常实用,轻则可以拿到网站的一些帐号,比如拿到某个电影网站的黄金会员的帐号:重则利用其网站楼多入侵整个服务器等等. 这里打算作为一个专题讲解SQL及其注入.其中对于SQL不太明白的地方希望大家自己查资料.这个帖子将长期更新... 一,SQL纵览 SQL(Structured Query Language)语言是一种结构化查询语言.SQL语言中完成核心功能的共有9个关键词:SELECT(数据查询).CREAT.DROP.ALT

Injection Attacks-XML注入

注入攻击 XML注入 虽然JSON的出现实现了服务器与客户端之间的"轻量级"数据交流,但是,作为另一种流行的可行方案,许多web服务API同时还是继续支持XML.另外,除了web服务之外,XML也是许多使用XML schemas 实行数据交换的协议的基础,例如RSS,Atom,SOAP,以及RDF等等,举不胜举. XML无处不在:它存在于web应用的服务器中,或者在浏览器中作为XMLHttpRequest的请求和应答的格式,亦或在浏览器的扩展程序中.由于应用广泛,XML成为了吸引注入攻

AngularJs Dependency Injection(DI,依赖注入)_AngularJS

一.Dependency Injection(依赖注入) 依赖注入(DI)是一个软件设计模式,处理代码如何得到它所依赖的资源. 关于DI更深层次的讨论,可以参观Dependency Injection(http://en.wikipedia.org/wiki/Dependency_injection),Inversion of Control(http://martinfowler.com/articles/injection.html),也可以参观软件设计模式的书. 1. DI in a nu

注入攻击-SQL注入和代码注入

注入攻击 OWASP将注入攻击和跨站脚本攻击(XSS)列入网络应用程序十大常见安全风险.实际上,它们会一起出现,因为 XSS 攻击依赖于注入攻击的成功.虽然这是最明显的组合关系,但是注入攻击带来的不仅仅是 XSS. 注入攻击代指一类攻击,它们通过注入数据到一个网络应用程序以期获得执行,亦或是通过非预期的一个方式来执行恶意数据.这种类别的攻击包括跨站脚本攻击(XSS).SQL 注入攻击.头部注入攻击.日志注入攻击和全路径暴露.当然限于篇幅,这里只是一个简单的介绍. 这类攻击是每个程序员的梦魇.它们

Defense against Common Web Attacks

The Internet is a powerful tool that connects us with users from across the globe. However, the might of the Internet has also made it vulnerable to abuse. Hackers can launch various kinds of web attacks to obtain critical and sensitive information,

技巧和诀窍防范SQL注入攻击_漏洞研究

[原文地址]Tip/Trick: Guard Against SQL Injection Attacks [原文发表日期] Saturday, September 30, 2006 9:11 AM SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西.不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是,他们的客户极其容易受到攻击. Michael Sutton 最近发表了一篇非常发人深省的帖子,讲述在

Composite Application Guidance for WPF(5)——依赖注入容器

依赖注入容器和Prism的基础服务已经在本系列随笔中提到过很多次,今天将其分离出来专门说一说 1, 为什么要使用依赖注入容器 我们知道, 在Composite Application中各个模块之间是松耦合的关系, 也就是在设计的时候尽可能地减少模块间的依赖, 但无论如何从业务角度讲, 他们之间总还是要相互通信与合作的. 所以依赖注入容器在这其中扮演了一个桥梁般的角色. 比如当创建某一个组件实例的时候, 其依赖于另外的一个组件或服务, 此时依赖注入容器会将其需要的信息"注入(Injection)&

spring依赖注入的3种实现方式

 在讲解依赖注入的3种实现方式之前,这里先澄清一下依赖注入的意义:让组件依赖于抽象,当组件要与其他实际对象发生依赖关系时,通过抽象来注入依赖的实际对象.     依赖注入的3种实现方式分别是:接口注入(interface injection).Set注入(setter injection)和构造注入(constructor injection).接下来笔者还将主要通过举例的方式,把依赖注入的3种实现方式介绍给读者.     3.2.1  接口注入(interface injection)