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);
-자 이제 방어코드를 짰으니 테스트해봐야겠죠?
다들 한번씩 해보세요~~^^
이번에는 파라미터에 디렉토리명을 넣어서 공격하는 다운로드 취약점을 방어했네요~😁
네 기초적이지만 많이 나오는 취약점입니다.
다운로드 취약점에서 시작되는 공격은 시스템 conf를 다운로드받아 DB접속정보들을 탈취하는 경우가 크리티컬하면서도 많이 발생합니다.
말만 들어도 무섭네요. DB정보 탈취라니... 조심해야겠어요.
Posted using Partiko Android
Congratulations @ziqon! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
Award for the number of posts published
Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word
STOP
Do not miss the last post from @steemitboard: