[기초 공부] SQL injection 공격

백현우·2023년 10월 9일
0

영상 후기

목록 보기
54/67

movie

  • 인젝션 테스트 - 로그인할때 ID 비밀번호 입력하는 창에 ' " ') ") 등을 입력해보면 원래와 다른 에러 메세지가 나올때가 있는데, 이런것은 SQL 인젝션 공격하기 매우 쉬운 인풋이라는 뜻이다.

  • 에러가 메세지가 바뀌는 이유는 로그인 하려면 유저가 입력한 ID와 비밀번호가 DB에 존재하는지 확인해야 하는데 개발자들은
    이런 SQL 코드를 작성할 것이다.
    문제는 유저가 입력한 것을 그대로 집어 넣을때 유저가 따옴표 같은것을 넣게되면 따옴표는 SQL문법의 일부이기 때문에 이상한 에러가 나오게 된다.

  • 이런 인풋은 SQL 문법을 집어넣을 수 있다는 것이므로
    실제 있는 아이디를 tuser 이라고 가정하고
    tuser' -- 라고 입력하면 뒤의 코드가 모드 주석처리되어 패스워드 확인 부분이 주석처리 되기때문에
    강제로 로그인이 되게 된다.

  • 또는 tuser' OR 1=1 -- 라고 입력하면
    둘중 하나를 만족하는 테이블 전체를 출력하는데 그렇게되면 서버는 그중에 맨 위에 있는 행을 사용하게 되는데, 보통 맨 위에는 테스트 계정 또는 어드민 계정이 있기 때문에 어드민 유저로 로그인이 되게된다.

  • 유니온 셀렉트 같은 문법을 사용하면 쉽게 다른 테이블의 내용을 출력할 수 있게 된다.
    이런 사이트는 뒤의 번호를 바꾸면 작가 소개를 나오게 하는데
    이렇게 SQL 문법을 입력해버려도 동작하는 헛점이 있기 때문에

    이렇게 인식하게 되고
    이렇게 출력되게 된다.

  • SQL 인젝션의 예방법은
    가장 쉬운 방법은 parameterized query 를 사용하는 것이고 이것은 유저가 입력한 값을 SQL 쿼리문에 집어넣어야 할 경우
    이런식으로 짜면 유저가 입력한 값을 알아서 안전하게 바꿔주기 때문에 인젝션 위협에 노출될 경우가 현저히 줄어들고

    두번째는 stored provedure 을 사용하는 것이지만 코드의 양이 늘어나기 때문에 귀찮아질 수 있고,

    세번째로는 ORM 을 사용하는 것이고, ORM이 보통 인젝션 공격을 알아서 예방해준다.

    네번째는 인젝션 공격에 자주 사용되는 코드들을 (특수 기호들을) 미리 걸러주면 된다.

0개의 댓글

관련 채용 정보