webhacking.kr 33번
문제 화면 index.phps내용을 보도록 하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <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"); } ?> | cs |
index.php에 내용이며 get파라미터에 값이 hehe일 경우 a태그가 나타난다.
성공
두번째 문제 lv2.phps를 보도록 하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <hr> Challenge 33-2<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? if($_POST[post]=="hehe" && $_POST[post2]=="hehe2") { echo("<a href=##>Next</a>"); } else { echo("Wrong"); } ?> | cs |
post, post2 파라미터에 값이 각 각 hehe, hehe2일 경우 a태그를 생성하고있다.
여기서 post방식으로 값을 전달하는 방식은 간단하다 개발자 도구에서 html코드를 작성하면 된다.
이런식으로 html코드를 작성하면
입력 폼이 생기고 각 각 post= hehe, post2=hehe2 또는
input type="text" name"post" value="hehe" 이런식으로 값을 지정해서 submit 할 수도 있다.
성공
33.phps를 보도록 하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <hr> Challenge 33-3<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? if($_GET[myip]==$_SERVER[REMOTE_ADDR]) { echo("<a href=##.php>Next</a>"); } else { echo("Wrong"); } ?> | cs |
myip 파라미터에 공인ip를 받고있다 자세한 소스코드풀이는 그동안 많이 해온 로직이기 때문에 생략
성공
hint가 보이고 hint는 time값 같다 l4.phps를 보도록 하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <hr> Challenge 33-4<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? if($_GET[password]==md5(time())) { echo("<a href=###>Next</a>"); } else { echo("hint : ".time()); } ?> | cs |
password 파라미터에 md5로 암호화한 time값이 똑같아야 a태그를 생성한다.
tip) time값이 잘 안맞을 수 있기때문에 +10~15초로 설정 후 새로고침
ㅅ성공
md555.phps를 보도록 하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <hr> Challenge 33-5<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? if($_GET[imget] && $_POST[impost] && $_COOKIE[imcookie]) { echo("<a href=###>Next</a>"); } else { echo("Wrong"); } ?> | cs |
get으로 imget , post로 impost , 쿠키로 imcookie가 존재해야 a태그가 생성되는 문제이다
post 방식은 위와 마찬가지로 개발자도구를 이용
쿠키값은 editthiscookie를 이용했으며
get방식은 burpsuite프록시 툴을 이용했다.
tip)애초에 그냥 버스슈트이용해서 풀어도 되는 문제다
성공
gpcc.phps를 보도록 하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <hr> Challenge 33-6<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? 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]"); } ?> | cs |
cookie 이름이 test에 값이 ip를 md5 hash로 암호화한 값이 있어야 하고
post방식의 kk파라미터에 클라이언트의 정보가 md5 hash로 암호화되서 서버로 전달되어야한다.
성공
wtff.phps를 보도록 하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <hr> Challenge 33-7<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? $_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]]); } ?> | cs |
$_SERVER[REMOTE_ADDR](공인ip)를 .를 공백으로 치환후 $$_SERVER[REMOTE_ADDR]에 다시 저장하고
get으로 입력 받은 $_SERVER[REMOTE_ADDR]값 과 $_SERVER[REMOTE_ADDR]가 일치해야 성공한다.
즉 ?ip=ip
성공
ipt.phps를 보도록 하자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <hr> Challenge 33-8<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? extract($_GET); if(!$_GET[addr]) $addr=$_SERVER[REMOTE_ADDR]; if($addr=="127.0.0.1") { echo("<a href=###>Next</a>"); } else { echo("Wrong"); } ?> | cs |
get방식으로 addr 파라미터에 값이 없다면 ip를 $addr에 대입하고
만약 addr이 127.0.0.1이라면 문제 해결
성공
nextt.phps를 보도록 하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <hr> Challenge 33-9<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? 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"); } ?> | cs |
97로 시작하고 chr함수를 쓰는거보니 아스키코드를 이용한거같다
get 방식으로 ans파라미터에 값이 $answer에 값이 랑 같으면 해결
그냥 이대로 코딩
성공
forfor.phps를 보도록 하자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <hr> Challenge 33-10<br> <script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF]?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script> <hr> <? $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); ?> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <?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."<br>"; echo $answer."<br>"; echo("answerip/$ip/$answer.$ip"); ?> | cs |
그래서 해당 php 코드를 작성하고 echo 돌렸더니
이러한 값이 나왔고
성공