SQL - 문제 미리보기
문제 1802
medium
다음 로그인 코드에서 SQL Injection 공격이 성공하는 입력은?
```sql
-- 서버 코드:
uName = getRequestString("username");
uPass = getRequestString("userpassword");
sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"'
```
Username과 Password 필드에 어떤 값을 입력하면 로그인 검증을 우회할 수 있는가?
정답: B
⦁ 공격 입력 분석:
⦁ Username: `" OR ""="`
⦁ Password: `" OR ""="`
⦁ 실제 생성되는 SQL:
```sql
SELECT * FROM Users WHERE Name ="" OR ""="" AND Pass ="" OR ""=""
```
⦁ 논리 구조 분석:
⦁ `Name =""`: FALSE (빈 문자열과 비교)
⦁ `""=""`: TRUE (빈 문자열끼리 비교)
⦁ `OR TRUE`: 전체 조건이 TRUE
⦁ 결과: 모든 사용자 레코드 반환
⦁ 공격 성공 이유:
⦁ 따옴표(`"`) 문자를 이용해 SQL 구조 변경
⦁ 원래 조건을 무력화하고 항상 참인 조건 추가
⦁ AND 연산자보다 OR 연산자가 우선하여 전체 조건 우회
💡 학습 팁
이 문제를 포함한 SQL 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.