본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


웹 취약점(Web vulnerability)

5. SQL 인젝션(OS Command Execution)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2021. 11. 29.

 

웹 취약점 중 한가지인 SQL 인젝션은 LDAP인젝션과 비슷한 개념으로, 사용자가 입력하는 내용에 SQL과 관련된 문법을 넣어서 해당 문법이 where 조건절에 실행되어 정보를 조작하거나 탈취하는 취약점 입니다.

"LDAP 인젝션은 특수문자에 대한 쿼리문 실행" 에 대해서 강조한다면,

"SQL인젝션이 조건절에 대한 쿼리문 실행" 에 좀 더 집중을 두고 있습니다.

 * 거의 비슷한 내용 입니다.

 

해당 취약점 공격은, 사용자 입력필드에서 쿼리 조건문을 삽입하여서 정보의 위변조가 쉽게 이루어 질 수 있습니다.

가령, 로그인이 필요한 기능에서 사용자의 비밀번호 입력을 하는 부분에 "or (1=1)"이라는 값을 대입하여 실행이 가능하다면, 암호값 일치여부와 상관 없이 로그인을 할 수 있기 때문 입니다.

 

 

#방법1

이를 해결하기 위해서는 특수기호에 대한 정규식을 조사하여 제거하는 기능이 필요합니다.

아래 메소드는 특수문자를 전부 제거하는 간단한 기능 입니다.

//한글, 영문, 숫자 이외의 모든 특수문자를 치환 합니다.
public static String StringReplace(String str){       
    String match = "[^\uAC00-\uD7A30-9a-zA-Z]";
    str = str.replaceAll(match, " ");
    return str;
}

이러한 메소드를 필터(Filter)나 Aop기능에 붙여서 불필요한 문자가 대입되는 것을 방지 하여야 합니다.

 

#방법2

프레임워크의 기술 기반이라면 좀 더 쉽게 조치할 수 있습니다.

Srping에서 mybatis를 사용 한 다면, 샵(#{}) 형식을 사용하지 않고 달러(${}) 형식을 사용하면 간단하게 조치가 가능 합니다(문자열로 받기 때문에).

또한 JPA 방식의 기술을 사용하면(예: Hibernate) 대입되는 값 또한 문자열로 인식하므로 간단하게 조치가 가능 합니다.

 

 

이상으로 웹 취약점 중 한가지인 SQL 인젝션 대비 방법에 대해서 살펴보았습니다.

LDAP 인젝션과 매우 비슷하여 내용이 비슷한점 양해 부탁드립니다.  :-)

궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻

 

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글