728x90
반응형

250점인 37번 문제를 풀어보자.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 37</title>
</head>
<body>
<?php
  $db = dbconnect();
  $query = "select flag from challenge where idx=37";
  $flag = mysqli_fetch_array(mysqli_query($db,$query))['flag'];
  $time = time();

  $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);

  if($file_nm){
    $p = fopen("./tmp/{$file_nm}","w");
    fwrite($p,$_SERVER['REMOTE_ADDR']);
    fclose($p);
  }

  echo "<pre>";
  $dirList = scandir("./tmp");
  for($i=0;$i<=count($dirList);$i++){
    echo "{$dirList[$i]}\n";
  }
  echo "</pre>";

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

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

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

  if(count($dirList) > 20) system("rm -rf ./tmp/*");
?>
<form method=post enctype="multipart/form-data" action=index.php>
<input type=file name=upfile><input type=submit>
</form>
<a href=./?view_source=1>view-source</a>
</body>
</html>

./tmp/tmp-{$time} 파일에 127.0.0.1을 write한다.

업로드 된 파일 이름의 특수문자를 치환한 후, ./tmp/tmp-{$time} 파일에 접속한 우리의 IP를 덮어쓴다.

file_get_contents 함수를 이용해서 ./tmp/tmp-{$time} 파일 내의 데이터를 가져와 host변수에 담는다.

그리고 host:7777로 flag값을 전달하게 된다.

 

이제 문제를 풀어보자. 순서는 다음과 같다.

 

1. netcat을 이용한 7777번 포트 listening 상태 만들기 및 포트 포워딩 및 방화벽 규칙설정

2. 37번 문제 페이지에 파일 업로드

time값으로 파일업로드 소스코드이다. f.write()함수에는 내 ip주소를 입력하면 된다.

3. 37번 문제 페이지 업로드 파일에 접근

4. Flag 값 확인

FLAG{well...is_it_funny?_i_dont_think_so...}

 

5. Auth 페이지에 Flag 값 제출

728x90
반응형

'CTF & WarGame > webhacking.kr' 카테고리의 다른 글

[webhacking.kr] 39번 문제  (0) 2020.03.14
[webhacking.kr] 38번 문제  (0) 2020.03.14
[webhacking.kr] 36번 문제  (0) 2020.03.14
[webhacking.kr] 35번 문제  (0) 2020.03.13
[webhacking.kr] 34번 문제  (0) 2020.03.13

+ Recent posts