33번에 들어가게 되면 바로 소스코드를 확인할 수 있습니다.
<hr>
Challenge 33-1<br>
<a href=index.txt>view-source</a>
<hr>
<?php
if($_GET['get']=="hehe") echo "<a href=???>Next</a>";
else echo("Wrong");
?>
소스코드를 확인해보면 get이라는 인자에 hehe라는 값을 get 방식으로 전달하면 다른 부분으로 이동하는 것 같습니다. 일단 넣어보겠습니다.
인자로 넣어주면 일단 Wrong이 Next로 바뀌었습니다. 다음으로 넘어가보겠습니다.
다시 소스코드를 확인해보아야 할 것 같습니다.
<hr>
Challenge 33-2<br>
<a href=lv2.txt>view-source</a>
<hr>
<?php
if($_POST['post']=="hehe" && $_POST['post2']=="hehe2") echo "<a href=???>Next</a>";
else echo "Wrong";
?>
이번에 post방식으로 전달하는 인자의 값을 소스코드의 조건처럼 맞춰주어야 할 것 같습니다. Post방식의 인자는 burp suite를 이용해 넘겨주겠습니다.
해당 사이트를 burp suite로 잡은 화면인데 사이트가 get방식으로 설정되어 있어서 처음 부분을 수정하고 인자를 전달하면 될 줄 알았는데 실패했습니다. 그래서 구글링을 좀 해보니 친절하게 설명이 되어 있는 블로그 글을 발견했고, 링크를 남깁니다. 아래의 링크를 참고하면 자세히 설명되어 있습니다.
이 부분이 response 헤더 파일일고 get방식으로 설정되어 있는 것을 알 수 있습니다.
링크를 참고하여 post방식으로 인자를 전달하였습니다.
이렇게 console에 추가한 후 network로 가면
lv2.php가 하나 더 생기는 것을 볼 수 있고 새로 추가된 lv2.php의 헤더와 response를 보면
이렇게 알 수 있습니다. 여기서 살짝 삽질을 한게 전 새로고침을 하면 바로 넘어가는 줄 알았는데 그것이 아니라 response의 결과의 33.php로 직접 이동해야 다음 문제의 페이지로 넘어갈 수 있었습니다.
이번에도 같습니다. 바로 소스코드 확인하겠습니다.
<hr>
Challenge 33-3<br>
<a href=33.txt>view-source</a>
<hr>
<?php
if($_GET['myip'] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
myip라는 인자의 값이 현재 저의 ip와 같아야 하는 것 같습니다. 그렇다면 ip를 확인해보겠습니다.
ip 주소는 이 사이트를 이용해서 얻었습니다.
이렇게 전달하면
다음으로 넘어갈 수 있습니다.
바로 소스코드 보겠습니다.
<hr>
Challenge 33-4<br>
<a href=l4.txt>view-source</a>
<hr>
<?php
if($_GET['password'] == md5(time())) echo "<a href=???>Next</a>";
else echo "hint : ".time();
?>
password의 값이 time()함수의 값의 md5 암호화한 값이어야 하는 것 같습니다. 그리고 time함수의 값을 힌트로 출력해주기 때문에 이 값을 암호화해서 전달해 보겠습니다.
www.md5online.org/md5-encrypt.html
아래의 링크를 이용해서 암호화해주었습니다.
이렇게 보내면 될 줄 알았는데 안 되네요... 아마 time함수로 실시간으로 초단위계산되는 것 같습니다. 그렇다면 파이썬 코드를 이용해서 전달을 해주어야 할 것 같습니다. 이것 역시 결과를 받아서 출력한 후에 다음 페이지의 소스코드 이름을 확인해야 할 듯 합니다.
사용한 파이썬 코드와 결과값입니다.
import requests
import time
import hashlib
url='https://webhacking.kr/challenge/bonus-6/l4.php?'
header={'Cookie':'PHPSESSID=kumrcrat0ij53lt23vrho3j3vh'}
t=int(time.time())
t=hashlib.md5(str(t)).hexdigest()
query='password={}'.format(t)
result = requests.get(url+query, headers = header)
print(result.text)
결과를 확인해보니 다음 페이지는 md555.php입니다.
바로 소스코드 확인하겠습니다.
<hr>
Challenge 33-5<br>
<a href=md555.txt>view-source</a>
<hr>
<?php
if($_GET['imget'] && $_POST['impost'] && $_COOKIE['imcookie']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
역시 주어진 조건 을 만족해야 합니다. 조건들이 계속 쉽기 때문에 앞으로 큰 변경점이 없을경우 조건에 대한 설명은 생략하겠습니다.
이번에도 파이썬 코드를 이용했습니다.
import requests
url='https://webhacking.kr/challenge/bonus-6/md555.php?imget=1'
data={'impost':'1'}
cookie={'imcookie':'1'}
result = requests.post(url, data=data, cookies = cookie)
print(result.text)
다음 페이지는 gpcc.php인것 같습니다.
<hr>
Challenge 33-6<br>
<a href=gpcc.txt>view-source</a>
<hr>
<?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']}";
?>
6번째 단계입니다. 이 부분도 아마 파이썬 코드를 이용하면 될 것 같습니다.
import requests
import hashlib
url='https://webhacking.kr/challenge/bonus-6/gpcc.php'
ip='180.224.43.160'
ip=hashlib.md5(str(ip)).hexdigest()
agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 11_3_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36'
agent=hashlib.md5(str(agent)).hexdigest()
data={'kk':agent}
cookie={'test':ip}
result = requests.post(url, data=data, cookies = cookie)
print(result.text)
이 코드로 인자를 전달했는데
이런 결과를 보고 당황했는데 찾아보니 agent의 값을 파이썬 코드를 사용했을 경우에는 파이썬 결과로 바꿔주어야 한다고 합니다.
수정해 주었더니 제대로된 결과가 나왔습니다.(수정은 직접 해보는 것도 좋을 거 같습니다.)
다음 페이지로 이동 후 소스코들 보겠습니다.
<hr>
Challenge 33-7<br>
<a href=wtff.txt>view-source</a>
<hr>
<?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']];
?>
str replace함수를 통해 문자를 바꿔주는 것 같습니다. 소스코드를 보면 ip에서 .을 그냥 없애주는 것 같습니다. 그래서 위에서 소개한 사이트에서 자신의 ip를 확인한 뒤 .을 뺀 값을 인자와 데이터로 넣어주면 될 것 같습니다.
ex) 127.0.0.1일 경우 127001=127001
<hr>
Challenge 33-8<br>
<a href=ipt.txt>view-source</a>
<hr>
<?php
extract($_GET);
if(!$_GET['addr']) $addr = $_SERVER['REMOTE_ADDR'];
if($addr == "127.0.0.1") echo "<a href=???>Next</a>";
else echo "Wrong";
?>
이 정도 소스 코드는 충분히 해석할 수 있을 거라고 생각합니다. 순간 헷갈릴 수 있지만 결국 addr값을 127.0.0.1로 전달하라는 뜻입니다.
<hr>
Challenge 33-9<br>
<a href=nextt.txt>view-source</a>
<hr>
<?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";
?>
이 부분도 같습니다. for문의 결과값으로 나오는 문자열을 ans로 전달하면 되는데 이 결과값은 파이썬 코드를 이용해 찾아서 넘겨주었습니다.
ch=''
for i in range(97,123,2):
ch+=chr(i);
print(ch)
<hr>
Challenge 33-10<br>
<a href=forfor.txt>view-source</a>
<hr>
<?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);
?>
solve가 있는 것 보니 드디어 마지막 단계인 것 같습니다. (이게 어려운 문제는 아닌데... 너무 단계가 많습니다...)
소스코드를 보면 현재 저의 ip를 가져와서 문자열 변환과 계산등을 수행하는데 이 소스코드는 php이기 때문에 그냥 가져와서 붙여넣은 다음 결과값을 echo로 출력하면 됩니다. 아마 이 문제를 푸는 분들이라면 로컬 서버는 가지고 있을 것이기 때문에 자신의 로컬서버에 파일을 만들어서 웹페이지로 출력해보면 됩니다.
<?php
$ip='자신의 ip';
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);
print($answer);
echo "answerip/{$answer}_{$ip}.php";
?>
위의 코드에 자신의 ip코드를 넣어서 결과값을 확인 한뒤 아래의 링크처럼 보내주면 문제가 드디어 풀립니다,
결과값을 이용해 위 링크처럼 url을 입력하면 문제가 풀립니다.
'웹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr 35번 (0) | 2021.03.07 |
---|---|
webhacking.kr 34번 (0) | 2021.03.02 |
webhacking.kr 32번 (0) | 2021.02.23 |
webhacking.kr 29번 (0) | 2021.02.23 |
webhacking.kr 28번 (0) | 2021.02.22 |