본문 바로가기

Wargame(hacking)/webhacking.kr

Webhacking.kr : old-33

Write-Up

 

Challenge 33-1

<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를 전달해 준다. 

https://webhacking.kr/challenge/bonus-6/?get=hehe

 

 

Challenge 33-2

 

<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 형식으로 값을 전달해준다. 

 

그림 1

 

Challenge 33-3

 

<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";
?>

 

https://webhacking.kr/challenge/bonus-6/33.php?myip=나의 IP 찾기

 

Challenge 33-4

 

<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();
?>

 

해당 Challenge를 해결하기 위해, 아래와 같은 파이썬 코드를 작성해 줬다. 

 

request

import hashlib
import time
import requests
import math

num = math.trunc(time.time())
result = hashlib.md5(str(num).encode()).hexdigest()

r= requests.get('https://webhacking.kr/challenge/bonus-6/l4.php?password='+result)
print(r.text)

 

response

<hr>
Challenge 33-4<br>
<a href=l4.txt>view-source</a>
<hr>
<a href=md555.php>Next</a>

 

Challenge 33-5

 

<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";
?>

 

아래와 같이 모든 요건을 충족시킨 요청을 보낸다. 

 

POST /challenge/bonus-6/md555.php?imget=1 HTTP/1.1
Host: webhacking.kr
Cookie: PHPSESSID=7t10nguseht4vvhvd8cungvrjf;imcookie=1
Cache-Control: max-age=0
( ~ 생략 ~ )

impost=1

 

Challenge 33-6

 

<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']}";
?>

 

아래의 파이썬 코드를 통해 MD5 해시 변환을 해주었다. 이전에, 온라인 해시 변환기를 이용했었는데 대문자이냐 소문자냐에 따라, 정답이 판별되기에, 이 부분을 주의해야 한다. 

 

num1 = "hint 입력"
res= hashlib.md5(str(num1).encode()).hexdigest()
print(res)

 

Challenge 33-7

 

<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(".","",$_SERVER['REMOTE_ADDR']) 함수에 의해, IP주소에 들어가는 . 이 공백으로 치환된다

 

https://webhacking.kr/challenge/bonus-6/wtff.php?121본인IP0=121본인IP0

 

Challenge 33-8

 

<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";
?>

 

https://webhacking.kr/challenge/bonus-6/ipt.php?addr=127.0.0.1

 

 

Challenge 33-9

 

<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";
?>

 

아래 파이썬 코드를 통해 ans 파라미터의 인자 값으로 들어 갈 값을 구해준다. 

 

res = ""
for i in range(97,123,2):
    res+=chr(i)
print(res)

 

Challenge 33-10

 

<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);
?>

 

Challenge에서 요구되는 대로, php 코드를 작성해 값을 구해준다. 

 

<?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);
echo $ip;
echo '-----';
echo $answer;
?>

 

처음에는 파이썬 코드를 짜서 돌렸으나, 값이 다르게 나왔다. 그래서 php 코드 그대로 돌려 값을 얻었고, 아래와 같이 문제를 해결할 수 있었다. 

 

그림 2