모두CBT

<보기>와 같은 ASP 코드에 대해서, 다음 중 SQL In… | [법원직 9급 전산·사서 정보보호론] 26년 1회차 기출문제 상세 페이지

1[법원직 9급 전산·사서 정보보호론] 26년 1회차
<보기>와 같은 ASP 코드에 대해서, 다음 중 SQL Injection이 성공하는 user 입력이 아닌 것은?(단, DBMS는 Microsoft SQL Server를 기준으로 한다)
< 보 기 >
set ok = execute( "SELECT * FROM Users
WHERE user=' " & form(“user”) & " '
AND pwd=' " & form(“pwd”) & “ '” );

if not ok.EOF
login success
else fail;
1
' or 1=1 --
2
' ; DROP TABLE Users --
3
' ; exec xp_cmdshell ′net user badguy badpwd / ADD′ --
4
' pwd=1234 --
해설

SQL Injection이 성공하지 않는 입력은 ' pwd=1234 --이다. 완성된 쿼리가 문법 오류가 되어 실행되지 않기 때문이다.

입력값은 작은따옴표 안에 그대로 이어 붙으므로, 입력의 첫 작은따옴표가 문자열을 닫고 --가 뒤의 비밀번호 조건을 주석 처리한다. 따라서 닫힌 문자열 뒤에 유효한 SQL 구문이 이어져야 공격이 성립한다. 이 입력은 user=' ' pwd=1234가 되어 문자열 뒤에 연산자나 문장 구분자 없이 식이 이어지므로 구문 오류가 난다.

  • ' or 1=1 --: 조건이 user=' ' or 1=1이 되어 항상 참이므로 모든 행이 반환되고 ok.EOF가 거짓이 되어 로그인이 우회된다.
  • ' ; DROP TABLE Users --: SQL Server는 세미콜론으로 이은 여러 문장을 함께 실행하므로, 앞 SELECT 문 뒤에 Users 테이블 삭제 문장이 실행된다.
  • ' ; exec xp_cmdshell … --: 같은 방식으로 확장 저장 프로시저를 호출해 운영체제 명령으로 계정을 추가한다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[법원직 9급 전산·사서 정보보호론] 26년 1회차 25문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요법원직 9급 전산·사서 정보보호론 기출문제 암기장 전체 보기