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万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码 ...
随机推荐
- BootStrap glyphicons字体图标
本章将讲解Bootstrap glyphicons字体图标,并通过一些实例了解它的使用,字体图标是在 Web 项目中使用的图标字体.字体图标在下载的Bootstrap的fonts文件夹中 本章将讲 ...
- CSS之鼠标经过字体光标形状的改变
CSS中的cursor属性是规定要显示的光标的类型(形状). 参阅JavaScript正则表达式 default 默认光标(通常是一个箭头) auto 默认.浏览器设置的光标. crosshair 光 ...
- sqlserver根据id集合,批量插入。(巧用sqlserver内置函数)
场景如下,传入的id,如1,3,4,88.可以在.net后台处理,但是我更习惯在数据库中操作. 插入数据时可以这样处理,直接贴代码. CREATE PROCEDURE pro_CategorySave ...
- 两种查看eclipse或MyEclipse是64bit还是32bit的方法
方法一: 对于:eclipse 打开eclipse后:Help-->About Eclipse-->Installation Details-->Configuration 如果看到 ...
- Learn Python The Hard Way学习笔记001
今天搜索了一下raw_input() 和 input()的区别,引用下原文部分内容 两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收).而对于 ...
- 在win7下配置java编译环境变量
今天刚接触java编程,环境的配置方法比较复杂.好记性不如烂笔头,发个文章记录一下吧. win7系统 Jdk版本1.6 用鼠标右击“我的电脑”->属性->高级->环境变量系统变量-& ...
- signal信号类型列表
Linux支持的信号列表如下.很多信号是与机器的体系结构相关的 信号值 默认处理动作 发出信号的原因 SIGHUP 1 A 终端挂起或者控制进程终止 SIGINT 2 A 键盘中断(如break键被按 ...
- windows系统下在dos命令行kill掉被占用的pid
备忘 1.开始-->运行-->cmd 2.命令行输入: netstat -ano I findstr 端口(被占用的端口号) 3.输入: tasklist | findstr 端口(获取步 ...
- CAF(C++ actor framework)(序列化之结构体,任意嵌套STL)(一)
User-Defined Data Types in Messages(用户自定义类型)All user-defined types must be explicitly “announced” so ...
- springMVC整合memcached
非原创,文章转自:http://www.cnblogs.com/xiaoqingxin/p/4132391.html 文章我就不全copy了,摘抄下我关注的部分,想看原文的请移步上面文章链接 appl ...