웹 서버에서 php 파일을 어떻게 실행할까요?

웹으로 요청을 하면 그 웹서버에서 실행 됩니다.

물론 php 파일이 실행되게끔 그 서버에 php가 설치되어 있어야겠죠.

 

php가 설치되어 있지 않은 서버에서는 .php가 실행되지 않습니다.

 

실행하기 위해선 정확한 경로, 파일이름을 알아야 합니다.

(생각보다 파일명을 바꿔서 저장하는 케이스가 많습니다.)

 

 


 

 

Image Web Shell 이 있다고 가정해 볼게요.

webshell.php.jpg는 어떻게 실행될까요?

> 불가능합니다. (실행될 수 없습니다.)

 

서버에서 php 코드는 실행될 수 있지만, jpg는 실행되지 않습니다.

 

그렇다면 실행이 가능한 경우는? 

웹 애플리케이션 개발 시 파일 업로드(저장하는) 기능을 잘못 구현한 경우

 

webshell.jpg.php

 

첫번째 나오는 . 기준으로 스플릿 -> 검사 -> jpg니까 OK 통과!

 

 

확장자를 단순 눈속임 하는 경우

 

fileName.pdf.exe

(기본 확장자 숨김 처리 시) fileName.pdf 처럼 보임.

윈도우에선 기본 확장자가 숨김 처리 되어있는 점을 노린 케이스

 

 

NULL Byte Injection

 

webshell.php%00.jpg

 

리눅스(유닉스)에선 %00(혹은 '\0')을 만나면 파일 이름의 끝으로 인식합니다.

널 문자를 만났을 때 데이터나 코드의 끝이라고 인식해 조기에 종료시키는 기법이에요.

 

위 케이스에선 파일명을 webshell.php 로 인식하는거죠.

 

.htaccess

Apache 웹 서버에서 사용하는 설정 파일

서버에서 실행할 확장자를 변경할 수 있습니다. (특정 디렉토리에 대한 설정 지정)

 

예) .jpg 이더라도 php로 인식하게하여 실행하게끔 만듦.

AddType application/x-httpd-php .jpg

 

 

이를통해 이미지 파일로 가장한 php 파일을 실행할 수 있습니다.

 

 

 


 

 

web shell의 단점

웹 쉘은 HTTP 프로토콜로 동작해요.

HTTP는 상태를 유지하지 않는 (stateless) 프로토콜이기 때문에, 연결이 끊길 때마다 이전 상태의 정보가 유지 되지 않아요.

 

예를들어 ls+/ 를 하고, 다시 ls를 하면 최상위 디렉토리가 아닌, 애초에 그 폴더에서 ls를 한 게 돼요.

 

단발성, 휘발성이 있기 때문에, 침투테스트를 할 때는 Reverse Shell을 함께 이용해야해요.

+ Recent posts