
이는 class.upload.php <= 2.0.3에서 임의 파일 업로드 및 원격 코드 실행을 유발하는 필터 우회 익스플로잇입니다.
이는 필터 우회 익스플로잇으로, 임의 파일 업로드 및 원격 코드 실행으로 이어집니다. class.upload.php 스크립트는 '위험한 파일 및 콘텐츠'를 필터링하고 이를 txt 파일 확장자로 이름을 변경합니다. 또한 업로드된 이미지에 대해 다양한 변환을 수행하는데, 일반적으로 파일 확장자 필터를 우회할 수 있더라도 주입된 페이로드를 파괴합니다.
파일 확장자 필터는 블랙리스트이므로, 새로운 확장자가 도입되거나(이 경우 phar) 누락된 경우 PHP 파일을 업로드할 수 있습니다. 그러나 콘텐츠는 여전히 유효한 이미지여야 하며 imagecreatefromjpeg 및 유사한 함수를 거쳐야 합니다. 이를 위해 inject.php 스크립트를 작성했습니다. 이 스크립트는 본질적으로 다양한 이미지를 무차별 대입하여 class.upload.php에서 수행되는 프로세스에 의해 페이로드가 파괴되지 않는 지점을 찾습니다. 이는 효과적으로 임의 파일 업로드와 매우 은밀한 코드 실행을 제공합니다. 업로드된 이미지는 여전히 유효한 이미지이며 페이지에 표시되기 때문입니다.
upload.php 스크립트는 verot.net의 GitHub에 있는 예제 코드입니다. 이 취약점을 그들의 자체 예제 코드를 사용하여 시연하는 것이 가장 좋다고 생각했습니다.
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.7=-
[+] Fetching image (100 X 100) from http://lorempixel.com/100/100/
[+] Jumping to end byte
[+] Searching for valid injection point
[!] Temp solution, if you get a 'recoverable parse error' here, it means it probably failed
[+] It seems like it worked!
[+] Result file: image.jpg.phar
user@ayu:/var/www/html# curl -v -o - http://localhost/images/image_resized.phar?c=uname%20-a | grep -aPo "(Linux.*GNU)"
Linux ayu 5.0.0-36-generic #39-Ubuntu SMP Tue Nov 12 09:46:06 UTC 2019 x86_64 x86_64 x86_64 GNU
패치되지 않은 class.upload.php 버전으로 인해 JoomlaWorks K2 <= 2.10.1에서 원격 코드 실행으로 이어지는 임의 파일 업로드
일반 사용자는 inject.php로 생성된 이미지를 업로드하며, 여기에는 간단한 페이로드가 포함되어 있습니다. 이 이미지는 class.upload.php의 확장자 필터를 우회하고 라이브러리에서 수행하는 이미지 처리에 의해 파괴되지 않습니다. 일반 이미지처럼 렌더링되어 더 은밀합니다.
파일이 업로드되고 백도어로 접근하여 명령을 실행할 수 있습니다.