DongDD's IT

[webhacking.kr] Level 6 본문

Wargame/webhacking.kr

[webhacking.kr] Level 6

DongDD 2017. 9. 7. 14:35

[webhacking.kr] Level 6




base64를 사용한 것이 hint라고 주어져 있었고 id와 pw가 나타나 있었다.



이번 문제의 소스코드는 한 화면에 담을 수 없을 정도로 길었다.

일단 윗부분을 살펴보기로 했다.

COOKIE에 user라는 변수가 설정되어 있지 않으면 if문으로 들어가게 된다.

val_id에 "guest"를 넣고 val_pw에 "123qwe"를 넣어준 후 php의 base64 인코딩함수를 이용하여

20번 인코딩해주게 되어있다.

그 후에 숫자를 다 특수문자로 바꿔주고 cookie에 user와 password에 넣어주는 형태로 되어있는 코드였다.



밑에 코드에서는 설정되어 있는 user와 password 쿠키를 가져와 특수문자를 다시 숫자로 바꿔주고

20번 디코딩해주는 방법으로 되어있다.

이 과정을 거친 후 decode_id가 "admin"이고 decode_pw가 "admin"이게 되면 문제의 답을 얻을 수 있는 형태로 되어있었다.


코드를 모두 본 후에 위에 소스 코드는 필요 없을 거라는 생각이 들었다.

cookie에 user를 넣어주고 password를 넣어줄 경우 위의 소스 코드는 동작하지 않고 바로 밑에 있는 소스코드로 가게 될 것이다.


그 말은 즉, 코드를 역으로 생각해보면 되는 것이였다.


20번 디코딩한다는 말은 반대로 admin을 20번 인코딩한 후 숫자를 모두 특수 문자로 바꿔주면 된다는 것이다.


local 환경에서 php를 이용하여 admin을 20번 인코딩해보았다.

20번 인코딩이라 엄청나게 긴 문자열이 나왔다.


역으로 생각하는 것이기 때문에 마지막으로 숫자를 특수문자로 바꿔주면 된다고 생각했다.



20번 인코딩 후 숫자를 모두 특수문자로 바꿔 준 값이다.

이 것을 user와 password에 넣어주면 통과할 것 같다.


예상대로 변환된 값을 user와 password에 넣어주니 통과할 수 있었다.


문제를 통과하고 나서 알게 된 사실인데, 사실 숫자를 특수문자로 바꿔주는 것은 필요하지 않다는 것을 알았다.


애초에 base64 encode를 할 경우 특수문자가 없기 때문에 저 과정을 거칠 필요가 없는 것이었다.


소스코드를 역으로 생각하다보니 무의식적으로 따라가게 되어 숫자를 특수문자로 바꾸는 과정을 했지만

생각해보면 원래는 특수문자를 숫자로 바꾸는 것이기 때문에 특수문자가 없는 base64 디코딩에서는

저 과정이 동작하지 않을 것이다.








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



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

[webhacking.kr] Level 20  (0) 2017.09.08
[webhacking.kr] Level 23  (0) 2017.09.08
[webhacking.kr] Level 33 (9~10) - END  (0) 2017.09.03
[webhacking.kr] Level 33 (5~8)  (0) 2017.09.01
[webhacking.kr] Level 33 (1~4)  (0) 2017.08.31
Comments