애드센스


파일업로드 취약점 Web hacking

파일업로드 취약점(웹쉘 파일이 업로드 되는 경우)이 존재할 경우 웹서버 권한이 따이는 것이기 때문에 절대로 웹쉘이 업로드 되지 않도록 해야함

대응 방법
1. 파일이 업로드 되는 디렉터리에 서버 사이드 스크립트(asp, php, jsp, aspx 등) 실행 권한 제거
2. 웹서버 홈 디렉터리 / 파일 업로드 디렉터리 디스크 분리

취약점 확인 방법
어느 메뉴가 파일 업로드 기능을 가지고 있는지 모두 조사 왜냐하면 모든 메뉴의 페이지에서 대응해야하기 때문
모든 메뉴의 파일 업로드 로직을 일일이 확인하고 웹쉘같은 악의적인 파일이 업로드 될 수 있는지 체크

페이지 레벨에서 대응하지 않고 IPS를 활용하면 한번에 해결할 수 있지 않을까 하는 생각을 해 볼수가 있지만 제 경험상 IPS만으로는 한계가 있음 왜냐하면 패턴으로 등록해서 방어할 수도 있겠지만 이 취약점 만큼은 100% 완벽하게 막아야 하기 때문에 우회가 가능한 IPS만으로는 어려움 그렇다고 IPS를 사용할 필요가 없다는 것은 아니며 IPS가 있다면 최대한 활용을 하는것임

일단 IPS 얘기가 나온김에 패턴을 살펴보겠음 아무래도 웹쉘이다 보니 OS 명령어를 실행할 수 있는 스크립트 함수가 패턴
asp / aspx
cmd.exe, WScript.Shell, Scripting.FileSystemObject, ADOX.Catalog, Adodb.connection, VBScript.Encode, CODEPAGE,"949", <%execute,Language="C#", System.Reflection, VBScript.Encode, script runat, WScript.ShellApp, WSCRIPT.NETWORK, Shell.ApplicationApp,Adodb.Connection, Adodb.RecordSet, Adodb.Stream, Scripting.FileSystemObject, SoftArtisans.FileUp, Provider=SQLOLEDB.

jsp
jdbc.sqlserver, jdbc:microsoft, sun.jdbc., .OracleDriver, jdbc:mysql:, Runtime., .exec, out.println, import="java.io 등

php
popen(, exec(, fopen(, system( , passthru(, escapeshellcmd( ,$_SERVER 등
 
웹쉘 체크하는 로직

1. 확장자 체크
업로드 되는 파일의 확장자 체크는 기본 중의 기본.
모든 확장자를 제한하고 허용하는 일부 확장자만 업로드 되도록 제한

2. mime-type 체크
이미지 파일일 경우는 image/pjpeg, image/gif 이겠지만 웹쉘같은 텍스트 형식일 경우는 txt/html 형식
물론 mime-type 은 간단한 조작(proxy tool을 사용)에 의해 우회 가능

3. 특수문자(;,%00,%zz) 체크
파일명에 특수문자가 있는지 체크

%00, %zz 는 종단문자로서 파일 서버가 리눅스 시스템일 경우 우회 기법으로 사용
예를들어 파일명을 shell.jsp%00.gif  로 업로드 하면 확장자 체크는 우회할 수 있고 서버에 저장되어 호출될때 시스템이 %00, %zz 를 종료문자로 인식하여 shell.jsp 로 호출을 했을때 jsp로 실행되는 경우가 있음
윈도우 IIS의 버그로 인해 shell.asp;.jpg로 업로드할 경우 jpg로 인식하고 확장자 체크 우회하여 업로드 가능하고 정상적으로 실행 됨
(세미콜론(;),물음표(?)는 URL에서 URI와 파라메터의 구분자)

덧글

※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.
◀ 다음덧글    이전덧글 ▶


Facebook

통계 위젯 (화이트)

8394
486
626606

구글