Injection Attacks-Log 注入

AlgoCraft
• 阅读 1946

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

很多应用都维护着一系列面向授权用户、通过 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

本文系 OneAPM 工程师编译整理。OneAPM 是应用性能管理领域的新兴领军企业,能帮助企业用户和开发者轻松实现:缓慢的程序代码和 SQL 语句的实时抓取。想阅读更多技术文章,请访问 OneAPM 官方博客
本文转自 OneAPM 官方博客

点赞
收藏
评论区
推荐文章
芝士年糕 芝士年糕
3年前
rsyslog详解
这边使用的是3A服务器一、日志介绍日志概念日志是系统用来记录系统及应用程序运行时的一些相关信息的文本文件日志作用日志是为了保存相关程序的运行状态、错误信息等,为了对系统进行分析、保存历史记录以及在出现错误时发现、分析错误使用linux系统日志类型内核信息服务信息应用程序信息二、rsyslog1、rsyslog介绍rsyslog是linux系统中用来实现日志功
Wesley13 Wesley13
4年前
IP被攻击了怎么办
1、断开所有网络连接。服务器之所以被攻击是因为连接在网络上,因此在确认系统遭受攻击后,第一步一定要断开网络连接,即断开攻击。2、根据日志查找攻击者。根据系统日志进行分析,查看所有可疑的信息进行排查,寻找出攻击者。3、根据日志分析系统。根据系统日志进行分析,查看攻击者是通过什么方式入侵到服务器的,通过
人间小土豆 人间小土豆
4年前
请问日志审计什么意思呢?
这里的“日志”和我们日常生活中的理解大有不同。什么是日志?简单的说,日志就是计算机系统、设备、软件等在某种情况下记录的信息。具体内容取决于日志的来源。例如:unix操作系统会记录用户登录和注销等信息的日志防火墙会记录访问控制协议acl通过和拒绝等消息的日志有些系统在用户登录时或者在系统本身认为会发生一些故障时发出带有告警信息的日志有些产品会在本身存储不足时发
Wesley13 Wesley13
4年前
MySQL日志安全分析技巧
常见的数据库攻击包括弱口令、SQL注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源。0x01Mysql日志分析generalquerylog能记录成功连接和每次执行的查询,我们可以将它用作安全布防的一部分,为故障分析或黑客事件后的调查提供依据。1、查看log配置信息
Stella981 Stella981
4年前
Python日志库logging总结
在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置。1、日志级别Python标准库logging用作记录日志,默认分为六种日志级别(括号为级别对应的数值),NOTSET(0)、DEBUG(10)
分布式日志追踪ID实战
作者:京东物流张小龙本文通过介绍分布式应用下各个场景的全局日志ID透传思路,以及介绍分布式日志追踪ID简单实现原理和实战效果,从而达到通过提高日志查询排查问题的效率。背景开发排查系统问题用得最多的手段就是查看系统日志,相信不少人都值过班当过小秘吧:给下接口
日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队
前言随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序是不完整的,甚至可
分布式日志追踪ID实战 | 京东物流技术团队
本文通过介绍分布式应用下各个场景的全局日志ID透传思路,以及介绍分布式日志追踪ID简单实现原理和实战效果,从而达到通过提高日志查询排查问题的效率。背景开发排查系统问题用得最多的手段就是查看系统日志,相信不少人都值过班当过小秘吧:给下接口和出入参吧,麻烦看看
技术分享-日志链路追踪
1.背景简述在技术运维过程中,很难从某服务庞杂的日志中,单独找寻出某次API调用的全部日志。为提高排查问题的效率,在多个系统及应用内根据统一的TraceId查找同一次请求链路上的日志,根据日志快速定位问题,同时需对业务代码无侵入,特别是在高频请求下,也可以
日志框架简介-Slf4j+Logback入门实践
作者:京东零售张洪前言随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影响,但没有日志的应用程序