Level 33
<hr> Challenge 33-1<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s> <?=$_SERVER[PHP_SELF]?>s</a>"); </script> <hr> <? if($_GET[get]=="hehe"){ echo("<a href=###>Next</a>"); }else{ echo("Wrong"); } ?>
get이 "hehe"가 되면 Next라는 하이퍼링크가 생성된다.
<? if($_POST[post]=="hehe" && $_POST[post2]=="hehe2"){ echo("<a href=##>Next</a>"); }else{ echo("Wrong"); } ?>
lv2
페이지로 넘어가면서 또다시 코드가 주어졌다. 이번엔 post방식으로 post1과 post2를 입력받는다.
따라서 개발자 모드를 이용하여 해당 페이지의 소스코드를 수정하였다.
그럼 위와 같이 post방식으로 값을 넘길 수 있게 된다. post에는 "hehe", post2에는 "hehe2"를 넘겨주자.
<? if($_GET[myip]==$_SERVER[REMOTE_ADDR]) { echo("<a href=##.php>Next</a>"); } else { echo("Wrong"); } ?>
lv3
이번엔 myip값이 REMOTE_ADDR과 같으면 된다. 즉 자신의 ip를 넣으면 된다.
lv4
힌트로 위와 같은 숫자가주어졌다.
<? if($_GET[password]==md5(time())) { echo("<a href=###>Next</a>"); } else { echo("hint : ".time()); } ?>
password에 time()으로 받아온 값을 md5로 인코딩한 값이 들어면 될 듯하다. 힌트로 주어지는 값은 현재 시간을 가져오는 것 같다. 페이지를 새로고침 할 때 마다 값이 바뀐다. 1초마다 값이 1씩 증가하기 때문에 미리 미래의 시간을 md5로 인코딩한 다음 그 시간이 됬을 때 값을 보내야 할 것 같다.
<? if($_GET[imget] && $_POST[impost] && $_COOKIE[imcookie]) { echo("<a href=###>Next</a>"); } else { echo("Wrong"); } ?>
이번엔 GET, POST, COOKIE 삼총사가 등장했다. 각 요소을 특정 값과 비교하진 않는 것으로 보아. 모두 같은 같을 넣어주면 될 듯하다.
imget값은 get 방식이므로 그냥 주소값으로 넣어 주었다.
쿠키값도 새로 만들어 주자.
lv6
<? 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]"); } ?>
Next가 또있네......😫
test 쿠키를 만들어서 내 아이피를 md5로 인코딩한 값을 넣고, kk에는 HTTP_USER_AGENT를 md5로 인코딩한 값을 POST방식으로 보내면 될듯 하다.
<form method="post" action="gpcc.php"> POST <input type="text" name="kk"> <input type="submit" value="Submit"> </form>
먼저 아이피 md5 : [자신의 아이피 md5인코딩 한 값]
http_user_agent md5 : 26fa100e267c9b76ccf6f6f2153de78d
lv7 .... 💢
<? $_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]]); } ?>
단순히 내 아이피에서 '.'을 공백으로 바꾸고 그것을 이름으로 하여 같으면 된다.
lv8
<? extract($_GET); if(!$_GET[addr]) $addr=$_SERVER[REMOTE_ADDR]; if($addr=="127.0.0.1") { echo("<a href=###>Next</a>"); } else { echo("Wrong"); } ?>
아무리 봐도 200점짜리 문제 하나로 뽕을 뽑으려는 것 같다.
GET으로 받은 addr이 "127.0.0.1"이면 된다. (어째... 난이도가 점점 쉬워진다...😒)
lv9
<? for($i=97;$i<=122;$i=$i+2){ $ch=chr($i); $answer.=$ch; } if($_GET[ans]==$answer){ echo("<a href=###>Next</a>"); }else{ echo("Wrong"); } ?>
i 값이 97부터 2씩 증가하면서 122까지 문자열을 answer에 넣는다. 가 문자열을 넣어주면 된다.
직접 세기 귀찮으니 또 컴퓨터에 일을 시키자.
string = "" for x in range(97, 123, 2): string += chr(x) print string # acegikmoqsuwy
lv10
<? $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); @mkdir("answerip/$ip"); $answer=$ip*2; $answer=$ip/2; $answer=str_replace(".","",$answer); $pw="###"; $f=fopen("answerip/$ip/$answer.$ip","w"); fwrite($f,"Password is $pw\n\nclear ip : $_SERVER[REMOTE_ADDR]"); fclose($f); ?>
드디어 next가 안보인다.
ip값에 내 아이피 값을 넣고, for문을 통해 0~ip길이만큼 하나씩 ascii코드로 변경하여 ip에 넣는다.
그리고 10길이 만큼만 ip에 저장한다. 그리고 해당 이름으로 answerip에 디렉토리를 만들고 해당 폴더 안에 password가 담긴 파일을 만들어 넣는다.
즉, 우리는 폴더 이름을 알아내어 파일을 열어보면 될듯 하다. 위 과정이 귀찮으니 컴퓨터에 시키자. ㅋㅋㅋ
<? $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($answer); echo('\n'); echo($ip); ?>
$ip : [자신 아이피넣은 결과값]
$answer : [결과값]
http://webhacking.kr/challenge/bonus/bonus-6/answerip/$ip/$answer.$ip