Web2/Challenge-20 문제
자바스크립트의 동작 방식을 분석 -> 폼 데이터를 자동으로 입력하고 제출하는 Client side scripting 문제
1. 문제 분석 (Analysis)
F12를 통해 소스 코드를 확인하면, 캡차 인증을 포함한 폼 제출 로직이 포함되어 있다.
function ck(){
if(lv5frm.id.value=="") { lv5frm.id.value.focus(); return; }
if(lv5frm.cmt.value=="") { lv5frm.cmt.value.focus(); return; }
if(lv5frm.captcha.value=="") { lv5frm.captcha.focus(); return; }
if(lv5frm.captcha.value!=lv5frm.captcha_.value) { lv5frm.captcha.focus(); return; }
lv5frm.submit();
}
제한 시간: 상단에 time limit : 2 second 문구가 있어, 페이지 로드 후 2초 안에 모든 값을 입력하고 제출해야 함
캡차 로직: captcha_라는 이름의 버튼 value에 무작위 문자열이 생성되며, 사용자는 이 값을 captcha 입력창에 똑같이 입력해야 함
검증 과정: ck() 함수는 닉네임, 코멘트, 캡차 값이 비어있는지 확인하고, 특히 입력한 캡차 값과 생성된 값이 일치하는지 대조한 뒤 submit()을 호출
2. 익스플로잇
2초라는 짧은 시간 내에 수동으로 입력하는 것은 어려우므로, 브라우저 콘솔에서 자바스크립트를 실행하여 자동화를 수행
// 1. nickname과 comment에 임의의 값 "admin" 입력
document.lv5frm.id.value = "admin";
document.lv5frm.cmt.value = "admin";
// 2. 캡차 버튼(captcha_)에 생성된 랜덤 value 값을 읽어서 입력창(captcha)에 대입
document.lv5frm.captcha.value = document.lv5frm.captcha_.value;
// 3. 폼 제출 함수 호출 또는 직접 submit
document.lv5frm.submit();
코드 설명:
document.lv5frm.id.value와 cmt.value를 통해 서버가 요구하는 필수 입력값을 채운다.
핵심은 document.lv5frm.captcha_.value를 참조하여 입력하는 것이다.
마지막에 submit()을 실행하면 ck() 함수의 유효성 검사를 거치지 않고 서버로 바로 데이터를 전송하거나, 모든 조건이 충족된 상태로 폼이 제출됨
+ ck()함수의 유효성 검사를 거치지 않는 이유
자바스크립트에서 HTML 폼(Form)을 제출하는 두 가지 방식의 차이 때문에 발생합니다.
결론부터 말씀드리면, form.submit()이라는 메서드(Method)를 직접 호출하면 브라우저는 '사용자가 검증을 마쳤다'고 간주하고 곧바로 서버로 전송하기 때문입니다.
- ck() 함수가 호출되지 않는 이유
제공해주신 HTML 코드를 다시 보면, 제출 버튼이 다음과 같이 되어 있습니다.
HTML
일반적인 흐름: 사용자가 버튼을 클릭(onclick) → ck() 함수 실행 → 함수 내부의 유효성 검사 통과 → 마지막 줄의 lv5frm.submit() 실행.
스크립트 실행 시: 콘솔창에 직접 document.lv5frm.submit()을 입력하면, 버튼의 onclick 이벤트(즉, ck() 함수)를 거치지 않고 폼 객체의 전송 기능만 즉시 실행합니다.
- onsubmit과 submit()의 차이
만약 HTML이 아래와 같은 구조였다면 스크립트로 실행해도 검증을 거쳤을 것입니다.
구분 일반적인 방식 (onsubmit) 현재 문제의 방식 (onclick)
HTML 구조
문제 코드에서 ck() 함수는 '버튼을 눌렀을 때 실행되는 별개의 함수'일 뿐, 폼(Form) 자체에 결속된 필수 검증 절차가 아닙니다.
따라서 우리가 콘솔에서 lv5frm.submit()을 명령하는 것은, "검문소(ck 함수)를 통과해서 정문을 여는 게 아니라, 뒷문(submit 메서드)을 직접 열어버리는 것"과 같습니다.

'wargame > webhacking.kr' 카테고리의 다른 글
| [WebHacking.kr] old-54번 문제 풀이 (Write-up) (0) | 2026.01.12 |
|---|---|
| old-39 (0) | 2025.04.20 |
| old-16 (0) | 2025.04.20 |
| old-26 (0) | 2025.04.20 |
| old-15 (0) | 2025.04.20 |
