[웹해킹] SQL 인젝션 공격 실습 - WHERE 구문 우회

 

DVWA Security Level을 Low로 설정한 후 SQL Injection 페이지로 간다.

 


user ID를 입력하는 폼이 있다. 여기에 1이라는 값을 넣으면 ID가 1인 사용자에 대한 정보가 출력된다.

 

 

 

위와 같은 페이지가 있을 때 SQL Injection 공격에 취약한지 알아보는 가장 기본적인 방법은 작은 따옴표를 입력해 보는 것이다. 작은 따옴표를 입력해보자.

 

취약한 페이지의 경우 위 페이지 처럼 sql 관련 에러가 발생한다. 그 이유는 소스 코드를 보면 알 수 있다.

 

 

 

 

 

user_id 부분을 보면 사용자가 입력한 값은 $id라는 변수로 들어가게 되는데 이 $id라는 변수는 이미 작은 따옴표로 둘러싸여 있다. 만약 여기에 작은 따옴표가 하나 더 들어오게 되면 작은 따옴표가 총 세 개가 되면서 에러가 발생하게 되는 것이다. 이렇게 비정상적인 문자를 입력 했을 때 sql 쿼리문이 잘못되어 에러가 발생 하면 그 페이지는 sql 쿼리문을 이용하여 처리가 된다는 뜻이다. 그뿐 아니라 sql 인젝션 공격이 성공할 가능성이 아주 높아진다. 왜냐하면 우리가 입력한 값으로 인해 sql 쿼리문이 바뀌었기 때문이다. 그 말은 우리가 sql 쿼리문을 조작할 수 있다는 의미이다.

 

 


이번에는 user ID에 1'or'1'='1 을 입력해 보겠
다.

 

 

 

이번에는 user ID에 '# 을 넣어 보도록 한다. 이번에는 아까 작은따옴표를 넣었을 때와는 달리 에러가 발생하지 않는다. 그 이유는 mysql DB에서 # 이후의 내용이 다 주석으로 처리되어 쿼리문 구조에 영향을 주지 않기 때문이다. 따라서 mysql을 공격 할 때는 # 을 끝에 넣어주고 내가 원하는 명령을 실행할 때 혹시 쿼리문의 구조가 깨져서 공격에 실패하는 것을 방지할 수 있게 된다. 참고로 다른 DB의 경우에는 # 대신 -- 를 이용하여 주석처리 할 수 있다.

댓글

Designed by JB FACTORY