본문 바로가기
category/웹해킹(webhacking.kr)

웹해킹(webhacking.kr) - 24번

by 자운대고라니 2020. 11. 21.
반응형

안녕하세요??

자운대 고라니입니다.

오늘은 wargame.kr old-24번 문제를 풀어보겠습니다.


문제에 들어가 보면 client ip, agent에 대한 정보가 나와있다. (개인 정보라서 가렸다.)

일단 뭔 문젠가 싶어서 view-source로 code를 확인하였다.

중요한 부분만 캡처하였다.

코드를 확인해보니 아마도 str_replace함수의 취약점을 활용하는 문제인 듯하다.


1. str_replace 취약점

 

str_replace()는 간단하게 우회 가능한 함수이다.

이게 무슨 함수인지 간단하게 예를 들어보겠다.

 

ex)

$a = "Hello my name is hack"

$a = str_replace("Hello", "Hi", $a);

echo "$a";  -> Hi my name is hack

 

이처럼 문자열 안에 있는 특정 문자열을 다른 문자열로 바꿔주는 기능을 한다.

만약 Hello를 Hi로 바꾸지 않고, 공백으로 바꾼다고 가정해보자.(문제처럼)

 

ex)

$a = "Hello my name is hack"

$a = str_replace("Hello", "", $a);

echo "$a";  -> my name is hack

 

이 처럼 문자열이 아예 사라진다. 이때 Hello를 출력하고 싶다면 Hello -> HeHellollo 이렇게 넣어주면 Hello가 살아남는다.

간단하게 PHP Online으로 테스트해봤다.

위의 그림을 보면 알 수 있듯 $a에서는 Hello가 빠져서 출력됐고, $b는 Hello가 정상적으로 출력됐다.

이를 활용하여서 이번 문제를 해결할 수 있다고 생각했다.


2. 문제에 적용

 

문제에 적용하려 했는데, $ip의 값을 어떤 방식으로 넣어야 할지 모르는 사람이 있을 것이다.

코드의 위쪽을 보면 extract($_COOKIE);라는 함수가 있다. 이는 인자 값을 $_COOKIE 형태로 넣을 수 있다는 뜻이다.

다시 말해 $REMOTE_ADDR이란 변수를 COOKIE값으로 바꿔줄 수 있다는 것이다.

 

이를 활용하여  REMOTE_ADDR이란 쿠키를 하나 생성해주고,  str_replace우회를 시도하였다.

REMOTE_ADDR의 value를 112277...00...00...1로 하면 필터가 어떻게 되는지 순서대로 나열해보겠다.

 

112277...00...00...1

str_replace("..",".") -> 112277..00..00..1

str_replace("12","") -> 1277..00..00..1

str_replace("7.","") -> 127.00..00..1

str_replace("0.","") -> 127.0.0.1

 

이후 새로고침을(F5)를 해보니 점수가 올라간 것을 확인할 수 있었다.

 

반응형

'category > 웹해킹(webhacking.kr)' 카테고리의 다른 글

웹해킹(webhacking.kr) - 35번  (0) 2020.11.30
웹해킹(webhacking.kr) - 40번  (0) 2020.11.26
webhacking 기본  (0) 2020.11.24
웹해킹(webhacking.kr) - 27번  (0) 2020.11.24
웹해킹(webhacking.kr) - 16번  (0) 2020.11.21
웹해킹(webhacking.kr) - 50번  (0) 2020.11.21
웹해킹(webhacking.kr) - 45번  (0) 2020.11.20
웹해킹(webhacking.kr) - 48번  (0) 2020.11.20

댓글