Webhacking

[Webhacking.kr] old-24번 풀이

aeeazip 2022. 12. 21. 03:19

링크로 들어가면 24번 문제를 확인할 수 있다.

문제 사진

 

view-source를 클릭하여 소스코드를 확인해보았다.

 

 

 

 

 

소스코드


<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?>
<html>
<head>
<title>Challenge 24</title>
</head>
<body>
<p>
<?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>";
  }
?>
<hr>
<a href=?view_source=1>view-source</a>
</body>
</html>

 

 

코드 해석 전에 3개의 함수를 알아야만 한다.

extract()
배열 속의 키 값을 변수화하는 함수
htmlspecialchars()
문자열에서 특정 특수문자를 html 엔티티로 변환하는 함수
str_replace("str1","str2","str3")
str3(문자열/변수)의 str1(변경 대상 문자)을
str2(변경하려는 문자)로 바꿔주는 함수

php코드를 보면

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

 

ip값에 REMOTE_ADDR값을 대입

→ if문에서 str_replace 함수로 ip값이 변하게 된다.

str_replace 함수로 $ip의 변경되는 부분

① .. → .

② 12 → 공백

③ 7. → 공백

④ 0. → 공백

그렇다면 solve 조건은 무엇일까?

if($ip=="127.0.0.1"){ solve(24); exit(); }

ip값이 127.0.0.1이 되면 solve 된다는 점을 통해

REMOTE_ADDR값을 갖는 ip가 위의 치환 과정을 거쳐 127.0.0.1로 만들어야 한다는 것을 유추 가능

∴ REMOTE_ADDR 값을 1227...00...00...1로 만들어야 함

ip = REMOTE_ADDR = 112277...00...00...1

( .. → . ) 규칙에 따라 112277.00.00.1

( 12 → 공백 ) 규칙에 따라 1277..00..00..1

( 7. → 공백 ) 규칙에 따라 12.00...00...1

( 0. → 공백 ) 규칙에 따라 12.0.0.1

이는 $ip=127.0.0.1 조건을 만족하므로 문제가 해결된다.

 

 

 

 

 

해결


[EditThisCookie] 실행   // 크롬 확장 프로그램에서 설치 가능

→ REMOTE_ADDR 라는 이름의 쿠키 생성

→ 112277...00...00...1 값 설정

→ 새로고침

쿠키 설정

크롬으로 쿠키 생성할 땐 꼭 SameSite를 Lax로 변경해야 한다!!!!!!!!!!!!

이것 때문에 정말 일주일을 헤매고 구글링을 했지만 원인을 알 수 없었는데

어제 크롬에서 보안 상의 이유로 2020년도부터 SameSite default값을 Lax로 변경했다는 사실을 알게 되었다 ^_^

결과 화면

결과 화면을 보면 Client ip가 127.0.0.1로 변경된 것을 확인할 수 있다.

넘모 어렵다,,,