Web/webhacking.kr

Webhacking.kr old-24

cloudnaaam 2025. 3. 17. 12:00

문제 페이지다. 

패킷을 보여주네?

 

<?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>

소스 코드다.

 

htmlspecialchars() 함수로 XSS 방지하고 있고,

.. -> .

12 , 7. , 0. -> 빈칸

이렇게 필터링 하는 걸 볼 수 있다.

 

REMOTE_ADDR 부분을 변조해서 127.0.0.1 주소를 들어가면 될 것 같다.

 

$_COOKIE 부분은 헤더의 Cookie 값을 받아 오는 부분이고,

$_SERVER 부분은 

더보기
  • $_SERVER['PHP_SELF']: 현재 실행 중인 스크립트의 파일 경로입니다.
  • $_SERVER['SERVER_NAME']: 서버 호스트 이름입니다.
  • $_SERVER['HTTP_HOST']: 현재 요청을 처리한 서버의 호스트입니다.
  • $_SERVER['HTTP_USER_AGENT']: 사용자의 브라우저 정보입니다.
  • $_SERVER['SERVER_SOFTWARE']: 서버 소프트웨어 정보입니다.
  • $_SERVER['SERVER_PROTOCOL']: 요청에 사용된 프로토콜입니다 (예: HTTP/1.1).
  • $_SERVER['REQUEST_METHOD']: 요청에 사용된 메서드입니다 (예: GET, POST).
  • $_SERVER['QUERY_STRING']: URL의 쿼리 문자열입니다.
  • $_SERVER['DOCUMENT_ROOT']: 현재 스크립트가 실행되는 문서 루트 디렉터리입니다.
  • $_SERVER['REMOTE_ADDR']: 사용자의 IP 주소입니다.
  • $_SERVER['REMOTE_PORT']: 사용자가 접속한 포트입니다.
  • $_SERVER['SCRIPT_FILENAME']: 현재 스크립트의 절대 경로입니다.
  • $_SERVER['SERVER_PORT']: 서버가 수신 중인 포트입니다.
  • $_SERVER['REQUEST_URI']: 현재 요청의 URI입니다.
  • $_SERVER['SCRIPT_NAME']: 현재 스크립트의 경로입니다.
  • $_SERVER['HTTP_REFERER']: 현재 페이지로 링크된 페이지의 URL입니다 (있는 경우).

이러하다. 

 

그러니까 REMOTE_ADDR 는 사용자의 IP 주소라는 것을 알 수 있겠죠?

 

처음에는 X-Forwarded-For 헤더를 변조해봤는데, 안되더라.

 

소스 코드를 한번 더 유심히 보았다.

그랬더니 눈에 띄는 부분이

 

1. $_SERVER 변수를 가져온 후에 $_COOKIE 변수를 가져온다.

2. REMOTE_ADDR 변수를 그대로 썼다.

-> 그니까 $_SERVER['REMOTE_ADDR'] 이렇게 썼으면 그대로 $_SERVER 변수의 값이 왔을꺼다.

-> 근데 그냥 REMOTE_ADDR를 써버리니까 Cookie 값에 저 변수를 그대로 추가해주면 변조가 가능하다.

3. 필터링 부분이 replace로 되어 있는데, 딱 한 번만 필터링한다.

-> 문자열 계속 반복하면서 필터링 하는게 아니라 한 번만 필터링 우회하면 뚫린다.

 

 그럼 시도해보자.

 

burpsuite 를 켜서 cookie 값에 

REMOTE_ADDR= 112277....00....00....1 를 붙여서 값을 쏘자.

 

풀었다!

 

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

Webhacking.kr old-26  (0) 2025.03.17
Webhacking.kr old-06  (0) 2025.03.17
Webhacking.kr old-17  (0) 2025.03.17
Webhacking.kr old-16  (0) 2025.03.17
Webhacking.kr old-14  (0) 2025.03.17