SQL 인젝션 공격 (3)
1. SQL 인젝션 공격 High 단계 실습
[그림 1-1] SQL 인젝션 공격
DVWA 레벨을 high로 설정한 후 SQL Injection 탭을 클릭하면 기존과는 다르게 영어로 된 링크가 있다. 이 링크를 클릭한다.
[그림 1-2] 소스코드
SQL 인젝션 공격에 앞서 소스코드를 확인하면 '$id' 뒤에 LIMIT라는 쿼리가 추가 되어 있는데 이 쿼리는 레코드의 개수를 제한한다. 현재 쿼리는 1로 제한 되어 있지만 이 부분을 우회하기 위해 주석처리를 한다면 우회가 가능하다.
[그림 1-3] SQL 인젝션 공격
앞에 값이 참이든 거짓이든 뒷 부분을 참으로 만들어 쿼리가 동작하는 구문을 삽입한다. 1' or '1'='1'#을 입력한 후 전송한다. #은 주석으로 소스코드에서 본 Limit 1을 우회하기 위해 사용된다.
[그림 1-4] 공격 성공
1' or '1'='1'#을 입력한 후 전송된 결과 SQL 인젝션 공격이 성공했음을 확인할 수 있다. Limit 1이 우회되면서 전체 데이터베이스의 정보를 출력된다.
[그림 1-5] 테이블 정보
테이블 정보를 확인하기 위해 union SQL 공격 구문을 삽입한다. 1' union select user, password from users#을 삽입하고 전송한다. Users 테이블에서 user, password의 컬럼을 숫자 1과 조합해 참을 만들어 추출한다는 쿼리다.
[그림 1-6] 테이블 내용
1' union select user, password from users# 쿼리 전송 결과 아이디, 패스워드로 보이는 정보들이 노출되었음을 확인할 수 있다. 패스워드는 암호화 되어 있지만 MD5 형식이고 구글에서 쉽게 평문으로 변환이 가능하다.