관리 메뉴

FU11M00N

7-3. bee-box 를 사용하여 SQL injection 알아보기! 본문

Web Hacking/bee-box

7-3. bee-box 를 사용하여 SQL injection 알아보기!

호IT 2020. 3. 22. 17:48

안녕하세요! 이번 시간엔 sqli_2.php 페이지를 sql injection 해보겠습니다!

먼저 SQL 인젝션은 사용자가 입력한 값을 서버에서 제대로 검증을 하지 않아

서버에서 DB의 쿼리문으로 인식하여 DB안의 정보가 노출되거나 인증이 우회되는 취약점이다.

SQL 인젝션은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있고 이것을 이용해

SQL 쿼리를 변수에 입력을 하여 DB안의 정보를 탈취당 할 수가 있다.

SQL injection은 인젝션 부분에서도 가장 중요한 부분이고 잘 알아야 할 부분이다!

 

사진 1-1

1. 레벨 low

 

사진 1-2

 sqli_2.php 페이지의 모습입니다. 

 

샤잰 1-3

드롭다운 메뉴에 있는 'GO'를 클릭하면 URL에 GET방식이라서 'move'라는 변수가 노출됩니다!

그럼 항상 그랬듯 'movie'라는 변수 안에 '를 삽입하여 공격이 가능한지 확인해보겠습니다! 

 

사진 1-4

'를 삽입하니(URL에 보이는 건 '가 인코딩 된 %23입니다!) 문장이 에러가 됐다고 뜹니다.

즉 공격이 가능하다는거네요!!  여기서 'movie' 안에 없는 데이터 값 즉 0이나  11 이상의 숫자(1~10은 이미 있는 값이기 때문)를 넣어서 쿼리를 삽입해야 합니다!

 

사진 1-5

사진 1-5와 같이 쿼리문

http://192.168.32.128/bWAPP/sqli_2.php?movie=0%20union%20select%201,@@version,3,4,5,6,7&action=go을

 

URL에 삽입하니 버전과 취약한 칼럼의 숫자가 나왔습니다!

사진 1-6

 

http://192.168.32.128/bWAPP/sqli_2.php?movie=0 union select 1, table_name,3,4,5,6,7 from information_schema.tables&action=go 

으로 테이블의 이름을 알아내는 쿼리문을 작성하니 테이블이 하나밖에 안 뜹니다.

페이지 자체가 테이블이 하나밖에 안 뜨는 형식인 것 같으니 이를 배제할 수 있는 쿼리문을 작성하기 위해 

 

해당 사용하고 있는 MySQL 데이터 베이스 있는 기본적인 테이블 'mysql ' , information_schema에 포함되지 않는 

테이블 스키마와 테이블 명 칼럼 이름을 확인하기 위해서 쿼리문을 작성해보자!!!

 

 

 

사진 1-7

http://192.168.32.128/bWAPP/sqli_2.php?movie=0%20union%20select%201, table_schema, table_name, column_name,5,6, 7%20from%20information_schema.columns%20where%20table_schema!=%27 mysql%27%20 and%20 table_schema!=%27 information_schema%27&action=go

 

그럼 'blog'라는 테이블에서 가장 첫 번째 칼럼은 'id' 인 것으로 정보가 확인되었습니다.

이 정보를 통해 사용자의 중요한 정보를 탈취할 수도 있기 때문에 이를 우회해서 막아야 합니다!!

2. 레벨 High(대응방안)

 

사진 1-8

레벨 '상'에서는 '를 삽입해봐도 신텍스 에러라는 문장이 안 뜹니다.

 

항상 그랬듯 소스코드를 봅시다!!

 

사진 1-9

sqli_2-ps.php에 내용이 있고 우회 함수를 사용하지 않고 

fetch_object 함수를 사용하여 객체로 생성합니다.

사진 1-10

그다음 moive 변수에 입력한 숫자 값이 'id' 변수에 대입됩니다 id 변수는'recordeset'에 저장된 데이터 베이스 내용의

순서 번호를 뜻하고 'bind_param' 함수를 사용하여 데이터 베이스에서 사용하는 변수들을 불러와 execute 함수로 쿼리를 실행합니다. 그리고 'bind_result' 함수로 각 변수를 연결하고 'store_result' 함수로 쿼리 결과를 저장합니다!

 

즉 데이터베이스 안에서 칼럼을 개별로 호출하여 연결하는 방식을 사용하여 sql 인젝션을 대응합니다.

 

Reference by 비박스 환경을 활용한 웹 모의해킹 완벽 실습


 

Comments