Injection +1 ↑
LDAP全称Lightweight Directory Access Protoco,轻量目录访问协定。LDAP是一个提供Access Control和分散式资讯维护的目录资讯。
LDAP Injection与SQL Injection和ORM Injection有点相似,不一样的是,LDAP是利用用户参数来产生的LDAP查询。
跟常见的测试方法相似,利用输入一些会让LDAP混淆的无意义字元,若LDAP Server return错误讯息,就可能代表这可能具有漏洞。
例如原本的User为Craig
,我们可以输入诸如(
,)
,&
,|
,*
,!
等等,更改原本的查询动作。
若有一个php网站,部分程序码如:
$userName = $_POST["userName"];
$filter = "(user=" . $userName . ")";
$output = ldap_search($ds, "ou=People,dc=example,dc=com", $filter);
而若是在这种不经检查的状况下,对userName的input输入:
Craig, Chen)(|(objectclass=*)
将会将原本的查询:
(user=Craig, Chen)
变成
user=Craig, Chen)(|objectclass=*)
这会让filter根据|(objectclass=*)
这个条件,与目录中的所有项目相符合,导致攻击者可以leak出整个使用者集区的资讯。
或是利用类似於SQL injection中的'OR "1"="1" --
,bypass登入验证。
假设有个使用LDAP的网站具有使用者登入的功能参数为user
和pass
这时候我们在input中写入一个让条件始终为true的输入:
*)user=*))(|user=*
就可以在完全没有用户帐号和密码的状况下获得网站的用户权限。
研究员在ForgeRock的OpenAM Server里发现具有漏洞的webfinger endpoint。
String[] objs = { filter };
String FILTER_PATTERN_ORG = "(&(objectclass="
+ SMSEntry.OC_REALM_SERVICE + ")(" + SMSEntry.ORGANIZATION_RDN
+ "={0}))";
String sfilter = MessageFormat.format(FILTER_PATTERN_ORG, (Object[]) objs);
可以看的出来这是一个使用JAVA进行的LDAP查询,应用程序没有对上述所提过的特殊字元进行检查、转义或过滤,这使攻击者可以撰写自动化程序码,去Enum有效的使用者名称(帐号)
http://example/cra*&
...(後略)
若是服务器中具有cra
开头的用户名称,就会return 200 OK,无则404 Not Found。
在取得用户名称後,再利用密码输入的地方,如同前述一样慢慢破解使用者密码的hash,例如:
pass=a*
pass=b*
若return 200则继续下一个字元的判断,以此try出user passowrd的hash value。
「一般来说,如果你所依赖的模组包含了超过你所需要的,那就是有害的,这可能导致不必要的重新编译和重新...
每一次的重要决策,都左右着後面的行为发展,非常棒的产业蓝图关键链 跨足零售产业,电商产业,物流产业,...
题组回顾与观念统整 在前三天的刷题实战中,我们一起完成了这三个经典的「基本」题: LeetCode...
继续昨天 我们回到新建的tableviewcontroller,写一个变数阵列。 这边是介绍一些比较...
前言 这个市场想要找工作的准工程师非常多,我们要证明自己除了学科(考题、技术问答)以外,更重要的是证...