Security

SpringBoot로 Log4j 취약점(Log4shell) 공격,방어 실습

SK_MOUSE 2022. 1. 19. 00:31
반응형

참고 유튜브링크

 

목표:

1. Spring Boot에서 기본 로그설정인 Logback을 Log4j로 바꾼 후 취약서버로 만든 후 공격을 시도합니다.

2. Log4j2 취약점을 이용해 웹서버에 악성 요청 보낼 경우 웹 서버에 어떤 일이 일어나는지 확인합니다.

3. log4j2의 버전을 올려서 방어가 되는지 확인합니다.


Postman으로 요청을 전송해본다.

spring-boot initializer로 아래와 프로젝트를 같이 만들어준다.

더보기
더보기
더보기

소스코드 보기

 

HomeController.java

@RestController
public class HomeController {
    Logger log = LoggerFactory.getLogger(HomeController.class);

    @RequestMapping("/")
    public String index(String name){
        log.debug("index! name:{}", name);
        return "index";
    }
}

Log4shellServerApplication.java

@SpringBootApplication
public class Log4shellServerApplication {

	public static void main(String[] args) {
		System.setProperty("com.sun.jndi.ldap.object.trustURLCodebase", "true");
		SpringApplication.run(Log4shellServerApplication.class, args);
	}

}

 

application.properties

logging.level.com.skmouse=TRACE

 

나머지 코드는 하단 참고

아래와 같이 POST로 전송시 이름이 로그에 이름이 찍힌다.

자 이제 log4j를 사용하기 위해 pom.xml을 수정해준다.

pom.xml 설정
추가로 springboot를 사용하기 때문에 log4j 취약점이 있던 2.14.1로 버전을 바꿔준다.

 

추가로 java 버전에서 막는것을 낮춰주기 위해 설정을 더 진행한다.

위와 같은 프로퍼티 설정이 필요.


이제 처음에 했던 것처럼 post를 날려주면

이러한 에러가 나온다.

이러한 에러는 겉으로 보기엔 아무렇지 않아보이지만, 특정 ip주소의 프로그램 실행을 요청하게된다면

다른 ip주소에서 프로그램 실행하는 환경 : JNDIExploit 검색ㄱㄱ 
프로그램이 실행되는모습

위와 같이 프로그램이 강제로 실행된다.

반응형