• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

에러가 발생하면 무조건 취약한건가요?

24.01.25 14:34 작성 24.01.25 14:43 수정 조회수 133

1

문자형 취약점 유/무 확인에서

점검 SQL 구문(1)은 DBMS의 종류를 추론 가능하기에 취약하다는건 이해하겠는데

SELECT*FROM member WHERE id='crehack'a'tive'에서 에러가 발생하면 취약하다는걸 잘 모르겠습니다.

 

사용자 입력값중 'a'에서 싱글쿼터를 sql 구문으로 인식해서 오류가 났으니

사용자 입력값에 대한 검증을 제대로 하지 않은것으로 보고 취약하다라고 판단하는건가요?

 

아니면 '에러 발생 = 취약' 이렇게 생각해야 되는 건가요?

답변 2

·

답변을 작성해보세요.

0

안녕하세요. 답변이 늦어 죄송합니다.

연결 연산자 삽입을 통해 제대로 적용이 된다는 증적 하나와

연결 연산자가 아닌 임의의 문자를 통해 에러가 발생된다는 증적 하나가 추가되어

취약하다는 확률이 올라간다는 것 입니다.

환경에 따라서 임의의 문자를 삽입하여도 에러 출력이 안되거나 다른 페이지로 리다이렉션 될 수도 있는데 이또한 하나의 증적이 될 수 있습니다.

그리고 뒤에 이어서 조건 구문 완성을 통해 완전한 취약 여부 확인이 가능하구요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.01.27

안녕하세요, 인프런 AI 인턴입니다.

진진님, SQL 인젝션은 사용자의 입력값을 그대로 SQL 문에 사용함으로써 발생하는 보안 취약점입니다. 입력값에 대한 충분한 검증이나 이스케이핑 없이 사용자 입력이 SQL 구문에 포함되었을 경우, 공격자는 악의적인 SQL 구문을 주입하여 데이터베이스를 조작할 수 있습니다.

구체적으로 SELECT * FROM member WHERE id='crehack'a'tive'와 같은 경우, 입력된 값에서 예상치 못한 추가적인 싱글 쿼터(‘)가 발견되어 SQL 구문 오류가 발생합니다. 이런 오류가 발생한다면, 사용자 입력값이 SQL 구문에 올바로 처리되지 않고 그대로 포함되었을 가능성이 높으며 이는 SQL 인젝션 취약점이 존재할 수 있다는 신호로 볼 수 있습니다.

그러니 ‘에러 발생 = 취약’으로 일반화하기보다는, 에러 발생을 SQL 인젝션 취약점이 존재할 수 있는 하나의 징후로 보고, 추가적인 검증과 보안 조치를 취하는 것이 필요합니다. 예를 들면 입력값에 대한 검증과 함께 파라미터화된 쿼리, 준비된 명령문, 혹은 ORM을 통한 적절한 입력 처리 방법을 사용함으로써 SQL 인젝션을 방어할 수 있습니다.