[webhacking.kr] 33번 문제 풀이[Python]
💡 Webhacking.kr challenge(old) 33번 문제에 대한 풀이입니다.
문제
33번 문제는 하나의 단계를 풀면 다음 단계의 주소가 나오는 식으로 연결되며 총 10개의 문제로 구성되어 있습니다. 모든 문제를 파이썬 코드로 풀어봤습니다.
33-1
- 문제
<?php if($_GET['get']=="hehe") echo "<a href=???>Next</a>"; else echo("Wrong"); ?>
-
풀이
get method로 hehe 변수를 넘겨줍니다.def solve_1(session): response = session.get("https://webhacking.kr/challenge/bonus-6/?get=hehe") next_link = get_link(response) print("solve 33-1 :",next_link) return next_link
33-2
- 문제
<?php if($_POST['post']=="hehe" && $_POST['post2']=="hehe2") echo "<a href=???>Next</a>"; else echo "Wrong"; ?>
-
풀이
Post method로 ‘post’,’post2’ 변수에 각각 ‘hehe’,’hehe2’를 넘겨줍니다.def solve_2(session,next_link): url = BASE_URL + next_link datas = { 'post' : 'hehe', 'post2' : 'hehe2' } response = session.post(url,data= datas) next_link = get_link(response) print("solve 33-2 :",next_link) return next_link
33-3
- 문제
<?php if($_GET['myip'] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>"; else echo "Wrong"; ?>
-
풀이
get method로 나의 아이피를 넘겨줍니다.def solve_3(session,next_link): url = BASE_URL + next_link params = { 'myip' : ip } response = session.get(url,params=params) next_link = get_link(response) print("solve 33-3 :",next_link) return next_link
33-4
- 문제
<?php if($_GET['password'] == md5(time())) echo "<a href=???>Next</a>"; else echo "hint : ".time(); ?>
-
풀이
현재 시간을 md5로 해시한 값을 보내줍니다def solve_4(session,next_link): url = BASE_URL + next_link current_time = int(time.time()) md5_time = hashlib.md5(str(current_time).encode("ascii")).hexdigest() params = { 'password' : md5_time } response = session.get(url,params=params) next_link = get_link(response) print("solve 33-4 :",next_link) return next_link
33-5
- 문제
<?php if($_GET['imget'] && $_POST['impost'] && $_COOKIE['imcookie']) echo "<a href=???>Next</a>"; else echo "Wrong"; ?>
-
풀이
post method로 데이터를 전송하는데, 매개변수로 ‘imget’, post 데이터로 ‘impost’, 쿠키로 ‘imcookie’를 설정해서 전송해 줍니다.def solve_5(session,next_link): url = BASE_URL + next_link params = {'imget': '1' } datas = {'impost': '1'} cookies = {'imcookie':'1'} response = session.post(url,data=datas,params=params,cookies=cookies) next_link = get_link(response) print("solve 33-5 :",next_link) return next_link
33-6
- 문제
<?php if($_COOKIE['test'] == md5($_SERVER['REMOTE_ADDR']) && $_POST['kk'] == md5($_SERVER['HTTP_USER_AGENT'])) echo "<a href=???>Next</a>"; else echo "hint : {$_SERVER['HTTP_USER_AGENT']}"; ?>
-
풀이
Cookie로는 ‘test’이름으로 나의 ip를 해시한 값을 보내주고, post data로는 ‘kk’이름으로 USER_AGENT값을 해시해서 보내줍니다.def solve_6(session,next_link): url = BASE_URL + next_link cookie_test = hashlib.md5(ip.encode('ascii')).hexdigest() cookies = {'test' : cookie_test} my_user_agent = session.headers['User-Agent'] data_kk = hashlib.md5(my_user_agent.encode('ascii')).hexdigest() data = {'kk':data_kk} response = session.post(url,cookies=cookies,data=data) next_link = get_link(response) print("solve 33-6 :",next_link) return next_link
33-7
- 문제
<?php $_SERVER['REMOTE_ADDR'] = str_replace(".","",$_SERVER['REMOTE_ADDR']); if($_GET[$_SERVER['REMOTE_ADDR']] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>"; else echo "Wrong<br>".$_GET[$_SERVER['REMOTE_ADDR']]; ?>
-
풀이
GET 요청으로 문제에서와 동일하게 ‘.’을 제거한 다음에 전송합니다.def solve_7(session,next_link): url = BASE_URL + next_link replaced_ip = ip.replace('.','') params = {replaced_ip : replaced_ip} response = session.get(url,params=params) next_link = get_link(response) print("solve 33-7 :",next_link) return next_link
33-8
- 문제
<?php extract($_GET); if(!$_GET['addr']) $addr = $_SERVER['REMOTE_ADDR']; if($addr == "127.0.0.1") echo "<a href=???>Next</a>"; else echo "Wrong"; ?>
-
풀이
GET 요청으로 ‘addr’변수에 ‘127.0.0.1’을 넣어서 보내줍니다.def solve_8(session,next_link): url = BASE_URL + next_link params = {'addr' : '127.0.0.1'} response = session.get(url,params=params) next_link = get_link(response) print("solve 33-8 :",next_link) return next_link
33-9
- 문제
<?php for($i=97;$i<=122;$i=$i+2){ $answer.=chr($i); } if($_GET['ans'] == $answer) echo "<a href=???.php>Next</a>"; else echo "Wrong"; ?>
-
풀이
파이썬으로 문제에서 제시한 로직과 동일하게 구현한 다음 보내줍니다.def solve_9(session,next_link): url = BASE_URL + next_link answer = '' for i in range(97,123,2): answer += chr(i) params = {'ans':answer} response = session.get(url,params=params) next_link = get_link(response) print("solve 33-9 :",next_link) return next_link
33-10
- 문제
<?php $ip = $_SERVER['REMOTE_ADDR']; for($i=0;$i<=strlen($ip);$i++) $ip=str_replace($i,ord($i),$ip); $ip=str_replace(".","",$ip); $ip=substr($ip,0,10); $answer = $ip*2; $answer = $ip/2; $answer = str_replace(".","",$answer); $f=fopen("answerip/{$answer}_{$ip}.php","w"); fwrite($f,"<?php include \"../../../config.php\"; solve(33); unlink(__FILE__); ?>"); fclose($f); ?>
-
풀이
파이썬으로 문제에서 제시한 로직과 동일하게 구현한 다음 보내줍니다. 하나 다른점은 파이썬은 4/2가 2.0으로 표시되고, php는 2로 표시되어 결과가 달라서 이부분만 다르게 구현해 줍니다.def solve_10(session,next_link): url = BASE_URL + next_link session.get(url) my_ip = ip i = 0 while(len(my_ip) > i): my_ip = my_ip.replace(str(i),str(ord(str(i)[0]))) i +=1 my_ip = my_ip.replace('.','') my_ip = my_ip[0:10] answer = int(my_ip) *2 # php는 4/2가 2이고, python은 2.0이다. answer = int(int(my_ip) /2) if int(my_ip) %2 == 0 else int(my_ip) / 2 answer = str(answer).replace(".","") flag_path = url[:-11]+ '/answerip/{}_{}.php'.format(answer,my_ip) response = session.get(flag_path) print(response.text)
댓글남기기