일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- proc contents
- samp;e_frac()
- 대칭형 알고리즘
- filter()
- AES
- mutate()
- sample_n()
- arrange()
- select()
- distinct()
- summarize()
- groupe_by()
- dplyr
- Today
- Total
Gae Ko's Blog
[webhacking.kr] challenges54 본문
문제를 보니
Password is 뒤에 아무것도 없었는데 좀 있으니 막 숫자가 바뀌면서 마지막은 ?로 끝난다.
하나하나 적으면 될 거 같지만 이 문제의 포인트는 그게 아닌거 같으므로 소스코드를 보았다.
간단간단해 보이지만 읽어보니 어렵다.... 구글링 뒤적뒤적.... ㅎㅎ
중요한 부분은 29-39줄인거 같다.
- 함수 answer( ) 에 대해서
31줄 : GET방식으로 m이라는 파라미터에 i를 더해가면서 페이지를 연다.
(→ m값이 바뀔 때마다 새로운 페이지가 열리지만 GET방식을 이용했기 때문에 주소창에 ?m=숫자 가 나오지 않음)
32줄 :
33줄 : run함수로 실행한 어떤 값을 html페이지에 반환 (→문제 페이지에서 password is 뒤 문자)
34줄 : i값 1씩 더해주기
35줄 : run함수로 실행한 어떤 값이 나오면 ... 0.1초 기다리고 answer(i) 함수 실행 (?)
36줄 : run함수로 실행결과 null이 나오면 html페이지에 ? 물음표 반환
- setTimeout함수를 이용해 10초후에 answer함수에 0을 집어넣고 실행
- setTimeout함수 : 지정된 밀리 초 후에 함수를 호출하거나 표현식을 평가 / 1000ms = 1초
개발자도구 콘솔창을 통해 answer함수에 x.responseText 값을 출력하게끔 함수를 변형해서 실행해보았는데 오류나고 실행되지 않았다. ㅠㅠ (개발자도구를 이용한 자바스크립트 실행은 콘솔창에서!)
결국 풀이를 보았당 ㅜㅜ
개발자도구에서 Network 탭을 열어보고 F5를 눌러 새로고침해보면
m 파라미터값이 0부터 32까지 바뀌면서 페이지가 새로고침됨을 알 수 있고 물음표가 나오는 파라미터는 m값이 32임을 알 수 있다.
aview.innerHTML이 x.respondText의 값을 받은거 이므로 페이지에 보이는 그 값은 x.respondText이다.
즉, m파라미터값이 바뀔 때마다의 x.respondText값을 알면 된다.
개발자 도구의 콘솔창을 이용한다.
730d41c6283fa164df218cfced373223이 password로 문제페이지에 각 문자 하나씩 보여줬던 것이다!
플래그값을 입력해서
Clear !!!
아까 실패했던 answer함수를 변형한 코드를 수정하여 다시 해보았다.
오! 결과값이 제대로 잘 나왔다. ㅎㅅㅎ
내 생각엔 m값의 범위를 찾아서 하는 풀이보다 위 코드를 이용해 바로 구하는 법이 더 간편하고 쉬운거 같다.
[질문]
1. 소스코드 33줄에 x.send(null); 인데 왜 null을 보내주는거죠? 무슨 의미인지 의도인지 모르겠어요 ㅠㅠ
2. 소스코드 35줄에 answer함수안에 "+i+"라고 되있는데 answer(i)와 다른 점이 뭐에요??
3. 콘솔창에 다음과 같이 하면 값이 안나오는데 왜 안되는지 모르겠어요 ㅠㅠ
1 2 3 4 5 6 7 8 9 | function answer(i) { x.open('GET','?m='+i,false); x.send(null); x.responseText; // 값 반환하기 i++; if(x.responseText) answer(i); } answer(0); | cs |
[답변]
1. x.send(null)은 get방식으로 데이터를 보낼 때 http프로토콜의 body부분에 데이터가 없기 때문에 null을 보내는 것 입니다. post방식으로 보낸다면 전송할 데이터를 x.send(전송할 데이터) 이런 식으로 사용. (???)
2. answer안에 +i+는 answer(i) 이랑 같은 건데, answer 함수를 또 다른 함수안에서 호출하기 위해 문자열로 넣어주고, i는 자바스크립트 상의 변수이기 때문에 answer(변수) 형태로 만들기 위함입니다. 자세히 보면 "answer(" + i + ")" 라는 것을 알 수 있습니다.
3. 해당 값을 어딘가에 저장하지 않고 그냥 불러온 다음에 날려버리기 때문입니다. 수정한 코드에서 변수 a에 값을 저장했기 때문에 확인할 수 있었던 것입니다.
'웹해킹 > [webhacking.kr] ' 카테고리의 다른 글
[webhacking.kr] challenges4 (0) | 2017.10.23 |
---|---|
[webhacking.kr] challenges6 (0) | 2017.10.20 |
[webhacking.kr] challenges20 (0) | 2017.10.16 |
[webhacking.kr] challenges10 (0) | 2017.10.13 |
[webhacking.kr] challenges12 (0) | 2017.09.25 |