본문 바로가기

보안

[wargame.kr] md5 password

오늘도 한 문제

 

 

이런 화면이 나오고 소스코드를 준다

 

일단 무슨말인지 모르겠다. 

 

password를 틀리게 입력하면 위에 wrong이라고 뜬다.

 

소스코드에서 눈에띄는점은 md5($ps, true)인데, 이게 뭔지 몰라서 찾아봤다.

md5('value')로 하면 해쉬값을 반환해주고, md5('value', true)로 하면 결과값을 바이너리 형식으로 돌려준다.

 

너무 어이없었던게 md5(true)라고 서치하니까 바로 취약점이 떴다..

md5 해시 결과값에 '가 들어갈 수 있으므로

md5 함수에 들어가는 값이 해시함수를 적용했을 때, 1' or '1 같은 query가 나오면 되는 값을 찾으면 되는것, 

129581926211651571912466741651878684928가 예시로  있어서 바로 적용했더니 풀렸다.

 

바로 이 줄에서 저 md5($ps, true)의 값이 1' or '1이 되므로, 전체 query문은

"select * from admin_password where password='1'or'1'"이 된다.

그럼 password='1'or'1 => true가 되므로

admin_password table에 있는 모든 password를 select하게 된다.

그렇기 때문에 이후의 if문을 만족하고, 문제가 풀린다.

 

따라서 md5('value', true)일 때 '=' 등의 형태가 결과값으로 나오는 취약점이 생기기 때문에 md5 함수의 기본값은 false여서 바이너리 형태로 결과값이 나오지 않도록 한다.

 

 

 

'보안' 카테고리의 다른 글

[wargame.kr] md5 compare  (0) 2020.01.19
[wargame.kr] DB is really GOOD  (0) 2020.01.15
[wargame.kr] strcmp  (0) 2020.01.14
[wargame.kr] login filtering  (0) 2020.01.11
PE 포맷  (1) 2019.02.24