일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Buffer Overflow
- webhacking.kr
- 네트워크
- 정보보안기사 실기
- LOB
- 정보보안기사
- 웹해킹
- stack overflow
- 정보처리기사 실기
- Shell code
- SQL
- PWN
- wargame
- Payload
- hacking
- system hacking
- 운영체제
- Spring
- Operating System
- Lord of BOF
- System
- Spring Framework
- 해킹
- BOF
- 워게임
- Pwnable.kr
- OS
- Spring MVC
- webhacking
- pwnable
- Today
- Total
DongDD's IT
[webhacking.kr] Level 12 본문
[webhacking.kr] Level 12
문제에 들어가니 "javascript challenge"라는 문자만 써있었다.
일단 코드를 보기로 했다.
script를 제외한 다른 코드에서는 별로 중요해보이는 것이 없었다. 스크립트에 대해 잘 몰라서 함수에 대해서 찾아보았다.
ref) String.fromCharCode()
- 유니코드 코드로 이루어진 인자를 문자로 바꿔서 string으로 만들어주는 함수
ref) eval()
- 문자로 표현되어있는 것을 javascript로 실행해주는 함수
이 두 함수에 대해 알아보고 나서 왠지 fromCharCode함수를 이용해 저장한 WorkTimeFun이라는 문자열이 javascript이지 않을까 생각이 들었다.
브라우저에 있는 console창을 이용해 저 값에 대해 알아보았다.
eval을 제외한 나머지 script부분을 console창에 넣었더니 다음과 같은 문자열, script가 출력되었다.
아마 이 문자열로 이루어진 script를 eval함수를 통해 실행하는 구조인 것 같다.
코드를 분석하기 위해 여러 함수를 찾아보았다.
먼저 document.URL.indexOf() 함수는 webhacking.kr의 다른 문제에서 본 적이 있기 때문에 알 수 있었다.
이 함수는 URL에서 인자에 있는 char형 문자가 처음으로 나타나는 index를 나타낸다.
URL.substr은 검색을 해보았지만 잘 나오지 않아 console창을 실험하며 대략 무슨 의미로 쓰이는 지 알 수 있었다.
위와 같은 결과론 별과 이 함수는 인자에 있는 문자가 처음나오는 부분부터 끝까지 잘라 string으로 만들어주는 함수 같았다. '='는 없기 때문에 1이라고 출력되는 것 같다.
enco 변수에는 위와 같이 유니코드 1~121까지 들어가게 된다.
그 후에 enco_x라는 함수가 있고 위에서 만든 ck와 뒤의 내용을 비교하는 if문이 존재하고 이 if문을 통과하면 flag가 나오는 형태로 되어있다.
enco_x함수로 들어가는 경우가 많아 enco_x함수에 대해 분석해 보았다.
유니코드 1~121까지 만들어 놓은 enco에서 함수 인자로 넘어간 index의 값을 int형으로 리턴해준다.
ref) str.charCodeAt(x)
- str에서 index x에 해당하는 값을 유니코드 값으로 반환해준다.
ex) str = "ABCD" -> str.charCodeAt(0) : 65(A) 반환
즉 enco_(240)은 121을 반환하여 y를 의미하게 된다.
그리고 enco2(126)과 enco3(33)을 char로 바꾸어 문자열에 붙여넣어준다.
이렇게 생성된 문자열이 ck와 같은 경우 flag가 나오게 되는데 생각해보면 flag를 구하는데 위의 내용은 필요없는 것 같다.
flag를 출력하는 형식이 이렇게 해서 만들어진 문자열에서 '='만 제거하면 되는 형태이기 때문에 ck옆 내용을 console을 이용해 문자열로 만들어주면 바로 password를 알 수 있다.
이렇게 해서 출력된 password에서 '='를 제거하니 통과할 수 있었다.
아마 WorkTimeFun에 들어가있는 int를 수정해서 script를 변환시켜 통과할 수 있을 것 같기도 하다.
************** Answer & Flag **************
의외로 간단하게 해결할 수 있었다.
자바스크립트의 함수에 대해 모르는 것이 많았는데 좋은 공부가 된 것 같다.
'Wargame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] Level 3 (0) | 2017.11.11 |
---|---|
[webhacking.kr] Level 11 (0) | 2017.09.30 |
[webhacking.kr] Level 41 (0) | 2017.09.24 |
[webhacking.kr] Level 42 (0) | 2017.09.12 |
[webhacking.kr] Level 32 (0) | 2017.09.11 |