Security/Wargame

[Webhacking.kr] Challenge 6

rootnix 2014. 10. 7. 00:33

안녕하세요.

오늘은 Webhacking.kr 의 6번 문제 풀이를 작성해보도록하겠습니다.


6번 문제에 접속하시면 다음과 같은 화면을 보게됩니다.




ID: guest

PW: 123qwe


라는 내용을 보게 되고,

Hint 는 base64 라고 주어졌습니다.


일단 소스를 한번 보도록 하죠


index.phps 로 들어갑니다.




위와 같은 소스를 보게 됩니다.

소스를 분석해 보도록하죠

쿠키값이 없을 경우
id는 guest
pw는 123qwe
로 선언 후
각 값을 가지고 base64 Encode를 20번 합니다.
그리고 나온 결과값에서
1 -> !
2 -> @
3 -> $
4 -> ^
5 -> &
6 -> *
7 -> (
8 -> )
로 치환을 하게 됩니다.

그리고 치환된 값을
user에 id를 password에 pw를 넣어주고 새로고침을 시킵니다.

그럼 문제를 클리어하려면 어떤 조건이 필요한지 마지막 쪽을 보시면

if($decode_id=='admin' && $decode_pw=='admin')
이고, 위에부터 보면 쿠키값을 읽어와
위에서 치환했던 것들을 반대로 치환후 base64 Decode 를 20번 해줍니다.
즉 원래 문자열로 원복하는거죠.
그래서 나온 원본문자열이 admin 이면 문제를 해결할 수 있습니다.

즉 우리가 이 문제를 해결하려면
위에서 처음 id,pw 를 인코딩/치환 한것처럼
admin 이라는 문자열을 20번 인코딩/치환 한 후
쿠키값을 변조해주시면 문제를 해결할 수 있는 겁니다.


해당 인코딩/치환, 치환/디코딩 을 구현한 파이썬 스크립트를 첨부합니다.