일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- system hacking
- System
- Operating System
- stack overflow
- Spring
- Payload
- wargame
- 웹해킹
- hacking
- 정보보안기사 실기
- 워게임
- Lord of BOF
- SQL
- PWN
- BOF
- 해킹
- Shell code
- 정보보안기사
- Spring Framework
- OS
- 네트워크
- pwnable
- Pwnable.kr
- Spring MVC
- webhacking.kr
- 운영체제
- webhacking
- 정보처리기사 실기
- Buffer Overflow
- LOB
- Today
- Total
DongDD's IT
[webhacking.kr] Level 6 본문
[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 |