주로 게시판 등에서 파일 업로드
기능을 악용하여 시스템 권한
을 획득할 수 있는 취약점을 의미한다.
나처럼 보안에 대한 지식이 얕은 사람은 위의 문장이 생소하게 느껴질 것이기에, 다시 풀어 써본다.
악성 스크립트
가 업로드 된 후, 서버상에서 스크립트를 실행하여 쉘을 획득하는 등의 행위로 서버를장악
할 수 있다.
즉, 흔히 말하는 웹쉘
의 업로드를 통해 시스템의 권한을 장악한다는 이야기이다.
그렇다면 어떤 파일들이 웹에서 구동되는가? 웹 서버에서 실행 가능한 확장자
는 다음과 같다.
언어 | 확장자 |
---|---|
asp, aspx | asp, aspx, htm, html, asa |
php | phtml, php, php3, php4, php5, inc, htm, html |
jsp, java | jsp, jspx, jsw, jsv, jspf, htm, html |
perl | pl, pm, cgi, lib, htm, html |
coldfusion | cfm, cfml, cfc, dbm, htm, html |
이러한 악성 파일이 업로드 된다면, 접근권한
, 정보유출
, 악성코드 배포
등의 문제를 야기할 수 있다.
이러한 취약점을 찾아 공격하는 방법은 크게 4가지 정도이다.
가장 간단한 방법으로 다음과 같은 과정을 거친다.
확장자 제한
이 없는지 확인하고,접근
및 실행
이 가능한지 확인하여 공격하는 것이다.파일타입 변조
등의 우회공격을 통해 확장자 검사를 피하는 것을 의미한다.
업로드 시 파일의유형 정보를 알려주는 헤더 중, Content-type
속성을 프록시를 이용해 우회하여 공격할 수 있다.
자세한 사항은 다음 링크를 참조하시기를..
https://bit.ly/2tIJ21w
널(%00)
문자가 문자의 끝을 의미하기 때문에 특정 확장자를 숨기기
위한 목적으로 사용될 수 있다.
해당 부분의 취약점은 내부 API를 호출할 때 발생될 가능성이 있다.
널바이트(%00)와 .jpeg확장자를 함께 접목하여 업로드하면 %00 다음의 문자열은 무시하게 된다.
언어 | 우회패턴 | 처리패턴 |
---|---|---|
php | test.php%00.jpeg | test.php |
asp | test.asp%00.jpeg | test.asp |
jsp | test.jsp%00.jpeg | test.jsp |
2가지 정도의 방법이 존재하는데, 다음과 같다.
MySQL
의 into outfile()
함수를 이용하여 웹서버에 파일을 생성할 수 있다.
MSSQL
의 저장 프로시저(xp_cmdshell
)을 이용하여 echo와 » (파이프) 명령어를 통해 특정 파일에 삽입할 수 있다.
모든 부분을 전부 작성할 수는 없지만, 대략적으로 다음과 같은 방법을 통하여 기초
적인 방어를 할 수 있다.