GitLabAuth

공부는 혼자하는 거·2021년 11월 20일
0

업무

목록 보기
1/17

gitlab 의 RCE 취약점으로 인해 사내 gitlab을 허용된 ip 만 등록시키는 주소로 입력하는 사이트를 만들기로 했다. 간단하게 페이지 하나만 만들면 되는 사내 프로젝트로 하루만에 급하게 만들었다. Token값은 UUID 로 만들었다.

View단은 mustache 를 이용해 만들었고 JPA를 활용했다. 이떄가 아니면 언제 JPA를 사용하겠나. 이런 간단한 사내 프로젝트는 빨리 JPA를 통해 활용하기로 했다.

버튼을 통해 AJAX 요청을 컨트롤러에게 날리면, HttpServletRequest 를 통해 client의 ip를 가져오서 DB에 insert 하고, emul 에게 rest 요청을 날려, 등록하였다는 트리거를 구현하였다.

@RequestMapping("/register")
    public @ResponseBody CMRespDto registerIp(HttpServletRequest request, String reason, String clientToken){

				String ip = CMUtills.getIp(request);

        log.info("ip 가져오기: " + ip);
        
        --- 생략-----
public static String getIp(HttpServletRequest request) {

        String ip = request.getHeader("X-Forwarded-For");

        log.info(">>>> X-FORWARDED-FOR : " + ip);

        if (ip == null) {
            ip = request.getHeader("Proxy-Client-IP");
            log.info(">>>> Proxy-Client-IP : " + ip);
        }
        if (ip == null) {
            ip = request.getHeader("WL-Proxy-Client-IP"); // 웹로직
            log.info(">>>> WL-Proxy-Client-IP : " + ip);
        }
        if (ip == null) {
            ip = request.getHeader("HTTP_CLIENT_IP");
            log.info(">>>> HTTP_CLIENT_IP : " + ip);
        }
        if (ip == null) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            log.info(">>>> HTTP_X_FORWARDED_FOR : " + ip);
        }
        if (ip == null) {
            ip = request.getRemoteAddr();
        }

        log.info(">>>> Result : IP Address : " + ip);

        return ip;

    }

Emul 은 트리거가 발생되면, DB에 접근해서 등록된 IP 정보들을 갖고와서 필드값들을 업데이트시켜주고, 그 DB에 저장된 ip 정보들을 갖고 와서, cmd 명령어를 직접 실행해서, IP를 허용시켜준다. 트리거가 없다하더라도, 스케줄링을 통해 50초간격으로 지속적으로 DB에 접근해서 등록된 IP 정보들을 갖고와서 필드값들을 업데이트시켜준다.

profile
시간대비효율

0개의 댓글

관련 채용 정보