WarGame/WebHacking.kr

webhacking.kr 33번

DoR@Hee 2019. 2. 21. 16: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
$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); // 여기까지 $ip를 구하는 로직이며 .도 빼고 여러가지 치환을 하고있다.


$answer=$ip*2;
$answer=$ip/2;
$answer=str_replace(".","",$answer); //여가끼자 ip값에 * /해서 .을 빼고 $answer에 값을 구한다.


@mkdir("answerip/$ip");
여기서 mkdir로 저 경로에 디럭터리를 만드는거 봐서
answerip/$ip/$answer.$ip 정답은 여기있는거같다.


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 돌렸더니


이러한 값이 나왔고 


성공