2017. 9. 1. 21:41ㆍWebHacking/Web
[ 원리 파악 하기 ]
SQL injection
- 데이터베이스와 연동되어 있는 애플리케이션의 입력값을 조작하여 DBMS가 의도되지 않은 결과를 반환하도록 하는 공격기법
- 해당 애플리케이션에서 전송되어 오는 입력값에 대해 필터링이 없을경우 발생한다
* DBMS: DataBase Management System )
[ 그림1 ]
게시판에 게시글을 작성하였고, 해당 게시글에는 파일을 첨부하였습니다
해당 파일의 조회수를 알려주는 " Download : 10 " , "Download : 1 " 이 보입니다
파일을 다운로드하면 해당 Download가 1씩 증가합니다
원리를 파악하기 위해서 페이지 소스코드를 확인해보도록 하겠습니다
[ 그림2 ]
파일이름을 클릭하면 " http://address/download.php " 로 이동하도록 되어있습니다
거기에 GET방식으로 변수들을 전달하고 있습니다
다음으로 download.php 페이지 소스코드를 확인해보겠습니다
[ 그림3 ]
해당페이지의 php소스코드를 열어서 확인해보았습니다
<?php include lib.php ?> lib.php파일을 참조하고 있었고, mysql_query() 함수로 쿼리문을 실행하고 있습니다
해당 쿼리문이 어떻게 작동하는지 확인하고 해당 쿼리문을 조작해서 공격을 시도합니다
먼저 사용되어진 변수들이 의미하는 것이 무엇인지 알아야합니다
[ 그림4 ]
lib.php 파일을 확인해보니
$t_board 는 zetyx_board로 초기화되고 있습니다
$id 는 GET방식을 통해서 board로 초기화 된다
$no 는 GET방식을 통해서 15으로 초기화 된다
$filenum 은 GET방식을 통해서 1로 초기화 된다
그림3의 쿼리문을 완성시키면 다음과 같습니다
UPDATE zetyx_board_board SET download1=download1+1 WHERE no=15 |
Table명 : zetyx_board_board
Column명 : download1
=> no=10 의 조건을 만족하는 행의 download1 컬럼을 1 증가시킨다
각 변수들의 의미는 아래쪽에서 설명하겠습니다
[ 그림5 ]
사용명령어 : mysqld_safe--log=[파일명] & // ( mysqld데몬 백그라운드로 동작 )
로그파일 : /var/lib/mysql/[지정한파일명]
httpd데몬을 통해서 mysql을 실행시키는 것이아니고 mysqld데몬을 직접 실행시킵니다
아파치 웹 서버의 쿼리문의 로그를 남기는 로그파일을 생성시켜서 작동하는 쿼리문이 무엇인지 확인할 수 있다
[ 그림6 ]
UPDATE zetyx_board_board SET download1=download1+1 WEHRE no='15' 쿼리문의 실행된 것이 확인된다
[ 그림7 ]
mysql을 이용해 직접 DB에 들어가 구조를 파악해보았습니다
쿼리문에서 사용하는 table명 : zetyx_board_board 를 확인할 수 있습니다
해당 테이블의 구조를 확인해보도록 하겠습니다
[ 그림8 ]
[ 쿼리문에서 사용하는 변수 ]
id: zetyx_board_() : ()를 결정하는 변수
no: 게시판에 올린 게시글을 식별하는 번호 ( 15번째 게시글이여서 no=15 )
download1: 게시글의 첫번째 파일의 조회수
download2: 게시글의 두번째 파일의 조회수
GET방식과 $filenum변수를 이용해 download+"x" 에서 x를 결정하여 어떤 파일의 조회수를 증가되는지 결정된다
[ 그림9 ]
15번째 게시글(no=15)의 첫번째 파일의 조회수(download1)를 검색
[ 그림10 ]
웹 페이지에서도 DB에 저장된 조회수와 똑같은 10을 가지고 있습니다
< 결론 >
[ 작동원리 ]
웹 페이지에서 파일이름을 클릭해서 " http://address/download.php " 페이지로 접속 => 쿼리문 실행
=> DB변경 => 웹 페이지에 반영
살펴본 바와 같이 GET방식을 이용해 쿼리문에 필요한 변수들을 전달하고, php의 mysql_query()함수를 이용해 쿼리문을 실행시킨다
=> 쿼리문이 실행되고, DB의 내용을 변경시킨다 ( 이때, 쿼리문을 조작해서 전달할 수 있다 )
다음 게시글에서 SQL injection을 직접 시도해보도록 하겠습니다
'WebHacking > Web' 카테고리의 다른 글
SQL injection 실습 / Blind SQL injection (0) | 2017.09.05 |
---|---|
SQL injection 개념실습 (0) | 2017.09.04 |
아파치 웹 서버 설정 파일 / 확장자 우회 / 웹쉘 / 바인드쉘 / 리버스쉘 (0) | 2017.08.31 |
CSRF ( Cross Site Request Forgery ) (0) | 2017.08.29 |
XSS ( Cross Site Scripting ) 개념 및 실습 (1) | 2017.08.28 |