Web/Web vulnerabilities

SQL Injection 실습

__bo0o_ 2019. 4. 29. 02:27

 

SQL 삽입(SQL Injection)은

응용 프로그램 보안 상의 허점을 의도적으로 이용해,

악의적인 SQL 문을 실행되게 함으로써

데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 방법이다.

 

SQL Injection 실습을 위해

가상 환경에서 만든 홈페이지에서

웹 취약점인 SQL Injection을 이용해 로그인 해보도록 하겠다.

 

위와 같이 ' or 1=1#로 로그인이 되는 것을 확인할 수 있고

' or 1=1#

저 SQL Injection 구문을 해석해보자면

 

로그인을 하는 과정에서

사용자가 입력한 id와 pw 값이

데이터베이스에 저장된 값과 일치 하는지 조회를 하는데

그 부분이

위 PHP 코드의 select * from members where mem_userid='$id' 부분이다.

 

이 SQL 구문을 이용해

SQL Injection 공격을 하면

select * from members where mem_userid='' or 1=1#$id' ...

즉 false or true #(mysql 주석)

= True로 로그인이 되는 것이다.

 

 

따라서 위와 같은 악의적인 SQL 쿼리를 삽입할 수도 있기 때문에

유저에게 받은 값을 직접 SQL로 넘기면 안된다.

요즘에 쓰이는 거의 모든 데이터베이스 엔진은 유저 입력이 의도치 않은 동작을 방지하는

escape 함수와 prepared statement를 제공한다고 한다.

 

 

 

참고

https://namu.wiki/w/SQL%20injection

'Web > Web vulnerabilities' 카테고리의 다른 글

Directory listing 취약점  (0) 2019.04.30