在我们渗透测试的过程中,当拿到普通用户的shell后,可能会由于各种各样的权限限定,导致无法进行更多的操作,这个时候我们就要想办法进行提权。
网络环境信息
一旦我们拿到了受限定的shell,第一步是尽可能多地网络有关我们当前shell环境的信息。网络的信息将让我们理解我们所处的受限定的shell类型,以及所供应的功能和我们可以利用的技能。我们可以做以下的测试:

检讨可用的命令,方法是手动考试测验,按两次TAB键看看能不能列出文件和目录检讨利用SUID权限配置的命令,看看它们是不是归root用户所有检讨可以利用的命令列表sudo,看看能不能用我们的密码实行其他用户的权限命令检讨有什么措辞,如python,expect,perl,ruby等,他们会在往后派上用场检讨重定向运算符是否可用,例如'|' (pipe), “>”, “>>”, “<”检讨转义字符和实行标记,例如:( “;”冒号),“&”(后台支持),“’”(单引号),“”(双引号),“$(”(shell实行标记),“${”
然后,自己在本地搭建环境,进行各种测试,根据报错信息,确认是哪种类型的shell...
常见的shell类型报错如下:
rbash
rksh
rzsh
lshell
一些受限定的shell在缺点中会显示其名称,有些则没有。
常用的打破技能
我们从根本开始、我们可以利用一些非常大略的技能躲避受限定的shell来实行命令或访问我们不能或者不应该访问的系统区域、、、这些技能大多依赖大略的命令转义字符,重定向运算符乃至Linux系统shell变量污染、、、我们来剖析一下:
1.Console编辑(vim)
Vim有一个功能,许可我们在个中运行脚本和命令、如果vim可用,可以用一下的命令来进行测试:
:!/bin/ls -l b
Vim会离开编辑器并显示“ls -l b”实行命令的结果,显示所有目前目录下以字母“b”开头的文件...
我们可以利用这个技能实行任何其他命令乃至是另一个可用的shell,比如bash,以打破我们目前的限定,就比如:
:set shell=/bin/sh:shell
或者
:!/bin/sh
另一个好例子是ed。它是一个旧的默认Unix掌握台编辑器。常日ed是供应给用户,它功能非常大略,但它仍旧有内部的第三方命令实行功能,非常类似于vim。一旦进入,ed我们可以通过实行另一个往返避正常的shell,!’/bin/sh’如下所示:
另一个编辑器的例子是ne,它是一个非常小巧的被用来设计成替代vi的东西。利用ne,可以打破的例子如下:这是一个lshell、我们没有权限回到“/”上面的任何其他目录。。。。
那么就轮到我们的ne上场了,ne编辑器有一个非常骚的功能,许可我们保存或加载配置首选项。我们可以用这个功能来读取文件系统中的内容。按一下ESC一旦可以打开主配置菜单、转到末了一个菜单,“Prefs”选项“Load Prefs”:
点击后,它就会显示文件系统的内容,让我们可以从中选择我们的首选项文件。但是在这里,请把稳,我们现在可以进入到上一级文件系统中的目录,乃至到达“/”或任何其他目录,获取和读取它里面的内容:
我们乃至可以打开/etc目录文件/etc/passwd来列举用户:
2.Pager命令
Linux 的Pager类型命令是一些大略实用的命令、它们许可我们以分页的办法查看特定命令或文本文件的输出,最着名的是“more”和“less”、它还具有实行脚本的功能。。。是不是很骚。。。举个栗子:我们less一个文件,然后输入 !'ls'或者 !'sh',这里它就会成功的显示本目录下所有的文件
这种技能,适用于more和less
3.man命令
命令“man”用于显示Linux命令的手书页,也具有打破功能功能。只需利用man命令显示任何命令手册,如下所示:$ man ls当ls涌现命令手册时,我们可以利用more和less相同的技能、缘故原由是 “man”利用“less”或“more”作为默认的man打开命令
4.pinfo命令
这个命令比较偏,只适用于一些个别的shell类型中,浸染和man一样,这里利用 lshell 来演示一些受限定下的 lshell 如何利用 pinfo 提权。。。。我们考试测验一些命令如“nc”,“/bin/bash”或“ls /etc”,都无法被实行,lshell限对这些命令有限定,然后我们来考试测验用pinfo提权:
用pinfo打开ls手册user@kali:~$ pinfo ls当ls手书页面打开后,在里面打“!
”(感叹号)。请把稳,这里就会打开了一个命令实行功能,现在实行一些大略的命令试试吧,就比如之前的“ls /etc”,可以看到成功实行:
这里我们就成功绕过了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”选项在2009年5月之前的版本中用于打开交互式掌握台,可以运行其他命令。但是有点忧伤的是,这个功能在版本r17131中已停用,不过如果我们再有点旧版的Linux中可以考试测验一下,当可以利用这个选项时,可以输入“!sh”,看看能不能打开一个shell
user@kali:~$ nmap --interactivenmap> !sh$
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来打破它的限定:
2.Python
Python是天下上最好的措辞、哈哈哈。它有很多的功能,我们可以用它来实行的shell命令,比如system(),pty()等等,来看个栗子:
我们实行函数print()来回显字符串“testing”,因此我们就可以实行任何其他命令(如ls乃至是shell)。对付第一个示例,我们导入OS模块,卖力操作系统交互,末了利用system()函数运行本来不让运行的命令cp,这里只是随便证明一下:
可以看到,我们成功运行了cp命令,因此运行shell该当也可以吧,来试试:
可以看到,我们成功得到了shell。同样的例子可利用多种不同的办法,紧张看节制的根本知识是不是强大,再来个例子,如spawn()的pty模块:
多说一句,你节制的知识,决定你可以利用的功能。。。
如果我们想要shell可以远程利用,我们可以利用反弹shell让python打开我们的攻击者机器的socket,如下所示:
检讨已经在端口5000上侦听的攻击者的电脑看看反弹过来了没:
3.Ruby
Ruby中可以让我们利用irb(Interactive Ruby Shell)直接调用shell或任何其他命令:
可以反弹一个shell
4.Perl
我们利用perl with system()method来实行禁止本来没法实行的命令cp,也可以调用/bin/sh,如下:
完成同样骚操作的另一种方法是利用exec()方法,如下所示:
反弹个shell
5.PHP
PHP措辞有很多选项可以在shell中实行命令,个中包括已经很有名的system()和exec()。您可以在php掌握台内以交互办法进行,也可以直接在命令行中进行,就像之前在ruby,python和perl中做的那样。。。
以下是交互式利用PHP的示例:还是一样,试试cp命令
再利用exec()函数来考试测验实行交互式shell:
也不一定非得要交互模式来获取shell、我们可以用大略的php在命令行上实行脚本并让我们的靶机向我们反弹shell,如下所示:
是不是很棒。。。
当然,提权的办法还有很多很多 ,后续会陆续发出,如果大家还有什么更骚的操作,欢迎私信。。。