[WARGAME][webhacking.kr] old-33

jckim22·2022년 11월 19일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
87/114

1번

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

1번문제는 간단하게 get 파라미터로 hehe를 페이로드로 보내면 됐다.

2번

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

2번은 아래처럼 post와 post2를 동시에 post요청으로 보내면 됐다.

먼저 파이썬 스크립트로 요청을 보내고 body를 봤더니 next가 있다.

버프슈트로 post=hehe&post2=hehe2로 보내서 풀어주자.

3번

<?php
if($_GET['myip'] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>

3번은 나의 ip주소를 get파라미터로 넣어주면 된다.

4번

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

4번은 현재시각을 md5로 해시한것을 get파라미터로 받으면되는데 시간을 좀 띄워놓고 복붙하고 연타하면 통과할 수 있다.

5번

<?php
if($_GET['imget'] && $_POST['impost'] && $_COOKIE['imcookie']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>

5번은 쿠키와 get post를 함께 받는다.
아래 쿠키를 설정해주고

아래처럼 get요청도 해주고

마지막으로 버프슈트로 post요청을 한다.

cookie,get,post가 설정되어 있기만 해도 성공할 수 있다.

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

6번은 user-agent를 md5로 해시한 값을 post, 나의 ip를 md5로 해시한 값을 쿠키로 넣는다.
친절하게 나의 user-agent를 보여준다.

아래처럼 해시한 값을 메모해놓고

쿠키에 test라는 key로 넣고 패킷을 잡아 post요청도 해주면서 성공할 수 있다.

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

replace에 대한 이해의 문젠데 처음에 실수로 get 파라미터가 replace되는 줄 알고 아래처럼 ..을 했다.
역시나 실패했다.
server[remoteaddr]이 replace를 받기에 xxxxxxxxxxx와 같은 형식이 나올 것이다.

그래서 아래처럼 12312312312=12312312312 같은 형식으로 해주면 성공할 수 있다.

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

8번은 addr이라는 key의 value로 로컬호스트 ip를 받는다.
아래처럼 해주면 성공할 수 있다.

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

9번은 아스키 코드 이용한 문자를 97부터 2칸씩 뛰며 문자열로 담아준 값을 get파라미터로 받는데
그 값을 구하기 위해 파이썬에서 아래 코드를 짰다.

결과 값은 아래와 같다.

아래처럼 파라미터로 보내주면 성공할 수 있다.

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

10번은 나의 ip주소를 이용한 이름을 파일이름으로한 flag가 담긴 파일을 숨겨놓았다.
연산이 있는데 그대로 내 로컬 서버에 돌려보았다.
마지막 fopen을 print로 해주었다.

그게 아래 코드이다.

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <?php

    $ip = "my 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}.php";
    ?>
</body>

</html>

바로 s.php로 들어가보니 아래와 같이 나왔다.

이 경로로 가주게 되면


solve할 수 있다.

profile
개발/보안

0개의 댓글