Blog to Blog

[WebHacking] File Upload 취약점 - LD_PRELOAD를 이용한 여러가지 방법 본문

Hacking/Study

[WebHacking] File Upload 취약점 - LD_PRELOAD를 이용한 여러가지 방법

kookhh0827 2019. 8. 6. 16:29

지난 포스트에서는 LD_PRELOAD 환경변수와 MAIL 함수를 이용한 공격법을 소개해 드렸습니다.

 

이번 포스트에서는 MAIL 함수 외에도 사용이 가능한 여러가지 방법을 소개시켜 드리고자 합니다.

 

 

첫번째 방법 - mail을 제외한 다른 메일 관련 함수 사용

PHP의 다양한 mail 관련 함수들

하지만 기본 mail() 함수 외에는 따로 설치가 필요합니다.

mail() 같은 경우에는 별다른 설치 없이 함수 실행이 가능하고, 실제로 사용을 위해서는

sendmail이 설치되어 있어야 합니다.

 

그러나 IMAP을 이용해서 공격을 하기 위해서는 해당 서버에 설치가 되어있어야 합니다.

 

IMAP의 필요 옵션

IMAP을 설치한 후에 위와 같은 컴파일 옵션을 줘야 합니다.

 

가능한 경우를 찾기 위해서는 phpinfo를 확인해야 합니다.

 

phpinfo의 거의 최상단에 위치한 Configure Command

 

phpinfo에서 Configure Command 옵션을 확인하면 이용 가능한 것들을 확인할 수 있습니다.

 

마침 해당 서버는 IMAP이 이용 가능하니 예시를 통해 확인시켜 드리겠습니다.

 

<?php
	imap_mail("a","a","a","a");
?>

 

위와 같은 php파일을 만들고 strace로 확인해보겠습니다.

 

execve("/bin/sh")를 한다

mail() 함수와 동일하게 execve를 실행시키는 것을 확인할 수 있습니다.

 

 

두번째 방법 - error_log를 이용한 방법

 

PHP 레퍼런스의 error_log 설명

 

PHP의 함수 중 하나인 error_log는 서버에 관련 에러사항을 기록하기 위해서 사용되는 함수입니다.

 

그러나 여기서 $message_type을 조절하면 mail로 해당 에러 메세지를 전송시킬 수 있습니다.

message_type의 종류
error_log 사용 예시

 

error_log([남길 에러 메세지], 1, [메일 주소])

이런 방식으로 사용하면 mail로 전송시키려고 시도하므로,

mail()함수와 비슷한 동작을 하리라 생각해 볼 수 있습니다.

 

실제로 strace를 이용해서 확인해 봅시다.

 

<?php
	error_log("test",1,"test@test.test");
?>

잘 된다

execve를 실행시키는 것을 확인할 수 있습니다.

그러므로 error_log를 이용한 공격도 가능합니다.

 

 

세번째 방법 - ImageMagick을 이용한 방법

ImageMagick에서 PostScript 형식의 파일(.pdf, .ps, .eps) 등을 열면

 

이를 해석하기 위해

execve("/usr/bin/gs") 등 ghostscript를 execve로 실행시킨다고 합니다.

 

그러나 기본적으로 보안 상의 이유로 해당 파일은 허용되지 않도록 설정되어 있습니다.

(ImageMagick 3.4.3RC2 기준)

 

하지만 invalid한 .eps 파일을 ImageMagick으로 열면 해당 보안을 무력화시키고

execve("/usr/bin/gs")를 실행하도록 할 수 있다고 합니다.

 

이에 대한 것은 Google CTF 2019 - Wallbreaker Easy 문제에서 활용되었습니다.

 

자세한 사항은 CTFTime에 등록된 해당 문제의 writeup을 참고하시면 좋을 것 같습니다.

 

 

네번째 방법 - 이외에도 가능한 여러가지 경우에 대하여

 

이외에도 execve를 사용하도록 유도할 수 있다면 비슷한 방법으로 exploit할 수 있습니다.

 

또한, 특정 PHP함수에서만 활용하는 외부 함수가 있다면,

해당 함수를 덮어씌우는 방법으로도 가능할 것으로 보입니다.

 

추후에 실험을 통해 새로운 방법을 찾으면 포스트를 업데이트 하도록 하겠습니다.

 

잘못된 부분이나 추가해야 할 부분이 있다면 댓글로 알려주시길 바랍니다.

감사합니다.

Comments