[DB_hacking] DB 보안

Song·2024년 9월 26일
post-thumbnail

공격

1. DB 공격 유형

1) 쿼리문 조작

2) DB 통신 포트(3306) 노출로 인한 접근.

2. 웹 쉘을 이용한 DB 설정 확인

웹 사이트에 웹쉘.php를 업로드해 게시판에서 웹 쉘을 열어준다.

웹 쉘에서 board_show.php 파일의 내용을 확인해본다.

파일 상단에 include로 dbconfig.php 파일을 로드하는 것을 볼 수 있다. 이는 db 설정 파일로 추정.

해당 db 설정 파일의 내용을 확인.

화면에 아무것도 나오지 않지만 마우스 우클릭 > 페이지 소스 보기를 눌러 페이지 소스를 확인해보면

IP, DB 이름, DB 유저 및 패스워드가 출력된다.


3. DB 정보 추출

DB 설정 정보를 이용해 DB에 query를 보내고 결과를 받을 수 있는 myquery.php 파일을 생성 후 게시판에 똑같이 업로드.

파일을 클릭하면 웹쉘과 동일하게 생긴 쉘이 출력되는데 여기에 DB 명령어를 입력하면 DB의 정보를 빼올 수 있다.

show databases; 명령어 입력

use webhack; 으로 DB 지정 후 show tables; 로 테이블 확인.

select * from member; 명령어로 member 테이블 내용 확인.


3. 원격접속 허용

1) 구문 수정

/etc/mysql/my.cnf파일 마지막 라인으로 이동하여 31라인에 구문추가한다.

0.0.0.0은 모든 IP 허용.

2) 시스템 재실행

systemctl restart mysql | mariadb


보안 설정

1. DB 접속 기록 확인

  • general_log를 1로 설정하면 DB 서버에서 실행되는 모든 명령 또는 접속 기록이 저장된다.

  • 로그를 테이블에 저장.

use mysql;

SELECT * FROM general_log WHERE command_type="Connect";

파이썬 코드


2. 방화벽(ufw) 설정

1) 규칙 추가


기본 형식

ufw [allow | deny | reject] from [source] to [destination] port [port_num] proto [Protocol_name]

mysql 허용 규칙

ufw allw from 192.168.5.0/24 to any port 3306 proto tcp

2) 규칙 확인

ufw status vervose

3) 규칙 제거

ufw delete [num]

4) 초기화

초기화 시 ufw가 비활성화 된다.

3. 유저 접근 권한

grant all privileges on *.* to 'user10'@'192.168.5.%' identified by '123456';

192.168.5.0 대역에서만 접근 가능한 유저 user10을 모든 DB에 권한을 줌과 동시에 생성.

4. DB 이중화

마스터 서버에서 설정

1) 파일 수정

/etc/mysql/my.cnf

/etc/mysql/mariadb.conf.d/50-server.cnf

수정 전

수정 후

bind-address = master IP

2) 데몬 재실행

systemctl rstart mariadb

3) DB 설정

우선 DB 생성

create database replica_db;

slave 유저 생성

grant replication slave on *.* to 'slave'@'%' identified by 'orange';

설정 적용

flush privileges;

무결성 유지

flush replication slave on *.* to 'slave'@'%' identified by 'orange';

로그파일 확인

show master status;

마스터 DB 백업

mysqldump -u root -p --all-databases --master-data > backup.sql

4) 백업 파일 slave로 전송

scp backup.sql root@192.168.5.72:/root/backup.sql

5) 무결성 해제

unlock table;

슬레이브 설정

슬레이브는 Ubuntu Server

1) 파일 설정

/etc/my.cnf

2) backup 파일 입력

3) 슬레이브 설정

확인

1) 마스터에서 table 생성

systmectl restart mariadb

2) 슬레이브에서 확인

systemctl restart mysqld

use replica_db;

users 테이블이 자동으로 생성된 것이 확인된다.

profile
안녕하세요

0개의 댓글