mirror of
https://github.com/elicpeter/nyx.git
synced 2026-06-15 20:05:13 +02:00
[pitboss] phase 06: Track J.4 + Track L.4 — LDAP_INJECTION corpus + LdapTemplate / python-ldap / php-ldap adapters
This commit is contained in:
parent
993bfabe28
commit
b2eeaabb09
27 changed files with 2189 additions and 18 deletions
16
tests/dynamic_fixtures/ldap_injection/java/Benign.java
Normal file
16
tests/dynamic_fixtures/ldap_injection/java/Benign.java
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
// Phase 06 (Track J.4) — Java LDAP_INJECTION benign control fixture.
|
||||
//
|
||||
// Same shape as `Vuln.java` but routes the attacker-controlled `uid`
|
||||
// through `org.springframework.ldap.support.LdapEncoder.filterEncode`
|
||||
// before splicing it into the filter, so any wildcard / paren breakout
|
||||
// is escaped and the directory keeps returning at most one entry.
|
||||
import java.util.List;
|
||||
import org.springframework.ldap.core.LdapTemplate;
|
||||
import org.springframework.ldap.support.LdapEncoder;
|
||||
|
||||
public class Benign {
|
||||
public static List<Object> run(String uid, LdapTemplate template) {
|
||||
String filter = "(uid=" + LdapEncoder.filterEncode(uid) + ")";
|
||||
return template.search("ou=people,dc=nyx,dc=test", filter, null);
|
||||
}
|
||||
}
|
||||
16
tests/dynamic_fixtures/ldap_injection/java/Vuln.java
Normal file
16
tests/dynamic_fixtures/ldap_injection/java/Vuln.java
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
// Phase 06 (Track J.4) — Java LDAP_INJECTION vuln fixture.
|
||||
//
|
||||
// The function string-concatenates the attacker-controlled `uid`
|
||||
// directly into the LDAP filter passed to `LdapTemplate.search`. A
|
||||
// payload like `alice*)(uid=*` rewraps the filter as
|
||||
// `(|(uid=alice*)(uid=*))` once the host wrapper pushes it through a
|
||||
// containing `(|…)`/`(&…)` clause, matching every directory entry.
|
||||
import java.util.List;
|
||||
import org.springframework.ldap.core.LdapTemplate;
|
||||
|
||||
public class Vuln {
|
||||
public static List<Object> run(String uid, LdapTemplate template) {
|
||||
String filter = "(uid=" + uid + ")";
|
||||
return template.search("ou=people,dc=nyx,dc=test", filter, null);
|
||||
}
|
||||
}
|
||||
13
tests/dynamic_fixtures/ldap_injection/php/benign.php
Normal file
13
tests/dynamic_fixtures/ldap_injection/php/benign.php
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
// Phase 06 (Track J.4) — PHP LDAP_INJECTION benign control fixture.
|
||||
//
|
||||
// Same shape as `vuln.php` but routes the attacker-controlled `$uid`
|
||||
// through `ldap_escape($uid, "", LDAP_ESCAPE_FILTER)`, escaping the
|
||||
// wildcard / paren breakout so the directory keeps returning at most
|
||||
// one entry.
|
||||
function run(string $uid) {
|
||||
$c = ldap_connect("127.0.0.1");
|
||||
ldap_bind($c);
|
||||
$filter = "(uid=" . ldap_escape($uid, "", LDAP_ESCAPE_FILTER) . ")";
|
||||
return ldap_search($c, "ou=people,dc=nyx,dc=test", $filter);
|
||||
}
|
||||
13
tests/dynamic_fixtures/ldap_injection/php/vuln.php
Normal file
13
tests/dynamic_fixtures/ldap_injection/php/vuln.php
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<?php
|
||||
// Phase 06 (Track J.4) — PHP LDAP_INJECTION vuln fixture.
|
||||
//
|
||||
// The function string-concatenates the attacker-controlled `$uid` into
|
||||
// the LDAP filter passed to `ldap_search`; a payload like
|
||||
// `alice*)(uid=*` breaks out of the host `(uid=…)` clause and matches
|
||||
// every directory entry.
|
||||
function run(string $uid) {
|
||||
$c = ldap_connect("127.0.0.1");
|
||||
ldap_bind($c);
|
||||
$filter = "(uid=" . $uid . ")";
|
||||
return ldap_search($c, "ou=people,dc=nyx,dc=test", $filter);
|
||||
}
|
||||
14
tests/dynamic_fixtures/ldap_injection/python/benign.py
Normal file
14
tests/dynamic_fixtures/ldap_injection/python/benign.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
"""Phase 06 (Track J.4) — Python LDAP_INJECTION benign control fixture.
|
||||
|
||||
Same shape as `vuln.py` but routes the attacker-controlled `uid`
|
||||
through `ldap.dn.escape_filter_chars`, escaping the wildcard /
|
||||
paren breakout so the directory keeps returning at most one entry.
|
||||
"""
|
||||
import ldap
|
||||
import ldap.dn
|
||||
|
||||
|
||||
def run(uid: str):
|
||||
con = ldap.initialize("ldap://127.0.0.1")
|
||||
filt = "(uid=" + ldap.dn.escape_filter_chars(uid) + ")"
|
||||
return con.search_s("ou=people,dc=nyx,dc=test", ldap.SCOPE_SUBTREE, filt)
|
||||
14
tests/dynamic_fixtures/ldap_injection/python/vuln.py
Normal file
14
tests/dynamic_fixtures/ldap_injection/python/vuln.py
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
"""Phase 06 (Track J.4) — Python LDAP_INJECTION vuln fixture.
|
||||
|
||||
The function string-concatenates the attacker-controlled `uid` into the
|
||||
LDAP filter passed to `ldap.search_s`; a payload like `alice*)(uid=*`
|
||||
breaks out of the host `(uid=…)` clause and matches every directory
|
||||
entry.
|
||||
"""
|
||||
import ldap
|
||||
|
||||
|
||||
def run(uid: str):
|
||||
con = ldap.initialize("ldap://127.0.0.1")
|
||||
filt = "(uid=" + uid + ")"
|
||||
return con.search_s("ou=people,dc=nyx,dc=test", ldap.SCOPE_SUBTREE, filt)
|
||||
Loading…
Add table
Add a link
Reference in a new issue