DongDD's IT

[webhacking.kr] Level 51 본문

Wargame/webhacking.kr

[webhacking.kr] Level 51

DongDD 2017. 12. 20. 16:23

[webhacking.kr] Level 51



문제에 들어가니 "Admin Page"라는 화면에 ID와 PW를 입력할 수 있는 Login창이 있었다. 그리고 오른쪽 밑에는 Source라는 링크가 있었다. 아직 많은 공격법을 몰라서 그런지 로그인 창만 보면 sql injection이 떠올랐다. 일단 소스 코드를 보기전에 여러 값을 입력해보았다.



일단 admin라는 아이디에 아무 값이나 넣어서 제출해보았더니 Wrong이라는 message가 나오는 것을 볼 수 있었다. admin'#를 넣고 PW를 빈칸으로 두었더니 'Wrong'라는 message가 나오지 않고 그대로 인것을 볼 수 있었다. 그리고 ' 라던지 여러 값을 넣어보았지만 Wrong이라는 message만 나왔기 때문에 일단 소스 코드를 보고 어떤 식으로 동작하는 지 확인하고 해결 방안을 찾아야겠다는 생각이 들었다.



소스 코드는 위와같이 되어있었다. 먼저 POST방식으로 id와 pw를 받는데 이 값을 입력하지 않으면 if문으로 들어가지 않아 아무 것도 수행되지 않게 되어있었다. 즉, id와 pw는 무조건 입력을 해야 문제를 해결할 방법을 찾을 수 있다는 것이었다.

POST방식으로 id와 pw를 넘기면 id를 input_id 변수에 넣고 pw는 md5 해쉬함수를 통해 input_pw에 넣은 후 query를 보내는 형식으로 되어있다. query를 받아와 q[id]가 "admin"이 된다면 통과하는 문제인 것 같다.


먼저 md5해쉬 함수에 대해 알아보았다.

md5함수의 첫번째 인자에는 해쉬 값을 구할 문자열을 받는다. 두 번째 인자는 true, false를 입력할 수 있는데 true를 입력할 경우 16자리의 값으로 만들어주고 false를 입력할 경우 32자리의 값으로 만들어준다. 그리고 이 바꿔준 string을 return한다.

이 함수의 default값은 false로 설정되어있다.

md5(string, true) -> 16자리의 바이너리

md5(string, false) -> 32자리의 16진수


id쪽을 공격해보기 위해 여러 시도를 했지만 실패했고 pw쪽을 해야될 것 같았다. md5를 어떻게 활용해야 될지 몰라서 md5 해쉬함수에 대한 취약점을 찾아보았다. 그랬더니 문자열을 md5 hash했을 때 '1' or '1' 과 같이 true값을 가지게 하는 쿼리문을 만들 수 있는 string을 찾게 되었다.
ID에 admin을 넣고 password에 찾은 값을 넣어주니 문제에 통과할 수 있었다.







**************     Answer & Flag     **************

ID : admin

PW : 129581926211651571912466741651878684928



사실 이 문제는 예전에 시도했다가 풀지 못한 채로 놔두었었다. 그런데 얼마 전 InCTF에서 이와 같은 문제를 만났고 필사적으로 해결하기 위해 해결 방안을 찾다보니 문제를 통과할 방법을 알게 되어 여기에 시도해보니 바로 통과할 수 있었다.

2017 InCTF Web 문제 소스 코드


얼마 전에 했던 InCTF에서 Web문제로 나왔던 소스 코드이다. 이 문제를 해결할 때 사용했던 위 PW값을 Level 51문제에 그대로 넣어주니 바로 해결할 수 있었다.

이 값이 어떻게 생성됬는지는 잘 모르겠지만 앞으로도 많이 쓰일 수 있다는 생각이 들었다.





'Wargame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level 58  (0) 2017.12.19
[webhacking.kr] Level 52  (0) 2017.12.02
[webhacking.kr] Level 10  (0) 2017.11.19
[webhacking.kr] Level 3  (0) 2017.11.11
[webhacking.kr] Level 11  (0) 2017.09.30
Comments