기준

취약점 설명

LDAP는 TCP/IP 위에서 DS(Directory Service)를 조회하고 수정하는 Application Protocol입니다.

 

LDAP 인젝션은 LDAP를 인젝션 공격해서 비정상적인 행동을 하도록 하는 공격입니다. 로그인 시에 주로 사용되고 SQL 인젝션의 일종이었으며 SQL 인젝션과 비슷한 방식으로 공격합니다.

 

아래는 공격에 자주 사용되는 페이로드입니다.

*
*)(&
*))%00
)(cn=))\x00
*()|%26'
*()|&'
*(|(mail=*))
*(|(objectclass=*))
*)(uid=*))(|(uid=*
*/*
*|
/
//
//*
@*
|
admin*
admin*)((|userpassword=*)
admin*)((|userPassword=*)
x' or name()='username' or 'x'='y

아시는 분도 많으시겠지만 로그인의 ID와 Password에 삽입되는 경우가 많습니다.

위의 페이로드를 보시면 삽입이 되었을 때 (uid=[입력 값])(password=[입력 값])의 구문이 존재한다면  입력 값에 *)를 넣는다면 구문이 참이 될 것입니다.

이 처럼 구문내 입력 값을 특수문자를 삽입하여 참이 성립되도록 하는 공격입니다.

공격 방법

Root ME에 괜찮은 예제가 있어서 이용하겠습니다.

로그인에서 LDAP인젝션을 이용해서 인증우회를 하는 문제입니다.

먼저 *)를 써서 확인을 해보니 ERROR로 로그인 구문을 알 수 있었습니다.

위의 *)를 이용하면 참값을 써서 할 수 있을 것 같습니다.

방법은 두가지 정도가 있는데 먼저 앞의 uid부분을 참으로 만들어줬으니 뒤를 끊어버리는 방법을 사용해보겠습니다.

NULL Byte(%00)를 이용해서 로그인에 직접 넣어봤지만 입력되지 않아 프록시를 확인해 보기로 했습니다.

인코딩 되는 것을 확인하고 다시 삽입해주었습니다.

뒤의 password값은 끊어져서 앞의 id값으로만 flag값을 얻을 수 있었습니다.

 

다른 방법은 id와 password값을 모두 참으로 만들어주는 방법이 있습니다.

id부분만 참으로 POST 했을 경우에는 로그인이 되지 않았습니다.

그래서 id와 password를 같이 참으로 만들어 보내봤습니다.

이처럼 구문의 요청 값을 참으로 만들어줘서 접근이 가능하도록 하는 공격이었습니다. 

 

참고 :

https://www.hahwul.com/cullinan/ldap-injection/

 

LDAP Injection

🔍 Introduction LDAP Injeciton은 LDAP(Lightweight Directory Access Protocol)에 대한 Injection 공격으로 사용자의 입력값이 LDAP Query에 직접 영향을 끼칠 수 있을 때 이를 통해 비정상적인 LDAP 동작을 유도하는 공격

www.hahwul.com

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection

 

GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and Pentest/CTF

A list of useful payloads and bypass for Web Application Security and Pentest/CTF - GitHub - swisskyrepo/PayloadsAllTheThings: A list of useful payloads and bypass for Web Application Security and ...

github.com

+ Recent posts