freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

Linux提权之rbash绕过
左家庄的赵姑娘 2023-09-03 15:33:21 285473

RBASH 绕过

什么是 RBASH

  • RBASH 是 Restricted BASH 的缩写,意思是受限制的 BASH。

  • RBASH 是一种特殊的 shell,它限制了用户的一些操作和权限,例如:

    • 不能使用 cd 命令来改变当前目录。

    • 不能使用 set 命令来改变环境变量或 shell 选项。

    • 不能使用 unset 命令来取消环境变量或 shell 函数。

    • 不能使用任何包含 / 符号的命令,除非它们在 PATH 环境变量中指定了。

    • 不能重定向输入或输出,例如使用 >, <, >>, << 等符号。

    • 只能执行 PATH 环境变量中指定的命令,而且 PATH 环境变量通常只包含一些基本的命令,例如 ls, cat, echo 等。

  • RBASH 的目的是为了提高系统的安全性,防止用户执行一些危险或不合法的操作。

为什么要绕过 RBASH

  • RBASH 的限制可能会给用户带来一些不便或困难,例如:

    • 不能访问一些需要特定目录或权限的文件或程序。

    • 不能执行一些需要重定向或管道的复杂命令或脚本。

    • 不能使用一些有用或有趣的命令或工具,例如 vim, ssh, git 等。

  • RBASH 的限制也可能会给用户带来一些挑战或机会,例如:

    • 想要探索系统的更多信息或功能,例如查看系统版本,运行服务,修改配置等。

    • 想要提升自己的技能或知识,例如学习 Linux 命令行,编程语言,网络安全等。

    • 想要完成一些特定的任务或目标,例如参加 CTF 比赛,渗透测试,黑客攻防等。

如何绕过 RBASH

  • RBASH 绕过的方法有很多,主要取决于 RBASH 的限制程度和用户的目标是什么。一般来说,RBASH 绕过的目的是获得一个正常的 BASH shell,或者执行一些被禁止的命令或操作。

  • 在本文章中,我们将介绍以下几种常见的 RBASH 绕过的方法,并举例论证它们的具体操作方式:

    • 使用 / 符号

    • 使用 cp 命令

    • 使用 ftp, gdb, more, man, less, vim, rvim 等命令

    • 使用 awk, find, expect, python, php, perl, lua, ruby 等编程语言或工具

    • 使用 ssh 命令

    • 使用 git 命令

    • 使用 pico 命令

    • 使用 vi 命令

使用 / 符号

  • 如果 RBASH 没有完全禁止使用 / 符号,那么用户可以尝试直接运行 /bin/bash 或 /bin/sh 来获得一个正常的 shell。例如:

rbash$ /bin/bash
  • 这个方法的原理是:RBASH 只限制了 PATH 环境变量中指定的命令,而不限制绝对路径的命令。因此,如果用户知道 bash 或 sh 的绝对路径,就可以直接运行它们,从而绕过 RBASH 的限制。

  • 这个方法的优点是:简单易用,不需要其他的命令或工具,只要有 / 符号就可以。

  • 这个方法的缺点是:容易被 RBASH 发现和阻止,只要 RBASH 禁止使用 / 符号,或者修改 bash 或 sh 的绝对路径,就可以防止这个方法的成功。

使用 cp 命令

  • 如果 RBASH 允许使用 cp 命令,那么用户可以把 /bin/bash 或 /bin/sh 复制到自己的目录下,然后运行它们。例如:

rbash$ cp /bin/bash .
rbash$ ./bash
  • 这个方法的原理是:RBASH 只限制了 PATH 环境变量中指定的命令,而不限制用户自己的目录下的命令。因此,如果用户把 bash 或 sh 复制到自己的目录下,就可以运行它们,从而绕过 RBASH 的限制。

  • 这个方法的优点是:比较灵活,不需要知道 bash 或 sh 的绝对路径,只要能够复制它们就可以。

  • 这个方法的缺点是:需要使用 cp 命令,如果 RBASH 禁止使用 cp 命令,或者限制用户的目录权限,就无法使用这个方法。

使用 ftp, gdb, more, man, less, vim, rvim 等命令

  • 如果 RBASH 允许使用 ftp, gdb, more, man, less, vim, rvim 等命令,那么用户可以在它们的交互模式下使用 !/bin/bash 或 !/bin/sh 来执行一个外部命令。例如:

rbash$ ftp
ftp> !/bin/bash
bash$ whoami
  • 这个方法的原理是:这些命令都有一个交互模式,可以让用户输入一些子命令或选项来控制它们的行为。其中,! 是一个特殊的子命令,表示执行一个外部命令,而不是这些命令本身的功能。因此,如果用户输入 !/bin/bash 或 !/bin/sh,就可以执行 bash 或 sh,从而绕过 RBASH 的限制。

  • 这个方法的优点是:比较隐蔽,不容易被 RBASH 发现和阻止,因为这些命令本身都是合法的,而且 ! 子命令不会在历史记录中显示。

  • 这个方法的缺点是:需要使用这些命令中的一个,如果 RBASH 禁止使用这些命令,或者修改它们的行为或选项,就无法使用这个方法。

  • 除了 ftp 命令之外,其他几种命令也可以用类似的方式来绕过 RBASH。以下是一些操作实例:

rbash$ gdb -q
(gdb) !/bin/bash

rbash$ more /etc/passwd
!/bin/bash

rbash$ man man
!/bin/bash

rbash$ less /etc/passwd
!/bin/bash

rbash$ vim -Z -c ':!/bin/bash'

rvim - 命令是用来启动一个受限制的 vim 编辑器的。其中,- 选项表示从标准输入读取文本,-Z 选项表示启动受限制的模式,-c 选项表示执行一个 vim 命令。因此,如果用户输入 rvim - -Z -c ‘:!/bin/bash’,就可以在 vim 的命令模式下使用 :!/bin/bash 来执行一个外部命令,从而绕过 RBASH 的限制。例如:

rbash$ rvim - -Z -c ':!/bin/bash'

使用 vi 命令

  • 如果 RBASH 允许使用 vi 命令,那么用户可以利用它的 :set shell=/bin/bash 命令来执行 /bin/bash。例如:

rbash$ vi
:set shell=/bin/bash
:shell
  • 这个方法的原理是:vi 命令是一个经典的文本编辑器。其中,:set 命令表示设置一个选项的值,:shell 命令表示执行一个 shell。默认情况下,vi 会使用 RBASH 作为 shell,但是用户可以通过 :set shell=/bin/bash 来修改 shell 的值为 /bin/bash。因此,如果用户使用 :shell 命令,就可以运行 bash,从而绕过 RBASH 的限制。

  • 这个方法的优点是:比较简单,不需要复制或修改 bash,也不需要使用其他的命令或工具,只要有 vi 命令就可以。

  • 这个方法的缺点是:需要使用 vi 命令,如果 RBASH 禁止使用 vi 命令,或者限制它的选项或参数,就无法使用这个方法。

使用 awk, find, expect, python, php, perl, lua, ruby 等编程语言或工具

  • 如果 RBASH 允许使用 awk, find, expect, python, php, perl, lua, ruby 等编程语言或工具,那么用户可以利用它们的系统调用功能来执行 /bin/bash 或 /bin/sh。例如:

rbash$ awk 'BEGIN {system("/bin/bash")}'
bash$ whoami
tom
bash$ pwd
/home/tom
bash$ cd /
bash$ pwd
/
  • 这个方法的原理是:这些编程语言或工具都有一些函数或方法,可以让用户在它们的环境中执行一个系统命令,并返回它的输出或状态。例如,awk 中的 system 函数,python 中的 os.system 函数,php 中的 shell_exec 函数等。因此,如果用户使用这些函数或方法来执行 /bin/bash 或 /bin/sh,就可以运行 bash 或 sh,从而绕过 RBASH 的限制。

  • 这个方法的优点是:比较灵活,可以使用不同的编程语言或工具来实现相同的效果,只要 RBASH 允许使用它们就可以。

  • 这个方法的缺点是:需要一定的编程知识和技巧,如果 RBASH 禁止使用这些编程语言或工具,或者限制它们的功能或参数,就无法使用这个方法。

使用 ssh 命令

  • 如果 RBASH 允许使用 ssh 命令,那么用户可以利用它的 -t 选项或 ProxyCommand 选项来执行 /bin/bash 或 /bin/sh。例如:

rbash$ ssh -t localhost /bin/bash
tom@localhost's password:
bash$ whoami
tom
bash$ pwd
/home/tom
bash$ cd /
bash$ pwd
/
  • 这个方法的原理是:ssh 命令是一个用于远程登录和执行命令的工具。其中,-t 选项表示为远程命令分配一个伪终端(pseudo-terminal),ProxyCommand 选项表示使用一个代理程序来连接远程主机。因此,如果用户使用 -t 选项或 ProxyCommand 选项来执行 /bin/bash 或 /bin/sh,并指定 localhost 作为远程主机,就可以运行 bash 或 sh,并在本地显示它们的输出和交互界面,从而绕过 RBASH 的限制。

  • 这个方法的优点是:比较巧妙,不需要复制或修改 bash 或 sh,也不需要使用其他的命令或工具,只要有 ssh 命令就可以。

  • 这个方法的缺点是:需要使用 ssh 命令,如果 RBASH 禁止使用 ssh 命令,或者限制它的选项或参数,就无法使用这个方法。

使用 git 命令

  • 如果 RBASH 允许使用 git 命令,那么用户可以利用它的 help 子命令来执行 /bin/bash 或 /bin/sh。例如:

rbash$ git help config
bash$ whoami
tom
bash$ pwd
/home/tom
bash$ cd /
bash$ pwd
/
  • 这个方法的原理是:git 命令是一个用于版本控制和协作开发的工具。其中,help 子命令表示显示 git 的帮助信息,它会调用一个指定的帮助查看器来显示文档。默认情况下,git 会使用 less 命令作为帮助查看器,而 less 命令是可以用来绕过 RBASH 的一个命令。因此,如果用户使用 git help config 来显示 git config 的帮助信息,就可以在 less 的交互模式下使用 !/bin/bash 或 !/bin/sh 来执行一个外部命令,从而绕过 RBASH 的限制。

  • 这个方法的优点是:比较隐蔽,不容易被 RBASH 发现和阻止,因为 git help config 看起来是一个合法的命令,而且 ! 子命令不会在历史记录中显示。

  • 这个方法的缺点是:需要使用 git 命令,如果 RBASH 禁止使用 git 命令,或者修改它的帮助查看器或文档,就无法使用这个方法。

使用 pico 命令

  • 如果 RBASH 允许使用 pico 命令,那么用户可以利用它的 -s 选项来执行 /bin/bash 或 /bin/sh。例如:

rbash$ pico -s /bin/bash
bash$ whoami
tom
bash$ pwd
/home/tom
bash$ cd /
bash$ pwd
/
  • 这个方法的原理是:pico 命令是一个简单的文本编辑器。其中,-s 选项表示指定一个拼写检查程序来检查文档中的拼写错误。默认情况下,pico 会使用 spell 命令作为拼写检查程序,而 spell 命令是可以用来绕过 RBASH 的一个命令。因此,如果用户使用 -s 选项来指定 /bin/bash 或 /bin/sh 作为拼写检查程序,并打开一个空白的文档,就可以运行 bash 或 sh,并在本地显示它们的输出和交互界面,从而绕过 RBASH 的限制。

  • 这个方法的优点是:比较巧妙,不需要复制或修改 bash 或 sh,也不需要使用其他的命令或工具,只要有 pico 命令就可以。

  • 这个方法的缺点是:需要使用 pico 命令,如果 RBASH 禁止使用 pico 命令,或者修改它的拼写检查程序或选项,就无法使用这个方法。

总结

  • RBASH 是一种受限制的 shell,它限制了用户的一些操作和权限。

  • RBASH 绕过的目的是获得一个正常的 shell,或者执行一些被禁止的命令或操作。

  • RBASH 绕过的方法有很多,主要取决于 RBASH 的限制程度和用户的目标是什么。

  • 在本讲义中,我们介绍了以下几种常见的 RBASH 绕过的方法,并举例论证它们的具体操作方式:

    • 使用 / 符号

    • 使用 cp 命令

    • 使用 ftp, gdb, more, man, less, vim, rvim 等命令

    • 使用 awk, find, expect, python, php, perl, lua, ruby 等编程语言或工具

    • 使用 ssh 命令

    • 使用 git 命令

    • 使用 pico 命令

    • 使用 vi 命令

# 渗透测试 # 系统安全 # 内网渗透 # 漏洞分析
本文为 左家庄的赵姑娘 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
左家庄的赵姑娘 LV.3
关注公众号 云息信安,专注网络安全知识分享!
  • 7 文章数
  • 8 关注者
总结分析 | 基于phpmyadmin的渗透测试
2023-09-10
Linux提权之suid提权
2023-09-09
渗透入门之DC-1主机渗透详细教学
2023-08-29
文章目录