Linux 提权—突破受限制的shell权限

OnionT@KillBoy 渗透测试评论16,9506字数 3611阅读12分2秒阅读模式

渗透测试的过程中,当我们拿到普通用户的shell后,会因为各种各样的权限限制,导致无法进行更多的操作,这个时候我们就要想办法进行提权。

收集环境信息
一旦我们拿到了受限制的shell,第一步是尽可能多地收集有关我们当前shell环境的信息。收集的信息将让我们了解我们所处的受限制的shell类型,以及所提供的功能和我们可以使用的技术。我们可以做以下的测试:

  • 检查可用的命令,方法是手动尝试,按两次TAB键看看能不能列出文件和目录
  • 检查使用SUID权限配置的命令,看看它们是不是归root用户所有
  • 检查可以使用的命令列表sudo,看看能不能用我们的密码执行其他用户的权限命令
  • 检查有什么语言,如python,expect,perl,ruby等,他们会在以后派上用场
  • 检查重定向运算符是否可用,例如'|' (pipe), “>”, “>>”, “<”
  • 检查转义字符和执行标记,例如:( “;”冒号),“&”(后台支持),“’”(单引号),“”(双引号),“$(“(shell执行标记),“${“

然后,自己在本地搭建环境,进行各种测试,根据报错信息,确认是哪种类型的shell...
常见的shell类型报错如下:

rbash

Linux 提权—突破受限制的shell权限

rksh

Linux 提权—突破受限制的shell权限

rzsh

Linux 提权—突破受限制的shell权限

lshell

Linux 提权—突破受限制的shell权限

一些受限制的shell在错误消息中会显示其名称,有些则没有。

常用的突破技术
我们从基础开始、我们可以使用一些非常简单的技术逃避受限制的shell来执行命令或访问我们不能或者不应该访问的系统区域、、、这些技术大多依赖简单的命令转义字符,重定向运算符甚至Linux系统shell变量污染、、、我们来分析一下:

1.Console编辑(vim)
Vim有一个功能,允许我们在其中运行脚本和命令、如果vim可用,可以用一下的命令来进行测试:

:!/bin/ls -l b*
Shell

Vim会离开编辑器并显示“ls -l b*”执行命令的结果,显示所有目前目录下以字母“b”开头的文件...
Linux 提权—突破受限制的shell权限
我们可以使用这个技术执行任何其他命令甚至是另一个可用的shell,比如bash,以突破我们目前的限制,就比如:

:set shell=/bin/sh 
:shell
Shell

或者

:!/bin/sh
Shell

另一个好例子是ed。它是一个旧的默认Unix控制台编辑器。通常ed是提供给用户,它功能非常简单,但它仍然有内部的第三方命令执行功能,非常类似于vim。一旦进入,ed我们可以通过执行另一个来逃避正常的shell,!’/bin/sh’如下所示:
Linux 提权—突破受限制的shell权限
另一个编辑器的例子是ne,它是一个非常小巧的被用来设计成替代vi的东西。
使用ne,可以突破的例子如下:
这是一个lshell、我们没有权限回到“/”上面的任何其他目录。。。。
Linux 提权—突破受限制的shell权限
那么就轮到我们的ne上场了,ne编辑器有一个非常有趣的功能,允许我们保存或加载配置首选项。我们可以用这个功能来读取文件系统中的内容。按一下ESC一旦可以打开主配置菜单、转到最后一个菜单,“Prefs”选项“Load Prefs”:
Linux 提权—突破受限制的shell权限
点击后,它就会向我们显示文件系统的内容,让我们可以从中选择我们的首选项文件。但是在这里,请注意,我们现在可以进入到上一级文件系统中的目录,甚至到达“/”或任何其他目录,获取和读取它里面的内容:
Linux 提权—突破受限制的shell权限
我们甚至可以打开/etc目录文件/etc/passwd来枚举用户:
Linux 提权—突破受限制的shell权限

2.Pager命令
Linux 的Pager类型命令是一些简单实用的命令、它们允许我们以分页的方式查看特定命令或文本文件的输出,最着名的是“more”和“less”、它还具有执行脚本的功能。。。是不是很骚。。。
举个栗子:
我们less一个文件,然后输入 !'ls'或者 !'sh',,惊喜不惊喜,这里它就会成功的显示本目录下所有的文件
Linux 提权—突破受限制的shell权限
Linux 提权—突破受限制的shell权限
是不是非常棒

这种技术,适用于more和less

3.man命令
命令“man”用于显示Linux命令的手册页,也具有突破功能功能。只需使用man命令显示任何命令手册,如下所示:

$ man ls

当ls出现命令手册时,我们可以使用more和less相同的技术、原因是 “man”使用“less”或“more”作为默认的man打开命令
Linux 提权—突破受限制的shell权限

4.pinfo命令
这个命令比较偏,只适用于一些个别的shell类型中,作用和man一样,这里使用lshell来演示一些受限制下的lshell如何使用pinfo提权。。。。
我们尝试一些命令如“nc”,“/bin/bash”或“ls /etc”,都无法被执行,lshell限制了它们,然后我们来用pinfo提权:
Linux 提权—突破受限制的shell权限
用pinfo打开ls手册

user@kali:~$ pinfo ls

当ls手册页面被打开后,在里面打“!”(感叹号)。请注意,这里就会打开了一个命令执行功能,现在让我们执行一些简单的命令试试吧,比如之前的“ls /etc”,可以看到成功执行:
Linux 提权—突破受限制的shell权限
Linux 提权—突破受限制的shell权限
这里我们就成功绕过了lshell执行受限命令的限制。。。

5.find命令
find是一个非常着名的命令,用于在Linux文件系统中查找文件。它有许多功能,其中“-exec”选项是一个让我们可以执行shell命令。关于这个命令,我在之前的文章中有提过,这里就不详细说了,放两个例子:

/usr/bin/find examples.desktop -exec whoami \;
/usr/bin/find examples.desktop -exec /bin/sh \;可以直接进入root权限的shell中

6.nmap命令
nmap是一个非常著名的扫描端口的命令,它有一个非常有趣的选项叫做“--interactive”,该“--interactive”选项在nmap2009年5月之前的版本中用于打开交互式控制台,可以运行其他命令。但是有点悲伤的是,这个功能在nmap版本r17131中已停用,不过如果我们再有点旧版的Linux中可以尝试一下,当可以使用这个选项是,可以输入“!sh”,看看能不能打开一个shell

user@kali:~$ nmap --interactive 
nmap> !sh 
$
Shell

7.export
如果这个命令可以,就可以直接添加环境变量,获取到更多可以执行的命令,比如:

export PATH=/usr/sbin:/usr/bin:/sbin:/bin

利用编程语言的技巧

1.awk命令
awk是一种为文本处理而设计的解释型编程语言。它是大多数类Unix操作系统的标准功能,这就是我们通常可以在shell中找到它们的原因。它有很多的类似功能如print(),sprintf()以及其他。其中最有趣的是system()、system()函数允许我们/bin/sh
$ awk 'BEGIN {system("/bin/sh")}'
即使lshell不允许/bin/sh直接运行另一个shell(),我们也可以通过使用awk为我们打开shell来突破它的限制:
Linux 提权—突破受限制的shell权限

2.Python
Python是世界上最好的语言、哈哈哈。它有很多的功能,我们可以用它来执行的shell命令,比如system(),pty()等等,来看个栗子:
Linux 提权—突破受限制的shell权限
我们执行函数print()来回显字符串“testing”,因此我们就可以执行任何其他命令(如ls甚至是shell)。对于第一个示例,我们导入OS模块,负责操作系统交互,最后使用system()函数运行本来不让运行的命令cp,这里只是随便证明一下:
Linux 提权—突破受限制的shell权限
可以看到,我们成功运行了cp命令,因此运行shell应该也可以吧,来试试:
Linux 提权—突破受限制的shell权限
可以看到,我们成功得到了shell。同样的例子可使用多种不同的方式,主要看掌握的基础知识是不是强大,再来个例子,如spawn()的pty模块:
Linux 提权—突破受限制的shell权限
多说一句,你掌握的知识,决定你可以使用的功能。。。
如果我们想要shell可以远程使用,我们可以使用反向shell技术让python打开我们的攻击者机器的socket,如下所示:
Linux 提权—突破受限制的shell权限
检查已经在端口5000上侦听的攻击者的电脑看看反弹过来了没:
Linux 提权—突破受限制的shell权限

3.Ruby
Ruby中可以让我们使用irb(Interactive Ruby Shell)直接调用shell或任何其他命令:
Linux 提权—突破受限制的shell权限
可以反弹一个shell
Linux 提权—突破受限制的shell权限

4.Perl
我们使用perl with system()method来执行禁止本来没法执行的命令cp,也可以调用/bin/sh:
Linux 提权—突破受限制的shell权限
Linux 提权—突破受限制的shell权限
完成同样骚操作的另一种方法是使用exec()方法,如下所示:
Linux 提权—突破受限制的shell权限
反弹个shell看看。。。
Linux 提权—突破受限制的shell权限
Linux 提权—突破受限制的shell权限

5.PHP
PHP语言有很多选项可以在shell中执行命令,其中包括已经很有名的system()和exec()。您可以在php控制台内以交互方式进行,也可以直接在命令行中进行,就像之前在ruby,python和perl中做的那样。。。

以下是交互式使用PHP的示例:
还是一样,试试cp命令
Linux 提权—突破受限制的shell权限
再使用exec()函数来尝试执行交互式shell:
Linux 提权—突破受限制的shell权限
也不一定非得要交互模式来获取shell、我们可以用简单的php在命令行上执行脚本并让我们的靶机向我们反弹shell,如下所示:
Linux 提权—突破受限制的shell权限
Linux 提权—突破受限制的shell权限
是不是很棒。。。

免责声明:本站某些文章、信息、图片、软件等来源于互联网,由本网整理发表,希望传递更多信息和学习之目的,并不意味赞同起观点或证实其内容的真实性以及非法用途。 如设计、版权等问题,请立即联系管理员,我们会给予更改或删除相关文章,保证您的权利。
高性能云服务器2折起
 
OnionT@KillBoy
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: