2018. 12. 26. 16:18ㆍ워게임 리뷰
Challenge no.33
사용 도구 |
BurpSuite |
브라우저 |
IE 11 |
# 33-1 분석
처음 화면에 들어가면 어떤 문서에 대한 경로가 <a> 태그의 href 속성으로 링크가 걸려있고, 아래에는 Wrong 이라는 문자열이 출력되고 있다. 링크를 클릭하면 index.phps에 대한 소스코드가 나오는데 이를 분석해야 한다.
<hr>
Challenge 33-1<br>
<script>document.write("<a href=http://webhacking.kr<?=$_SERVER[PHP_SELF] 1?>s><?=$_SERVER[PHP_SELF]?>s</a>");</script>
<hr>
<?
if($_GET[get]=="hehe") // get 이라는 파라미터를 생성해 hehe라는 값을 넣어 GET 방식으로 서버에 요청하면
{ // 다음 화면으로 넘어 간다.
echo("<a href=###>Next</a>");
}
else
{
echo("Wrong"); // 맨 처음 화면에 Wrong이 찍힌 이유
}
?>
# 풀이
URL에 ?get=hehe 입력하고 요청하면 다음 화면으로 넘어갈 수 있다. 아래와 같이 33-1 해결
# 33-2 분석
33-1과 마찬가지로 어떤 조건을 만족해야 다음 화면으로 넘어갈 수 있는 것 같다.
아까랑 다른 점은 GET 방식이 아닌 POST 방식으로 두 개의 파라미터를 요청해야 한다.
GET 방식은 URL 자체에 파라미터 값이 노출되므로 쉽게 해결 할 수 있으나,
POST 방식은 서버로 전송되는 파라미터 값이 URL에 노출 되지 않기때문에 Paros, BurpSuite 등과 같은 프록시 툴을 사용해서 해결해야 한다.
<!-- 생략 -->
if($_POST[post]=="hehe" && $_POST[post2]=="hehe2") // 두 개의 파라미터를 POST 방식으로 보내야 한다.
{
echo("<a href=##>Next</a>");
}
else
{
echo("Wrong");
}
?>
# 풀이
BurpSuite , Paros 같은 프록시 툴을 이용해 문제를 해결 할 수 있다. BurpSuite를 이용해 문제를 풀어보았다.
BurpSuite Proxy 기능을 이용해 /challenge/bonus/bonus-6/33.phps 파일에 대한 요청을 Intercept해서 기존의 GET 방식을 POST 방식으로 변경해 주었다.
요청 방식 전환 방법 : 마우스 우클릭 - [Change request method]
POST 방식으로 변경 후 파라미터로 post=hehe & post2=hehe2 로 작성해서 서버에 요청하면 다음 화면으로 넘어 갈 수 있다. POST 방식이었기에 URL에 파타미터 값이 나오지 않는다.
# 33-3 분석
앞서본 문제들과 마찬가지로 php 파일 소스코드를 보고 특정 파라미터를 웹서버에 전달해 주어야 문제가 해결 된다.
GET 방식으로 myip 라는 파마리터 변수의 값이 $_SERVER[REMOTE_ADDR] 값과 같아야 다음 문제로 넘어 갈 수 있다. 2
<?
if($_GET[myip]==$_SERVER[REMOTE_ADDR]) // 서버 입장에서의 원격 주소라 하면 , 서버에게 요청을 한 클라이언트가 됨.
{
echo("<a href=##.php>Next</a>");
}
else
{
echo("Wrong");
}
# 풀이
URL 주소에 myip=xxx.xxx.xxx.xxx 입력 후 서버에 요청하면, 다음 문제로 넘어 갈 수 있게 된다.
( IP 부분은 가림처리 했는데, 실제 문제 풀이 시 myip= 뒤에 자신의 IP 주소를 넣어주면 됨.)
# 33-4 분석
이전 문제들과 다르게 hint가 바로 보여지고 있다. 뭔가 알 수 없는 숫자 값이 적혀 있다.
PHP 소스코드를 살펴보자. time() 함수는 PHP 에서 타임스탬프 값을 반환하는 함수이다. 3
md5() 함수는 주어진 문자열에 대한 MD5 해시 값을 반환한다. 4
<?
if($_GET[password]==md5(time())) // time() 함수를 통해 현재 UNIX timestamp를 MD5 해시 함수를 거친 해시값을 password
{ // 파라미터로 넘겨주면 된다.
echo("<a href=###>Next</a>");
}
else
{
echo("hint : ".time());
}
?>
# 33-5 분석
별다른 힌트는 없는 것 같다. 소스코드를 한 번 살펴보자.
<?
if($_GET[imget] && $_POST[impost] && $_COOKIE[imcookie])
{
echo("<a href=###>Next</a>");
}
else
{
echo("Wrong");
}
각 파라미터를 이름에 맞게 생성하고 값은 모두 1 로 설정해서 서버로 요청을 전송하면 다음 문제로 넘어 갈 수 있는 Next 링크가 생성되었다.
# 33-6 분석
힌트로 웹 브라우저 User-agent가 주어졌다.
파이썬을 이용한 크롤러 개발 개인 프로젝트를 하며 자주 봤기에 딱 보고 이거다 싶었다. 소스 코드를 한 번 살펴 보자.
<?
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]");
}
# 33-7 분석
<?
$_SERVER[REMOTE_ADDR]=str_replace(".","",$_SERVER[REMOTE_ADDR]); // IP 주소의 '.' 을 제거
if($_GET[$_SERVER[REMOTE_ADDR]]==$_SERVER[REMOTE_ADDR]) // 파라미터 이름과 값에
{ // .을 제거한 IP주소를 대입하여 서버에 전송
echo("<a href=###>Next</a>");
}
else
{
echo("Wrong<br>".$_GET[$_SERVER[REMOTE_ADDR]]);
}
$_SERVER[REMOTE_ADDR] 변수에는 원래 IP 주소가 저장되는데, 첫번째 라인에서 IP 주소에서 ' . '을 제거해서 다시 저장하도록 하 고 있다. GET 방식으로 .을 제거한 IP 주소를 파라미터 이름과 값으로 설정해서 서버로 요청을 보내야 한다.
# 33-8 분석
# 33-9 분석
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");
}
?>
# 33-10 분석
$ip=$_SERVER[REMOTE_ADDR]; // 내 IP 주소룰 ip 변수에 대입
for($i=0;$i<=strlen($ip);$i++) // ip 변수에 저장된 IP 주소의 길이만큼 반복문 수행
{
$ip=str_replace($i,ord($i),$ip); // 문자열을 ascii 10진수로 변환
$ip=str_replace(".","",$ip); // . 제거
$ip=substr($ip,0,10); // ip 변수의 index 0번째 부터 10번째 문자열을 추출
@mkdir("answerip/$ip"); // 폴더 생성 명령어
$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);
?>
Password 부분은 텍스트를 잘못 입력했다. 저값은 ip 변수를 출력한 것이다. 이 값들을 이용해서 파일이 생성된 경로와 파일명을 입력해 이동해보면, 아래와 같이 Password 값과 문제를 클리어 한 내 IP가 브라우저에 출력된다. 여기서 얻은 Password를 가지고 Auth에 입력하면 완전히 문제가 해결된다.
본 게시글은 webhacking.kr 문제를 풀며 풀이과정을 정리한 글 입니다.
'워게임 리뷰' 카테고리의 다른 글
Challenge 2 - 풀이중 (0) | 2019.01.13 |
---|---|
Challenge 1 (0) | 2019.01.13 |
Challenge 10 (0) | 2018.12.26 |
DB 별 주석처리 방법 (0) | 2018.12.25 |