<?php
if($_GET['get']=="hehe") echo "<a href=???>Next</a>";
else echo("Wrong");
?>
1번문제는 간단하게 get 파라미터로 hehe를 페이로드로 보내면 됐다.
<?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로 보내서 풀어주자.
<?php
if($_GET['myip'] == $_SERVER['REMOTE_ADDR']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
3번은 나의 ip주소를 get파라미터로 넣어주면 된다.
<?php
if($_GET['password'] == md5(time())) echo "<a href=???>Next</a>";
else echo "hint : ".time();
?>
4번은 현재시각을 md5로 해시한것을 get파라미터로 받으면되는데 시간을 좀 띄워놓고 복붙하고 연타하면 통과할 수 있다.
<?php
if($_GET['imget'] && $_POST['impost'] && $_COOKIE['imcookie']) echo "<a href=???>Next</a>";
else echo "Wrong";
?>
5번은 쿠키와 get post를 함께 받는다.
아래 쿠키를 설정해주고
아래처럼 get요청도 해주고
마지막으로 버프슈트로 post요청을 한다.
cookie,get,post가 설정되어 있기만 해도 성공할 수 있다.
<?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요청도 해주면서 성공할 수 있다.
<?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 같은 형식으로 해주면 성공할 수 있다.
<?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를 받는다.
아래처럼 해주면 성공할 수 있다.
<?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파라미터로 받는데
그 값을 구하기 위해 파이썬에서 아래 코드를 짰다.
결과 값은 아래와 같다.
아래처럼 파라미터로 보내주면 성공할 수 있다.
<?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할 수 있다.