如何利用配置错误的SUID获取root权限并提权

关注 2017-03-23 10:08:48 查看数 29202 ,评论数 0 内网渗透 技术控
%e5%9b%be%e7%89%871

场景:

我们面临的挑战是有时候进入系统的时候并不具备root权限或者并没有过多的权限去运行一些东西。在这种情况下,我在虚拟机中搭建了一个虚拟机来尝试使用配置错误的SUID获取root权限并进行提权。

找到潜在的SUID程序

  我们第一步是找到我们的SUID root程序,如果在当前用户的权限下搜索功能没有限制的话,我们可以搜索所有的SUID程序以便得到进一步的操作,使用的命令是:
find / -user root -perm -4000 -print 2>/dev/null
简单地说,这个命令可以找到root用户在根目录下的具有SUID权限的文件并且将其输出,然后将所有错误重定向到/dev/null(在这里将错误丢弃)。这个重定向的原因是我们对不能访问的东西是不感兴趣的,并且访问被拒绝的错误提示将会很快的填满这个终端。 %e5%9b%be%e7%89%872 在上面的列表中,nmap和vim.basic都是我们可以关注的目标,在早期的nmap版本中,nmap是允许交互模式的,而对于vim.basic来说则是一个简单的文本编辑器,同时也是具有交互模式的。 这两个都不应该为真正的SUID root,有一种情况是nmap由于一些原因导致其不工作,除非你可以处理原始的数据包。在一些以交互模式运行的具有SUID root的nmap的Linux版本中,可以允许用户获取一个root shell。vim.basic也是如此。

测试:

首先是nmap。让我们用命令启动nmap的交互模式:
nmap --interactive
%e5%9b%be%e7%89%873 在nmap交互模式开始后,我们输入“!sh”尝试获取一个shell,当该命令在前台被执行之后,然后我们可以尝试去执行脚本。 从上图可以看到,nmap帮助我们获取了一个命令行的控制权,但是我们仍然是当前的低权限的用户。在一些系统上我用这种方法确实奏效并且我们可以获取一个具有root权限的shell。不过,在以上的情况下却没能成功,提权这种事情确实有时候是要看运气的,有时候你在其他系统上可以搞定但是换一个系统又不行了(但是精明的黑客可能会注意到,这个nmap版本非常过时,可能是一个脆弱的应用程序)。 那么接下来,我们来看一下vim.basic,我试着将上面的手段再次使用,但是得到的结果还是一样的。 %e5%9b%be%e7%89%874

在vim.basic中执行“!sh”之后

系统生成了当前用户下的shell,这与nmap是一样的。如果这些确实能让我们实现shell逃逸,那么到现在应该是已经完成了。现在我们需要一点点的横向思考——vim.basic现在仍然是SUID root,是否还有更好的方法呢? 让我们试着使用vim打开一个具有高权限的文件,在这种情况下,我们选用/etc/sudoers。这个文件包含了root命令的规则——允许哪些用户使用以及允许使用什么命令。sudo命令允许用户以root权限执行命令。 我们尝试编辑这个文件:
basic /etc/sudoers
成功了!我们现在可以收集root用户的信息,这真是出人意料,但是我们还没有root shell。从这里,有很多方法可以使用并获得root访问权限,例如直接编辑sudoers文件以授予访问权限。但是如果我们没有使用正确的语法,这可能是危险的,因为sudo命令可能会完全停止工作。 通常我们使用具有内置语法检查功能的visudo来编辑sudoers文件。 %e5%9b%be%e7%89%875

获取Root Shell

由于我们使用的环境是虚拟机,因此我们不用考虑隐藏足迹的问题。所以我们继续深入探索(只要你高兴,只要你开心)。 首先,我们编辑/root/.bashrc 并给我们的用户以root权限:
vim.basic /root/.bashrc
然后在底部添加:
adduser arimmer sudo
由于.bashrc在登录的时候由bash执行,所以这应该是在root用户下次登录的时候通过sudo赋予我们root权限。在测试环境中我们可以尽情的使用root用户登录,所以我们按下fork炸弹的按钮:
:(){ :|: & };:
%e5%9b%be%e7%89%876 注:fork炸弹以极快的速度创建大量进程(进程数呈以2为底数的指数增长[2]  趋势),并以此消耗系统分配予进程的可用空间使进程表饱和,而系统在进程表饱和后就无法运行新程序,除非进程表中的某一进程终止;但由于fork炸弹程序所创建的所有实例都会不断探测空缺的进程槽并尝试取用以创建新进程,因而即使在某进程终止后也基本不可能运行新进程。fork炸弹生成的子程序在消耗进程表空间的同时也会占用CPU和内存,从而导致系统与现有进程运行速度放缓,响应时间也会随之大幅增加,以致于无法正常完成任务,从而使系统的正常运作受到严重影响。(参见百度百科:fork炸弹) 这个脚本果然导致了系统的崩溃,然后应该会引起系统的重启以及root的重新登录。 在机器崩溃之后,我重新打开了虚拟机然后以root用户的身份模拟登录,当我登陆的时候,由于上面的操作,系统将发出指令:“Adding user arimmer to group sudo”。虽然有更多比这个更加隐蔽的方式,但是现在我们不用担心其他的情况,仅仅需要考虑速度的问题。我们可以将输出重定向到/dev/null从而跳过这些输出的信息。 现在,我们以“arimmer”的身份登录看一下发生了什么事情: %e5%9b%be%e7%89%877 Perfect!虽然这个例子是建立在虚拟机的,但它也说明了SUID命令 的问题。看起来这种情景在实际的情况下不会出现得太多,但是在以往的经验中却是看过类似的问题并利用其来提权的。提权,掌握大量的技巧是很重要的,虽然有时候会很容易,有时候却又需要一点技巧。 无论有多么的困难,重要的是需要记住首要的目标就是那些看起来唾手可得的。提权的方式总是需要从简单的方式入手然后才是相对困难的方式。在这个例子中,nmap命令并没有真正地帮助我们,但是我们迎难而进并且最终得到了我们想要的答案。
交流评论(0)
Loading...
点击 ,就能发表评论哦~如果您还没有账号,请 一个吧

广告

关注我们 查看更多精彩文章

css.php
正在加载中...