LDAP Injection 문제를 풀어보겠습니다. 인증 매커니즘을 우회하는 것이 목표입니다.
LDAP이란? "TCP/IP를 통해 디렉토리 서비스에 액세스하고 수정하기 위한 프로토콜" 이라고 정의됩니다.
LDAP Injection 공격 또한, SQL Injection 공격 기법과 별반 다르지 않습니다.
공격자는 웹 어플리케이션 측에서 악의적인 LDAP 문법을 이용해 서버가 의도치 않은 행위(명령어 실행 등)를 실행하는 것이 목표입니다.
Root-me 문제를 풀면서 이해해보도록 하겠습니다.
LDAP Injection 문제를 클릭하면, 로그인 창이 뜹니다.
로그인 기능이 동작되는지, 취약한 패스워드를 사용하고 있지는 않은지 파악하기 위해 [admin/admin]을 입력해봅니다.
[admin/admin]으로는 로그인이 되지 않으며, unknown identifiers라는 에러가 발생합니다.
LDAP Injection을 시도할 때, 주로 사용되는 특수문자인 *)를 입력해보았습니다.
LDAP 문법이 어떻게 구성되어 있는지 친절하게 에러로 뱉어줍니다.
username에 *)를 입력하니 (uid=*))(userPassword=admin) 이라는 구문이 만들어지기 때문에 이 부분을 활용하면 될 것 같다는 생각이 듭니다.
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
위의 링크를 참고해서 LDAP 공격 문자열을 만들었습니다.
그래서, uid=*) 까지만 True 값을 만들고 NULL Byte(%00)를 이용해 이후에 입력받는 문자열(패스워드)을 끊어버려 상관없이 만들어줬더니 인증에 성공하였습니다!
ch25 계정의 패스워드가 Flag 값입니다...
'Study > Wargame' 카테고리의 다른 글
[root-me] File upload - ZIP (0) | 2020.02.12 |
---|---|
[root-me] PHP - preg_replace() (0) | 2020.01.08 |
[root-me] Remote File Inclusion (0) | 2020.01.08 |
[root-me] PHP - assert() (0) | 2020.01.02 |
[root-me] JSON Web Token (JWT) - Introduction (0) | 2019.12.20 |