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或其他网站服务商是如何配置并控制非公共文件和目录的入口的。
路径遍历示例
防御路径遍历估计
本文系 OneAPM 工程师编译整理。OneAPM 是应用性能管理领域的新兴领军企业,能帮助企业用户和开发者轻松实现:缓慢的程序代码和 SQL 语句的实时抓取。想阅读更多技术文章,请访问 OneAPM 官方博客。
本文转自 OneAPM 官方博客
Injection Attacks-Log 注入的更多相关文章
- 防sql注入之参数绑定 SQL Injection Attacks and Defense
http://php.net/manual/zh/pdo.prepared-statements.php 预处理语句与存储过程 很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作 ...
- 防sql注入之参数绑定 SQL Injection Attacks and Defense 预处理语句与存储过程
http://php.net/manual/zh/pdo.prepared-statements.php 预处理语句与存储过程 很多更成熟的数据库都支持预处理语句的概念.什么是预处理语句?可以把它看作 ...
- Exploiting second-order SQL injection 利用二阶注入获取数据库版本信息 SQL Injection Attacks and Defense Second Edition
w SQL Injection Attacks and Defense Second Edition Exploiting second-order SQL injection Virtually ...
- web 安全相关(一):Log注入(转)
在网上有很多关于安全的文章,但是 OWASP 开发指导 涵 盖了几乎所有关于Web站点安全的东西.(注:OWASP(开放Web应用安全项目- Open Web Application Security ...
- SQL Injection(SQL注入漏洞)
审计前准备: 1.安�php程序(推荐phpStudy) 2.高亮编辑器(推荐 Sublimetext Notepad++) 3.新建一个文本,复制以下变量,这些变量是审计中需要在源码中寻找的 ### ...
- How to prevent SQL injection attacks?
In our earlier tutorial on SQL Injection, one way to have prevented the SQL injection attack was by ...
- 安全性测试入门:DVWA系列研究(二):Command Injection命令行注入攻击和防御
本篇继续对于安全性测试话题,结合DVWA进行研习. Command Injection:命令注入攻击. 1. Command Injection命令注入 命令注入是通过在应用中执行宿主操作系统的命令, ...
- Fortify漏洞之Sql Injection(sql注入)
公司最近启用了Fortify扫描项目代码,报出较多的漏洞,安排了本人进行修复,近段时间将对修复的过程和一些修复的漏洞总结整理于此! 本篇先对Fortify做个简单的认识,同时总结一下sql注入的漏洞! ...
- DVWA全级别之SQL Injection(SQL注入)
DVWA全级别之SQL Injection(注入) DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web ...
- 网络攻击技术:SQL Injection(sql注入)
网络攻击技术开篇——SQL Injection 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户数据库被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码 ...
随机推荐
- Cocos2d-x开发实例:使用Lambda 表达式
在Cocos2d-x 3.0之后提供了对C++11标准[1]的支持,其中的Lambda[2]表达式使用起来非常简洁.我们可以使用Lambda表达式重构上一节的实例. 我们可以将下面的代码: liste ...
- 判断IFeatureClass图形是否含有Z值信息,若有为IPoint赋Z值
判断IFeatureClass图形是否含有Z值信息 IFeatureClass featureClass = this.pLayer.FeatureClass; string shapeFieldNa ...
- Excel常用函数
1.基本的算数函数 sum() average() 2.三角函数 sin() cos() 3.
- MFC中快速应用OpenCV(转)
转载链接:http://wiki.opencv.org.cn/index.php/MFC%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%BA%94%E7%94%A8OpenCV 简介和缘 ...
- rpm与yum命令的初步认识
RPM:Red Hat package manager(RedHat软件包管理工具),现在为RPM is Package Manager好比windows里的文件扩展名为·exe的软件包. RPM的包 ...
- swfupload使用说明
网上的例子介绍的文档真的很多.下面简单介绍一下 SWFUpload的文件上传流程是这样的: 1.引入相应的js文件 2.实例化SWFUpload对象,传入一个配置参数对象进行各方面的配置. 3.点击S ...
- JQuery 判断某个属性是否存在 hasAttr
$(".fengye a").each(function () { if (typeof($(this).attr("href")) != "unde ...
- winform 与 html 交互 简单案例
本文主要简单的记录winform如何与html文件中的信息如何进行交互,即在winform中加载html界面,从而可以进行相互调用. 1.新建一个winform项目,若要在winform中加载html ...
- [大牛翻译系列]Hadoop(6)MapReduce 排序:总排序(Total order sorting)
4.2.2 总排序(Total order sorting) 有的时候需要将作业的的所有输出进行总排序,使各个输出之间的结果是有序的.有以下实例: 如果要得到某个网站中最受欢迎的网址(URL),就需要 ...
- python字典操作
Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型.一.创建字典字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: 代码如下: dict ...