본문 바로가기
CTF/webhacking.kr

[CTF] webhacking.kr 24번 Write-Up

by spareone 2022. 10. 18.

webhacking.kr 24번 문제풀이 Write Up 입니다.

[그림 1] Level 24 페이지

client ip와 agent 정보가 나오고, 잘못된 IP라고 뜹니다.

[그림 2] Level 24 소스코드

소스코드입니다. PHP 영역만 따로 빼서 분석해 보겠습니다.

<?php
  extract($_SERVER);
  extract($_COOKIE);
  $ip = $REMOTE_ADDR;
  $agent = $HTTP_USER_AGENT;
  if($REMOTE_ADDR){
    $ip = htmlspecialchars($REMOTE_ADDR);
    $ip = str_replace("..",".",$ip);
    $ip = str_replace("12","",$ip);
    $ip = str_replace("7.","",$ip);
    $ip = str_replace("0.","",$ip);
  }
  if($HTTP_USER_AGENT){
    $agent=htmlspecialchars($HTTP_USER_AGENT);
  }
  echo "<table border=1><tr><td>client ip</td><td>{$ip}</td></tr><tr><td>agent</td><td>{$agent}</td></tr></table>";
  if($ip=="127.0.0.1"){
    solve(24);
    exit();
  }
  else{
    echo "<hr><center>Wrong IP!</center>";
  }
?>

접속IP가 127.0.0.1이면 문제가 해결되는 것 같습니다.

그러나, IP는 str_replace()에 의해 필터링되고 있고, IP정보는 어떻게 속여서 전송해야 할지도 생각해야 합니다.

 

일단 str_replace() 먼저 해결해봅니다.

str_replace([변경 대상 문자열], [변경할 문자열], [해당 문자열]) 이런 구조로 이루어져 있습니다.

이 함수의 취약점은, 필터링 후 남은 문자로 재조합이 가능하다는 것입니다.

 

예를 들어 admin이 str_replace("admin", "", $str) 이렇게 필터링 된다고 가정해보겠습니다.

그냥 admin으로 전송하면 당연히 필터링되겠지만,

adadminmin 이런식으로 전송하면 adadminmin에서 가운데 admin만 날아가게 됩니다.

이렇게 되면 남은 문자열로 admin 재조합이 가능합니다.

 

이 원리를 이용해서 127.0.0.1을 전송해 보겠습니다.

'..' -> '.'   |   '12' '7.' '0.' -> ''

이렇게 필터링되고 있습니다.

 

112277...00...00...1 이렇게 전송하면 str_replace() 후 127.0.0.1이 됩니다.

 

 

이제 IP를 어떻게 속일지 생각해야 합니다.

코드를 보면 $ip = $REMOTE_ADDR; 부분 위에

extract($_SERVER);
extract($_COOKIE);

이 두 줄이 보입니다.

 

해당 함수는 extract() 함수인데, 배열 속의 키 값을 변수로 만들어주는 역할을 합니다.

$a[a] = '1';

$a[b] = '2';

extract($a); 라고 정의했을 때,

echo $a;

echo $b; 의 출력값은 1 2가 됩니다.

 

extract() 함수는 잘못된 위치에 작성하면 기존 변수를 덮어씌는 취약점이 있습니다.

이를 문제에 활용하면, extract($_COOKIE)를 호출했으므로 쿠키를 변조하면 IP를 속일 수 있습니다.

 

[그림 3] 쿠키를 추가하는 모습

쿠키 관리하는 Extension이 작동을 안 해서, Chrome 개발자도구로 직접 추가했습니다.

IP를 받아오는 변수는 REMORE_ADDR이므로, 쿠키 이름을 REMORE_ADDR로 하고 값을 112277...00...00...1로 하면 됩니다.

[그림 4, 5] 문제 해결 완료 메시지

IP가 127.0.0.1이 되면 문제가 정답처리 됩니다.

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

[CTF] webhacking.kr 23번 Write-Up  (0) 2022.10.18
[CTF] webhacking.kr 20번 Write-Up  (0) 2022.10.15
[CTF] webhacking.kr 19번 Write-Up  (0) 2022.10.15
[CTF] webhacking.kr 18번 Write-Up  (0) 2022.10.14
[CTF] webhacking.kr 17번 Write-Up  (0) 2022.10.14

댓글