재미있는 문제다.
입장시 위와같은 폼이 있고
이런 시간제한에 대한 설명이 있다.
소스보기를 해보면
<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 |