跟bWAPP学WEB安全(PHP代码)--邮件头和LDAP注入
背景
由于时间限制和这俩漏洞也不是特别常用,在这里就不搭建环境了,我们从注入原来和代码审计的角度来看看。
邮件头注入
注入原理:
这个地方首先要说一下邮件的结构,分为信封(MAIL FROM、RCPT TO)、头部(From,To,Subject、CC、BCC等)、主体(message),所谓的邮件头注入,其实就是针对头部的部分。使用telnet对25端口进行手工发邮件的过程的事后会发现,对于邮件头部的字段其实就是换行符0x0A或者0x0D0x0A分割 ,在绝大部分系统里面不是\n 就是\r\n,所以就可以注入了。例如在一段没有过滤的FROM字段里面输入,就可以添加一个收件人。
from=bobac%0ATo:attacker@attack.com
注入分类:
发件人修改
本来发件人就可控,或者在别的字段里重复添加,但是要看邮件服务器针对多个from是如何实现的,是取第一个,还是取最后一个,还是如何操作。
from=bobac%0Afrom:bobac1
收件人、抄送人注入
from=bobac%0ATo:attacker@attack.com
from=bobac%0ACc:attacker1@attack.com%0ABcc:attacker2@attack.com
主题注入
不过这里要看邮件服务器是如何实现,多个主题是合并还是覆盖写还是取其中一个
from=bobac%0ASubject:FakeSubject
消息体注入
这里要注意头部和消息体之间是两个换行符所以可以类似下面,假消息会加入消息体中或者覆盖写消息体。
from=bobac%0A%0ANewFakeMessage
检测防御技术
在每个类型里面把相关的字符过滤掉,\r ,\r\n ,\n 以及To,Cc,Bcc等关键字,最好直接根据邮件格式匹配。我们来看bWAPP的代码:
function maili_check_1($data)
{
// URL decoding %0A -> \n and %0D -> \r
$input = urldecode($data);
$input = str_replace("\n", "", $input);
$input = str_replace("\r", "", $input);
$input = str_replace("bcc:", "", $input);
return $input;
}
function maili_check_2($data)
{
// URL decoding %0A -> \n and %0D -> \r
$input = urldecode($data);
$input = filter_var($input, FILTER_SANITIZE_EMAIL);
return $input;
}
LDAP注入
注入原理
ldap的注入和ldap的检索密切相关,其本质是根据ldap查询语言构造特定的判断条件串,使得查询是成立的,与SQL注入很类似。具体LDAP查询语法请参考:LDAP查询过滤语法(MS)
注入举例
构造一个LDAP注入字符串,绕过口令认证,只用用户名登录:
(&(USER= slisberger)(&)(PASSWORD=Pwd))
检测防御
检测输入的特殊字符,过滤特殊字符,【( ) = & * | " "】我们来看bWAPP的函数。
function ldapi($data)
{
switch($_COOKIE["security_level"])
{
case "0" :
$data = no_check($data);
break;
case "1" :
$data = ldapi_check_1($data);
break;
case "2" :
$data = ldapi_check_1($data);
break;
default :
$data = no_check($data);
break;
}
return $data;
}
function ldapi_check_1($data)
{
// Replaces dangerous characters: ( ) = & | * WHITESPACE
$input = str_replace("(", "", $data);
$input = str_replace(")", "", $input);
$input = str_replace("=", "", $input);
$input = str_replace("&", "", $input);
$input = str_replace("|", "", $input);
$input = str_replace("*", "", $input);
$input = str_replace(" ", "", $input);
return $input;
}
跟bWAPP学WEB安全(PHP代码)--邮件头和LDAP注入的更多相关文章
- 跟bWAPP学WEB安全(PHP代码)--终结篇:文件目录遍历、文件上传、SSRF、CSRF、XXE、文件包含
前言 过年过的很不顺,家里领导和我本人接连生病,年前腊月29才都治好出院,大年初六家里的拉布拉多爱犬又因为细小医治无效离开了,没能过年回家,花了好多钱,狗狗还离世了.所以也就没什么心思更新博客.今天初 ...
- 跟bWAPP学WEB安全(PHP代码)--OS命令注入
背景 这是温故知新的一个系列,也是重新拾起WEB安全的一个系列,同时希望能稍微有点对初学者的帮助.第一篇先来讲讲OS命令注入 bWAPP里面有两个页面也就是两个漏洞,来验证OS命令注入.一个是有回显的 ...
- 跟bWAPP学WEB安全(PHP代码)--认证绕过与会话管理
背景 这里主要是代码逻辑问题,而不是代码使用函数的问题,因此在这个里面就不粘贴具体代码了,而是分类介绍下bWAPP中涉及的安全问题: 验证码问题 找回问题 账号口令问题 Cookies问题 Sessi ...
- 跟bWAPP学WEB安全(PHP代码)--SQL注入的一些技巧
背景 模拟环境还是 bWAPP,只不过这个bWAPP的SQL注入有点多,一一写意义不大,在这边就利用这个环境来尝试一些SQL注入的技巧.并研究下PHP的防御代码. 普通的bWAPPSQL注入的简单介绍 ...
- 跟bWAPP学WEB安全(PHP代码)--PHP代码注入
---恢复内容开始--- 背景 今天我们换一个方式来分析这个漏洞,从渗透的角度去搞. 渗透过程 测试漏洞 先来看看,观察URL是:http://192.168.195.195/bWAPP/phpi.p ...
- 跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
背景 这个系列有很多题,但是其实考察的相近,类似的就不在多说,我们来看吧.主要分几个点来讲: 反射型 存储型 JSON XM 头部字段相关 分类介绍 反射型 在请求中构造了XSS的Payload,一般 ...
- 跟bWAPP学WEB安全(PHP代码)--XPath注入
XML/Xpath注入 看了下,A2里面是认证与会话管理的破坏或称之为绕过,没有特别要写的,很多就是小问题,可能会将这类问题放在最后写一下.一篇博客,这里还是更多的着重在能够获取信息或者服务器权限的漏 ...
- 跟bWAPP学WEB安全(PHP代码)--SSL(Server-Side-Include)漏洞
什么是Server-Side-Include漏洞 服务端包含漏洞是指发送指令到服务器,服务器会将指令运行完,把运行结果包含在返回文件中发送给你.利用这种漏洞可以获取服务端的信息甚至执行命令,这样的指令 ...
- 跟bWAPP学WEB安全(PHP代码)--HTML注入和iFrame注入
背景 这里讲解HTML注入和iFrame注入,其他的本质都是HTML的改变.那么有人会问,XSS与HTML注入有啥区别呢?其实本质上都是没有区别的,改变前端代码,来攻击客户端,但是XSS可以理解为注入 ...
随机推荐
- iOS: 自动增高的 textView
如 iPhone 内应用“信息”的输入框一样,输入文字过多或者输入换行,输入框可以随着内容自动变化.主要是计算内容的尺寸并相应更改输入框的frame.具体表现在: 更改输入框的 frame.origi ...
- iOS 多线程简单使用的具体解释
主线程 一个iOS程序执行后.默认会开启1条线程,称为"主线程"或"UI线程"(刷新UI界面最好在主线程中做.在子线程中可能会出现莫名其妙的BUG) 主线程的作 ...
- 决策树-Cart算法二
本文结构: CART算法有两步 回归树的生成 分类树的生成 剪枝 CART - Classification and Regression Trees 分类与回归树,是二叉树,可以用于分类,也可以用于 ...
- Thinkphp5笔记四:设置模板路径
默认的模板路径在模块/view文件里面.如果你觉得这样不太方便管理,想要把他设置Template目录下,可以这样做. 模板参数 ,能够影响的它参数,是当前模块下config.php template- ...
- vue、vuex、iview、vue-router报错集锦与爬坑记录
1.vue报错: 没安装 less-loader css-loader style-loader 可能的很大原因:没安装less 2.vuex报错:Computed property &qu ...
- java的final关键字——修饰变量
final修饰的变量不可变,指的是引用不可变,(除基本类型)而不是内容. final修饰的成员变量必须被初始化
- requireJs压缩合并路径问题
描述 随着前端开发的重要性,以及业务的复杂性,前端的模块化开发也被大众所接收,最常见的js框架requireJs,一个js文件对应一个模块,方便开发人员调试与维护,但是一个文件对应一个模块增加了htt ...
- spring boot整合activemq消息中间件
spring boot整合activemq消息中间件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi ...
- Android ROM 打包记录
android5.1平板或手机应用层一些常用的修改项及目录所在: 1.所以系统应用所在的目录: \alps\packages\apps 2.一些系统属性的定义:并且可以仿写自行定义变量 \alps\b ...
- PHP缓存机制详解
一,PHP缓存机制详解 我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用. output ...