웹쉘(WebShell)은 기본적으로 인코딩 및 난독화가 적용되어 있다. 평문으로 된 웹쉘은 웹쉘 탐지 솔루션에 의해 탐지되어 웹 상에 정상적으로 실행되지 않는다. 이런 웹쉘 탐지 솔루션을 우회하기 위해 수 많은 웹쉘이 난독화를 적용한다.
아주 기본적인 인코딩 및 난독화가 적용되어 있는 웹쉘인 b374k v2.7로 평문의 코드를 얻는 방법을 알아본다.
b374k-2.7.php 코드를 보면 상단부터 웹쉘 접속 로그인 정보, eval(), gzinflate(), base64_decode() 함수가 존재한다.
base64_decode() 함수 내의 코드는 Base64 인코딩 되어 있는 문자열이므로 해당 문자열을 디코딩하면 원본 코드가 나온다.
b374k() 함수의 첫 번째 인자를 복사하여 base64_decode() 함수의 인자에 붙여 넣는다.
UnPHP 사이트는 PHP 기반의 난독화 또는 악의적인 코드를 분석해주는 온라인 PHP 디코더 서비스이다. 해당 사이트로 접속하여 '<?php', '?>'을 제외한 코드 eval(gzinflate(base64_decode(""))) 를 붙여 넣고, 'Decode This PHP' 버튼을 클릭한다.
온라인 분석이 완료되면 상단에 디코딩 된 코드가 존재하고, 하단에 붙여넣은 원본 코드가 존재한다. 디코딩이 완료되면 상단에는 디코딩 된 코드, 하단에는 원본 코드가 존재한다.
제대로 난독화가 해제 되었는지 난독화가 적용되지 않는 순정 코드와 비교해보니 순정 코드와 유사하게 변경됐다. 이런 사이트를 이용하지 않고, Base64 인코딩 된 값을 디코딩해도 동일한 효과를 가진다.
▶ 안드로이드 암호화 구현 취약점 (Android AES 복호화)