링크로 들어가면 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로 변경된 것을 확인할 수 있다.
넘모 어렵다,,,
'Webhacking' 카테고리의 다른 글
[Webhacking.kr] old-12번 풀이 (0) | 2022.12.21 |
---|---|
[Webhacking.kr] old-19번 풀이 (0) | 2022.12.21 |
[Webhacking.kr] old-1번 풀이 (0) | 2022.12.21 |
[Webhacking.kr] old-17번 풀이 (0) | 2022.12.21 |
[Webhacking.kr] old-10번 풀이 (0) | 2022.12.21 |