본문 바로가기
[웹해킹]/[Webhacking.kr]

[Webhacking.kr] 20번

by Hevton 2020. 9. 30.
반응형

재미있는 문제다.

 

문제 입장 시 나오는 폼

입장시 위와같은 폼이 있고

중요해 보이는 설명

이런 시간제한에 대한 설명이 있다.

 

소스보기를 해보면

<html>
<head>
<title>Challenge 20</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
input { background:silver; color:black; font-size:9pt; }
</style>
</head>
<body>
<center><font size=2>time limit : 2 second</font></center>
<form name=lv5frm method=post>
<table border=0>
<tr><td>nickname</td><td><input type=text name=id size=10 maxlength=10></td></tr>
<tr><td>comment</td><td><input type=text name=cmt size=50 maxlength=50></td></tr>
<tr><td>captcha</td><td><input type=text name=captcha><input type=button name=captcha_ value="xr01L0z1Ol" style="border:0;background=lightgreen"></td></tr>
<tr><td><input type=button value=Submit onclick=ck()></td><td><input type=reset value=reset></td></tr>
</table>
<script>
function ck(){
  if(lv5frm.id.value=="") { lv5frm.id.focus(); return; }
  if(lv5frm.cmt.value=="") { lv5frm.cmt.focus(); return; }
  if(lv5frm.captcha.value=="") { lv5frm.captcha.focus(); return; }
  if(lv5frm.captcha.value!=lv5frm.captcha_.value) { lv5frm.captcha.focus(); return; }
  lv5frm.submit();
}
</script>
</body>
</html>

 

각 칸이 비어있지 않고, captcha 칸에는 매 번 무작위로 생성되어 나타나는 것 같은 문자열을 그대로 입력해야 할 것 같다.

근데 시간제한이 있다니, 다른 단서가 더 있을 것 같아서 쿠키를 확인해봤다.

 

쿠키에 st라는 이름의 1601407330 값이 존재했다. 딱 보아하니 시간값에 대한 단서겠거니 생각을 할 수 있었고

곧바로 자바로 System.out.println(System.currentTimeMillis());를 찍었더니 1601407330490 값이 나온다

쿠키값                 : 1601407330
currentTimeMillis()값 : 1601407330490

 

System.currentTimeMillis()은 아시다시피 밀리세컨드 단위로 시간값을 반환하는데, 쿠키값에 존재하는 값은 초 단위의 값인 걸 알 수 있었다. 나누기 1000을 한 값인 것이다.

 

이 쿠키값은 시간값이니만큼 새로고침을 할 때마다 계속 증가했다.

그리고 나는 이 쿠키값의 흐름에 대해, 즉 문제에서 이 쿠키값을 어떻게 이용하여 Time Limit에 대해 판단하고 있을지 잠시 생각을 해봤다.

 

그리고 주어진 사실과 조건들을 기반으로 이런 생각이 들었다.

 

아마 서버에 접속을 할 때마다, 서버측에서 System.currentTimeInMillis를 쿠키값으로 보내주는 것 같고.

클라이언트 측에서 Submit을 통해 데이터를 전송하면 해당 쿠키값과 현재 System.currentTimeMillis를 다시 비교하여

2초 이내에 들면 Time Limit안에 드는 거라고 계산하지 않았을까?

 

곧바로 Java 프로그래밍을 통해 매 초 System.out.println(System.currentTimeMillis()); 를 실행하는 코드를 작성했고

문제의 폼을 미리 작성해놨다. 그리고 현재 시간값에서 10초정도의 넉넉한 시간값을 쿠키값으로 넣어준 뒤 기다렸다. 언제까지?

바로 내가 쿠키값에 넣어둔 시간값이 내가 짠 프로그램에서 출력되는 시간값보다 2초 작은 범위 안에 들 때까지.

 

그리고 타이밍에 맞게 submit을 눌렀다.

결과는 기대한대로다.

타이밍이 생명이었던 문제였다.

반응형

'[웹해킹] > [Webhacking.kr]' 카테고리의 다른 글

[Webhacking.kr] 23번  (0) 2020.10.03
[Webhacking.kr] 21번  (0) 2020.10.02
[Webhacking.kr] 19번  (0) 2020.09.28
[Webhacking.kr] 18번  (0) 2020.09.28
[Webhacking.kr] 17번  (0) 2020.09.28