看好你的门-攻击数据存储区(5)-LDAP注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。

本文部分内容来自互联网和翻译

1、一些多余的话

LDAP注入和SQL注入,原理上非常相似

但是LDAP往往包含很多的数据,相对来说,危害性更加大。

2、一些案例

这些案例不一定是LDAP造成的,但是性质基本上差不多

WooYun: 腾讯某服务配置不当内部海量敏感信息泄露!

http://www.wooyun.org/bugs/wooyun-2013-045626

WooYun: 腾讯某研发中心某系统多用户弱口令可能导致该产品线及业务受影响!

http://www.wooyun.org/bugs/wooyun-2013-046031

3、LDAP注入攻击介绍

LDAP服务开启的端口是389,如果发现某个服务器上开启了该端口很可能就是开启了LDAP服务,针对LDAP的软件有ldapbroswer、ldap blind explorer;

LDAP注入攻击和SQL注入攻击相似。在有漏洞的环境中,有些参数没有得到合适的过滤,因而攻击者可以注入任意恶意代码。

下面的案例将会致代码注入:

(attribute=value):如果过滤器用于构造查询单缺少逻辑操作符,如value)(injected_filter的注入会导致两个过滤器(attribute=value)(injected_filter)。在OpenLDAP实施中,第二个过滤器会被忽略,只有第一个会被执行。而在ADAM中,有两个过滤器的查询是不被允许的,因而这个注入毫无用处。

(|(attribute=value)(second_filter)) or (&(attribute=value)(second_filter)):如果第一个用于构造查询的过滤器有逻辑操作符,形如value)(injected_filter)的注入会变成如下过滤器:(&(attribute=value)(injected_filter)) (second_filter)。虽然过滤器语法上并不正确,OpenLDAP还是会从左到右进行处理,忽略第一个过滤器闭合后的任何字符。一些LDAP客户端Web组成会忽略第二个过滤器,将ADAM和OpenLDAP发送给第一个完成的过滤器,因而存在注入。

一些应用框架在将请求发送给服务器之前会检查过滤器是否正确,在这种情况下,过滤器语义上必须是正确的,其注入如:value)(injected_filter))(&(1=0。这会导致出现两个不同的过滤器,第二个会被忽略:(&(attribute=value)(injected_filter))(&(1=0)(second_filter))。

既然第二个过滤器会被LDAP服务器忽略,有些部分便不允许有两个过滤器的查询。这种情况下,只能构建一个特殊的注入以获得单个过滤器的LDAP查询。value)(injected_filter这样的注入产生的结果是:(&(attribute=value)(injected_filter)(second_filter))。

测试一个应用是否存在代码注入漏洞典型的方法是向服务器发送会生成一个无效输入的请求。因此,如果服务器返回一个错误消息,攻击者就能知道服务器执行了他的查询,他可以利用代码注入技术。

4、 LDAP注入攻击中的AND注入

这种情况,应用会构造由”&”操作符和用户引入的的参数组成的正常查询在LDAP目录中搜索,例如:

(&(parameter1=value1)(parameter2=value2))

这里Value1和value2是在LDAP目录中搜索的值,攻击者可以注入代码,维持正确的过滤器结构但能使用查询实现他自己的目标。

权限提升

现假设下面的查询会向用户列举出所有可见的低安全等级文档:

(&(directory=document)(security_level=low))

这里第一个参数document是用户入口,low是第二个参数的值。如果攻击者想列举出所有可见的高安全等级的文档,他可以利用如下的注入:

document)(security_level=*))(&(directory=documents

生成的过滤器为:

(&(directory=documents)(security_level=*))(&(direcroty=documents)(security_level=low))

LDAP服务器仅会处理第一个过滤器而忽略第二个,因而只有下面的查询会被处理:

(&(directory=documents)(security_level=*))

(&(direcroty=documents)(security_level=low))

则会被忽略。结果就是,所有安全等级的可用文档都会列举给攻击者,尽管他没有权限查看它们。

5、LDAP注入攻击的OR注入

这种情况,应用会构造由”|”操作符和用户引入的的参数组成的正常查询在LDAP目录中搜索,例如:

(|(parameter1=value1)(parameter2=value2))

这里Value1和value2是在LDAP目录中搜索的值,攻击者可以注入代码,维持正确的过滤器结构但能使用查询实现他自己的目标。

信息泄露

假设一个资源管理器允许用户了解系统中可用的资源(打印机、扫描器、存储系统等)。这便是一个典型的OR注入案例,因为用于展示可用资源的查询为:

(|(type=Rsc1)(type=Rsc2))

Rsc1和Rsc2表示系统中不同种类的资源, Rsc1=printer,Rsc2=scanner用于列出系统中所以可用的打印机和扫描器。

如果攻击者输入Rsc=printer)(uid=*),则下面的查询被发送给服务器:

(|(type=printer)(uid=*))(type=scanner)

LDAP服务器会响应所有的打印机和用户对象。

时间: 2024-11-05 12:35:55

看好你的门-攻击数据存储区(5)-LDAP注入攻击的相关文章

看好你的门-保护数据存储区(1)-SQL注入防御

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.常用的SQL注入防御的方法 一个能连接数据库的应用. 1.对用户端输入的数据进行严格防范: 2.使用PreparedStatement执行Sql语句: 3.不仅仅要在页面层面进行验证,在服务端层面还要同步进行这些验证: 2.使用正则表达式屏蔽特殊字符 使用SQL注入攻击多在特殊字符上下手脚,如"'","*","/" ,"–&qu

看好你的门-攻击数据存储区(4)-XPath注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.一些多余的话 XPath注入和SQL注入,原理上非常相似 但是XPath注入的对象主要是XML,相对来说,危害性更加大 2.保存用户信息的XML <?xml version="1.0" encoding="utf-8" ?> <root> <user> <id>1</id> <username

看好你的门-保护数据存储区(2)-查看PreparedStatement最终执行的SQL

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.前提 很多同学都希望PreparedStatement 打印出最终执行的SQL,可能用于学习,也可能用于系统维护,也有可能用于其他的目标: 我也有这个想法和需求,但是经过多次实践和尝试,我发现在我的能力范围,我是无法实现的. 于是我找到了一个工具,log4jdbc ,这个工具能够切入JDBC层,对实际SQL执行前,把SQL抽出来. 这个工具相当强大,不过最终的运行结果会超出你的设想--.

选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足

问题: ASP.NET Configuration site->安全,报错 "选定的数据存储区出现问题,原因可能是服务器名称或凭据无效,或者权限不足" 解决: 打开文件C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config 找到 <connectionStrings> <add name="LocalSqlServer" connectionString=&quo

看好你的门-攻击服务端(4)-HTTP参数注入攻击

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1.HTTP参数注入攻击 如果用户提交的参数,被用做后端HTTP请求中的参数,这个时候就有可能会导致HTTP参数注入. 一个自己想出来的烂比方: 一个P2P的转账系统:钱(money),从哪里(from)到哪里去(to). 一个很简单的系统.开发的时候为了复用代码,加了一个判断字符(check),当然,这个判断字符(check)是不会出现在这个P2P的转账系统的文档系统中: 2.一个典型的容

看好你的门-验证机制被攻击(3)-智能化的蛮力攻击登陆

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考. 1. 简单说明 登陆功能的公开性,让无数的攻击者都试图猜测用户名和密码,从而获得未授权访问系统的权利. 作为系统的使用者,必须让自己的系统更加健壮,以应对狡猾的攻击者. 作为攻击者,需要去观察系统的各种细节情况,获得贴近实际的信息. 2. 智能化的蛮力攻击登陆步骤 我们首先需要有一个弱密码的系统,这样才可以去尝试蛮力攻击. 1. 用自己的某个合法账号进行尝试:比如提交几次错误的登陆,看收到什

【JDK源码分析】String的存储区与不可变性(转)

// ... literals are interned by the compiler // and thus refer to the same object String s1 = "abcd"; String s2 = "abcd"; s1 == s2; // --> true // ... These two have the same value // but they are not the same object String s1 = new

单片机中C语言的程序与数据存储

单片机中C语言的程序与数据存储 一.五大内存分区: 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的变量通常是局部变量.函数参数等. 2.堆区(heap):就是那些由new分配的内存块,它们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收. 3.自由存储区:就是那些

Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程序员,我对sql注入的东西了解的也不深入,所以抽出时间专门学习了一下.现在把学习成果分享给大家,希望可以帮助大家学习.下面我们就来看一下. 一.什么是sql注入呢?         所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的