Wargame/Webhacking.kr

<Webhacking.kr> old-20

지우친구 웅이 2021. 12. 2. 13:12

old-20

닉네임과 코멘트 그리고 captcha를 입력하게 되어있다.

time limit가 2초인 것으로 보아 2초안에 제출하라는 것 같다.

 

페이지 소스 코드를 살펴보면

<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="qV4268PPBp" 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>

 

ck() 함수를 살펴보면

모든 입력 칸이 비어있으면 안된다.

그리고 captcha는 captcha_의 값과 같아야만 한다.

위 행동을 2초안에 직접 입력하기는 굉장히 힘들다.

 

그래서 python의 selenium을 이용해 문제를 해결했다.

import requests
from selenium import webdriver

# 사용중인 크롬의 버전과 같은 버전의 chromedriver를 받아 python 코드의 위치와 같게했음
driver = webdriver.Chrome("./chromedriver")
driver.implicitly_wait(3)
driver.get("https://webhacking.kr/login.php")

# 로그인
driver.find_element_by_name('id').send_keys('아이디')
driver.find_element_by_name('pw').send_keys('비밀번호')
driver.find_element_by_class_name('submit').click()

driver.get("https://webhacking.kr/old.php")
driver.get("https://webhacking.kr/challenge/code-4/")

# nickname 입력
driver.find_element_by_name('id').send_keys('woong')
# comment 입력
driver.find_element_by_name('cmt').send_keys('hi')
# captcha_ 값 구하기
value = driver.find_element_by_name('captcha_').get_attribute('value')
# captcha 입력
driver.find_element_by_name('captcha').send_keys(value)
# submit 버튼 클릭
driver.find_element_by_xpath('/html/body/form/table/tbody/tr[4]/td[1]/input').click()

 

또 다른 방법으로

개발자 도구(F12)의 콘솔 창에

적어 놓고(줄 바꿈은 Shift + Enter)

새로고침 후 2초안에 콘솔 창에서 엔터를 누르는 것이다.