메인화면입니다.

소스보기 입니다.

소스코드를 해석해보겠습니다.

[소스코드 해석]

<?php

#DB연결 및 $flag에 flag값 저장 , $time에 현재시각 저장

$db = dbconnect();

$query = "select flag from challenge where idx=37";

$flag = mysqli_fetch_array(mysqli_query($db,$query))['flag'];

$time = time();

#새로고침시 /tmp-[time] 파일 생성 후 "127.0.0.1"기록

$p = fopen("./tmp/tmp-{$time}","w");

fwrite($p,"127.0.0.1");

fclose($p);

#업로드된 파일이 있을 경우 아래기호들을 제거

$file_nm = $_FILES['upfile']['name'];

$file_nm = str_replace("<","",$file_nm);

$file_nm = str_replace(">","",$file_nm);

$file_nm = str_replace(".","",$file_nm);

$file_nm = str_replace("/","",$file_nm);

$file_nm = str_replace(" ","",$file_nm);

#업로드된 파일이 있을 경우 ./tmp/[파일명] 파일에 접속 IP기록

if($file_nm){

$p = fopen("./tmp/{$file_nm}","w");

fwrite($p,$_SERVER['REMOTE_ADDR']);

fclose($p);

}

#./tmp 디렉토리의 모든 파일 출력

echo "<pre>";

$dirList = scandir("./tmp");

for($i=0;$i<=count($dirList);$i++){

echo "{$dirList[$i]}\n";

}

echo "</pre>";

#$host에 tmp-[time]의 ip정보 저장

$host = file_get_contents("tmp/tmp-{$time}");

#$request에 flag및 사용자 ip 저장

$request = "GET /?{$flag} HTTP/1.0\r\n";

$request .= "Host: {$host}\r\n";

$request .= "\r\n";

#소켓을 통해 $host에 저장된 ip로 flag 및 사용자 ip정보 전송

$socket = fsockopen($host,7777,$errstr,$errno,1);

fputs($socket,$request);

fclose($socket);

#파일이 20개가 넘으면 ./tmp의 모든 파일 삭제

if(count($dirList) > 20) system("rm -rf ./tmp/*");

?>

[2가지 방법]

1. 공인IP의 7777포트로 flag정보를 전송하기 때문에 공인아이피 7777포트로 수신되는 패킷을 내부 IP로 포트포워딩을 이용

2. tracert나 traceroute를 통해 외부로 나가는 홈네트워크의 최앞단 경로를 확인 후 모뎀이 직접 랜선을 연결하여 브릿지 모드로 작동 시키는 방법

이유는 잘 모르겠지만 포트포워딩이 잘되지 않아서 브릿지 모드를 이용하여 진행했습니다.

 

먼저 방화벽 인바운드 설정을 통해 7777 tcp/udp 포트를 열어 놓겠습니다.

이제 netcat을 이용하여 포트를 열고 대기합니다.

이제 프록시를 이용하여 파일이 업로드 되는 타이밍을 잡아 놓습니다.

만약 현재 시간이 15871105라면 tmp-158711135 부분처럼 30초정도 미리 수정해놓고 타이밍 맞춰서 전송하면 됩니다.

하지만 정확하게 맞추기가 조금은 까다로워서 저는 BurpSuite의 Repeater기능을 사용하여 진행하였습니다.

2초정도 부터 go를 계속 누르면 됩니다 ㅋㅋ

그러면!

이 처럼 플래그를 획득할 수 있습니다.

챌린지 37 성공!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level39 (old)  (310) 2020.04.28
[webhacking.kr] Level38 (old)  (298) 2020.04.28
[webhacking.kr] Level36 (old)  (320) 2020.04.28
[webhacking.kr] Level35 (old)  (302) 2020.04.28
[webhacking.kr] Level34 (old)  (325) 2020.04.28

+ Recent posts