webhacking.kr 33번 풀이

julia·2021년 3월 29일
0
post-thumbnail

스터디 3주차, 점점 바빠지는데 문제 난이도는 높아지고 머리가 터질 것 같다. 그치만 꼭 해내고 말거임

💡 33번 문제 풀이

  • 1단계
<?php
if($_GET['get']=="hehe") echo "<a href=???>Next</a>";
else echo("Wrong");
?>

https://webhacking.kr/challenge/bonus-6/?get=hehe
url수정만 해주면 된다.
엥 ㅎㅎ 문제 왜이래>< 라고 좋아했지만 새끼문제가 10문제일거라곤 꿈에도 몰랐다ㅋㅋㅋㅋ(다 정말 쉽긴했지만 뭔가 끈기를 테스트하는 문제같았다)

  • 2단계
<?php
if($_POST['post']=="hehe" && $_POST['post2']=="hehe2") echo "<a href=???>Next</a>";
else echo "Wrong";
?>

post 값을 넘겨주어야 하니 html을 편집한다.

<form action="lv2.php" method="post">
    <input type="text" name="post" value="hehe">
    <input type="text" name="post2" value="hehe2">
    <input type="submit" value="submit">
</form>

값을 이미 넣어주어서 그냥 섭밋만 누르면 풀린다.

  • 3단계
<?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주소

https://findip.kr/ 에서 공인 ip를 쉽게 찾을 수 있다.

  • 4단계

hint : 1616959562
새로고침할 때마다 힌트 값이 바뀌고, 밑의 php코드를 보니 힌트가 시간값이라는 걸 알 수 있다. 이를 인코딩해야하는데, 시간은 계속 가기 때문에

<?php
if($_GET['password'] == md5(time())) echo "<a href=???>Next</a>";
else echo "hint : ".time();
?>

시간을 넉넉히 잡아 md5 인코딩, 새로고침 계속해서 시간이 동일해지면 next가 보인다

  • 조금 헷갈렸던 5단계
<?php
if($_GET['imget'] && $_POST['impost'] && $_COOKIE['imcookie']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>


우선 쿠키를 생성해주고(path값도 정확하게 입력해야 한다), html을 편집해준다. 이때 get과 post를 동시에 보내야하기 때문에 폼 action에 주소를 미리 다듬어 넣어주어야 하는 것이다.

<form action="md555.php?imget=yewon" method="post">
    <input type="text" name="impost">
    <input type="submit" value="submit">
</form>
  • 6단계

hint : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.57

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

ip 주소를 md5 인코딩하여 새로 생성한 test 쿠키 값에 넣어준다.

<form action="gpcc.php" method="post">
    <input type="text" name="kk">
    <input type="submit" value="submit">
</form>

폼을 생성해주고, 힌트에 있던 글자들을 md5 인코딩해 값을 집어넣는다.

  • 너무 쉬운 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']];
?>

ip주소에서 . 을 뺀 값을 주소에 적어주면 끝
ex) /wtff.php?1111111=1111111

  • 쉬어가는 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";
?>

/ipt.php?addr=127.0.0.1 을 url에 입력

  • 더 쉬어가는 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";
?>

아스키코드를 변환해 ?ans=acegikmoqsuwy 적어주면 끝

  • 대망의 마지막
<?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);
?>

너무 정신 없으니
http://phptester.net/ 에서 코드를 조금 다듬어서 돌려보았다.

<?
$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("answerip/$answer/$ip");
?>

answerip/값/값
이렇게 나오는데 이를 answerip/값_값.php 로 만들어서 url에 적어주면 된다.
드디어 33번 한 문제 끝 ...ㅎㅎ 어렵진 않았는데 너무 길어서 험난했다 아주ㅋㅋㅋ쿠ㅜㅜ

😎 느낀점

이런 문제가 또 있으면 너무 속상할 것 같다..
정말 누구나 풀 수 있는 문제였지만! 200점을 받기 위해, 끝까지 한문제를 끌고 갈 수 있는 인내를 지녀야하며 아는 내용도 계속해서 반복해야한다는 걸 깨달았다.

profile
Move Forward

0개의 댓글

관련 채용 정보