오늘도 한 문제
이런 화면이 나오고 소스코드를 준다
일단 무슨말인지 모르겠다.
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 |