
1) 쿼리문 조작
2) DB 통신 포트(3306) 노출로 인한 접근.


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

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

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

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

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


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

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

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

show databases; 명령어 입력


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

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

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

0.0.0.0은 모든 IP 허용.
systemctl restart mysql | mariadb

general_log를 1로 설정하면 DB 서버에서 실행되는 모든 명령 또는 접속 기록이 저장된다.
로그를 테이블에 저장.
use mysql;
SELECT * FROM general_log WHERE command_type="Connect";

기본 형식
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

ufw status vervose

ufw delete [num]



초기화 시 ufw가 비활성화 된다.
grant all privileges on *.* to 'user10'@'192.168.5.%' identified by '123456';
192.168.5.0 대역에서만 접근 가능한 유저 user10을 모든 DB에 권한을 줌과 동시에 생성.

마스터 서버에서 설정
/etc/mysql/my.cnf

/etc/mysql/mariadb.conf.d/50-server.cnf
수정 전
수정 후
bind-address = master IP
systemctl rstart mariadb
우선 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
scp backup.sql root@192.168.5.72:/root/backup.sql
unlock table;
슬레이브는 Ubuntu Server
/etc/my.cnf






systmectl restart mariadb
systemctl restart mysqld
use replica_db;

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