Job SSul Series 1 : 해킹 방어 실습 - EP9 다운로드 취약점 공격

안녕하세요.
해킹과 방어 시리즈를 연재하고 있는 Ziqon입니다.
벌써 9번째 이야기라니.. 많이 왔습니다.
날씨도 시원해지고~ 다 같이 열공열공!
이번에는 웹시스템의 다운로드 취약점을 공격하고 방어해보겠습니다.
다운로드 파라미터에 웹루트의 디렉토리 명령을 집어넣어 시스템 파일 등에 접근하는 기법입니다.

자 그럼~ 돌격 앞으로!!!

  • webgoat 실행 및 왼쪽 메뉴의 Bypass a Path Based AccessControl Schem 에 접속합니다.

  • 브라우저에서 프록시 설정을 아래와 같이 5000번 포트를 지정해줍니다.

  • 프록시 툴 설정
    https://portswigger.net/burp/communitydownload 에서 burp suite를 다운로드받습니다.
    [Proxy]에서 [Options] -> [Add]를 클릭하여 Bind to port는 5000 및 Specific address는 127.0.0.1을 선택하고 설정 값을 저장합니다.

-5000번 포트만 체크합니다.

-127.0.0.1은 웹브라우저와 프록시 툴간에 인식이 되지 않기 때문에 hosts 파일에 임시로 가상도메인을 추가합니다.

-이제 접속주소는 www.mypage.com:8080/WebGoat-5.4.1/attack이되며 Bypass a Path Based AccessControl Schem에서 맨 위의 html파일에 접근합니다.

-아래 burp에서 해당 파일을 ../../main.jsp로 변조하여 main.jsp에 접근해 봅니다.

-아래와 같이 main.jsp파일의 소스코드가 현시됩니다.

[방어 코드 작성]
-Findbug에서 아래 취약점을 클릭하여 확인합니다.

-외부에서 들어오는 파라미터가 file 클래스에 그대로 사용되며, 이러면 악의적인 파일 요청(../../../../etc/passwd)이 가능해집니다.

-그 위에 있는 코드를 확인하면 아래와 같이 외부값을 입력값으로 받게됩니다.
String file = s.getParser().getRawParameter(FILE, "");

-이제 위 코드에 필터를 만들어 입력된 파라미터의 악의적인 코드를 제거해보도록 하겠습니다.
SecurityFilter클래스에 아래 다운로드 취약점 제거 메소드를 추가합니다.
public static String PathTraversalFilter(String inputData) {
inputData = inputData.replaceAll("./", "");
inputData = inputData.replaceAll("../", "");
inputData = inputData.replaceAll("..\", "");
inputData = inputData.replaceAll("\\", "");
return inputData;
}

-그리고 취약 코드 아래 다음과 같이 input값(file)을 필터링합니다.
String file = s.getParser().getRawParameter(FILE, "");
file = SecurityFilter.PathTraversalFilter(file);

-자 이제 방어코드를 짰으니 테스트해봐야겠죠?
다들 한번씩 해보세요~~^^

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now