본문 바로가기

wargame/WEBHACKING.kr

[PHP]str_replace 함수 우회하는 방법


str_replace

검색하는 문자열을 대체 문자열로 변환합니다. 대체된 문자열 또는 배열을 반환합니다.

description

str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] ) : mixed

parameter

  1. search : 변환될 값
  2. replace : 변환할 값
  3. subject : 변환이 이루어지는 대상. 만약 subject가 배열이라면 배열의 모든 항목을 변환합니다.
  4. count : 변수가 존재할 경우, 변환이 수행된 횟수로 설정됩니다.

예시

<?php
$str = str_replace("ll", "", "good golly miss molly hello!", $count);
echo $count;
?>

다음의 경우 "good golly miss molly hello!"가 "good goy miss moy heo!"로 변환되고 3이 출력됩니다.

우회

str_replace 함수를 우회하는 방법이 있습니다. (문제 출처 : webhacking.kr 24번)

$ip=str_replace("12","",$ip);
$ip=str_replace("7.","",$ip);
$ip=str_replace("0.","",$ip);

if($ip=="127.0.0.1") // 만약 필터링한 $ip가 "127.0.0.1"이라면 문제 해결! 
{
@solve();
}

다음과 같은 코드의 경우 $ip가 112277..00..00.1이면 문제를 해결할 수 있습니다.
필터링 되면 안 될 부분에 필터링 되는 값을 넣으면 됩니다.

위의 예제를 가지고 한 번 만들어 보겠습니다.
우리는 "127.0.0.1"을 만들어야 하는데 12, 7., 0.이 필터링 됩니다.
처음에 "12"가 필터링 되므로 1과 2사이에 12를 넣습니다. 그럼 "11227.0.0.1"이 됩니다.
다음 7.도 필터링이 됩니다. 그렇다면 7과 . 사이에 7.(12 or 0. - 가능)을 넣으면 됩니다. 이렇게 하면 "12277..0.0.1"이 됩니다.
다음 0.도 필터링이 됩니다. 그렇다면 0과 . 사이에 0.(12 or 7. - 가능)을 넣으면 됩니다. 이렇게 하면 "12277..00..0.1"이 됩니다.
한 번 더 해줍시다. "112277..00..00..1"이 됩니다.

확인해봅시다. "112277..00..00..1에서 필터링 되는 노란색 부분을 제거하면 "127.0.0.1"이 나옵니다

'wargame > WEBHACKING.kr' 카테고리의 다른 글

[WEBHACKING.kr]23  (0) 2019.07.01
[WEBHACKING.kr]15  (0) 2019.07.01
[WEBHACKING.kr]24  (0) 2019.07.01
[WEBHACKING.kr]17  (0) 2019.07.01
[WEBHACKING.kr]16  (0) 2019.06.03