인프런 커뮤니티 질문&답변

Hyun Jo님의 프로필 이미지

작성한 질문수

모의해킹 실무자가 알려주는, SQL Injection 공격 기법과 시큐어 코딩 : PART 1

공격 분석

쿼리 결과 오류

해결된 질문

작성

·

48

·

수정됨

1

image.png

코드는 이렇습니다

중간에 echo는 제가 찍어본 것이고

admin'-- 이렇게 입력하면

query : 'select * from member where id='admin'--' and pw='b59c67bf196a4758191e42f76670ceba''

쿼리는 이렇게 찍히는데

 

Fatal error: Call to a member function fetch_assoc() on a non-object in <b>C:\APM_Setup\htdocs\login\loginAction.php

 

결과값이 없다고 오류가 나버립니다.

image.png

mysql에서 직접 admin'-- 이렇게 넣어봐도 잘 나오는데...

 

뭐가 문제일까요?

 

+강의 뒷부분의 'or1=1-- 도 넣으면 에러납니다.

image.png

 

답변 2

1

Hyun Jo님의 프로필 이미지
Hyun Jo
질문자

바로 다음 강의에 정답이 있었네요;;

mysql의 주석 --는 앞뒤로 공백이 존재해야한다

0

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

Hyun Jo님이 제기하신 문제는 SQL 쿼리 작성 시 부적절한 주석 처리 때문에 발생할 가능성이 큽니다. 현재 사용하고 계신 쿼리에서 admin'-- 같은 입력이 주어지는 경우, SQL 주석으로 인해 쿼리의 나머지 부분이 무시되어, 의도치 않은 쿼리가 실행될 수 있습니다. 특히, PHP에서의 fetch_assoc() 함수가 호출되면서도 해당 객체가 반환되지 않은 상황은 query() 메서드가 실패했을 때 발생할 수 있습니다. 이는 query() 결과가 false일 경우에 발생하며, 보통은 SQL 문법 오류나 쿼리 실행 실패로 인해 query()가 실패하게 됩니다.

  • SQL 주석 문제:
    admin'--를 입력할 경우, -- 뒤의 내용은 SQL에서 주석 처리되어 무시됩니다. 따라서, SQL 쿼리가 select * from member where id='admin'까지만 실행되고, and pw='' 부분은 무시되는 상황이 발생할 수 있습니다. 이로 인해, 데이터베이스 쿼리가 실패하거나 예상 외의 결과가 반환됩니다.

  • 해결 방안:

    1. 준비된 쿼리를 사용하여 쿼리를 실행하면 SQL 인젝션 공격을 방지할 수 있습니다. PHP에서는 mysqliprepare() 메서드, 혹은 PDO의 prepare() 메서드를 사용할 수 있습니다.
    2. 사용자 입력을 받을 때 항상 입력값을 필터링하고 검증하여 이러한 문제를 사전에 차단해야 합니다. 일반적으로 데이터베이스와 상호작용 전 사용자 입력값을 mysqli_real_escape_string()을 사용하여 탈출 문자를 추가할 수도 있습니다.
  • 참고할 수 있는 유사한 게시물:

    1. SQL 인젝션 관련하여 질문드립니다.

해당 링크에서는 SQL 인젝션 공격의 원인 및 유사 사례에 대한 해결책을 포함하고 있습니다. 입력 값 필터링, 준비된 쿼리 사용 등 기본적인 보안 조치에 대한 설명이 포함되어 있습니다.

현재 상황에서는 데이터베이스 연결 및 쿼리 실행 중 문제 해결을 위해 쿼리 디버깅 및 준비된 쿼리 사용을 중점적으로 고려해 보세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hyun Jo님의 프로필 이미지

작성한 질문수

질문하기