实战Linux下三种不同方式的提权技巧

tgnian 8年前
   <p>在渗透测试或者漏洞评估的过程中,提权是非常重要的一步,在这一步,黑客和安全研究人员常常通过exploit,bug,错误配置来提升权限。本文的例子都是在虚拟机里测试的,不同的虚拟机可以从Vulnhub下载。</p>    <h2><strong>实验一:利用Linux内核漏洞提权</strong></h2>    <p>VulnOS version 2是VulHub上的一个Linux提权练习,当打开虚拟机后,可以看到</p>    <p><img src="https://simg.open-open.com/show/d2697be997cbba435d8851371c60b938.png"></p>    <p>获取到低权限SHELL后我们通常做下面几件事</p>    <p>1.检测操作系统的发行版本</p>    <p>2.查看内核版本</p>    <p>3.检测当前用户权限</p>    <p>4.列举Suid文件</p>    <p>5.查看已经安装的包,程序,运行的服务,过期版本的有可能有漏洞</p>    <pre>  $ lsb_release -a  </pre>    <p>查看系统的发行版本</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <pre>  $ uname -a  </pre>    <p>查看内核版本</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>每 次在提权的时候,我们都会一次又一次的测试,我们将搜索所有可能的提权技术,并依次应用,直到成功。我们将测试不同的内核exploit,也会暴力破解账 号。这个例子我们知道操作系统采用的是Ubuntu 14.04.4 LTS,内核版本是3.13.0-24-generic,首先我们尝试利用overlayfs,这个exploit会工作在Ubuntu 12.04/14.04/14.10/15.04的linux内核3.19之前和3.13.0之后,我们测试一下。</p>    <p>我们首先移动到/tmp目录,然后新建一个文件,粘贴exploit代码进去</p>    <p>依次运行:</p>    <pre>  $ cd /tmp  $ touchexploit.c  $ vimexploit.c  </pre>    <p>vim保存推出后,我们编译代码</p>    <pre>  $ gccexploit.c -o exploit  </pre>    <p>现在执行,如果提示没有权限,还需</p>    <pre>  chomd 777 ./exploit  </pre>    <pre>  $ ./exploit  </pre>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>通过截图可以看到我们已经获取到了root权限,接下来获取交互式的shell</p>    <pre>  $ python -c 'import pty; pty.spawn("/bin/bash")'  </pre>    <p>如果提权失败了,我个人建议你测试几个其他的exploit,新的内核版本也可以试试</p>    <p>Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) – ‘overlayfs’ Local Root Shell</p>    <p><a href="/misc/goto?guid=4959714092530728738" rel="nofollow,noindex">https://www.exploit-db.com/exploits/37292/</a></p>    <p>Linux Kernel 4.3.3 (Ubuntu 14.04/15.10) – ‘overlayfs’ Local Root Exploit</p>    <p><a href="/misc/goto?guid=4959714092612938321" rel="nofollow,noindex">https://www.exploit-db.com/exploits/39166/</a></p>    <p>Linux Kernel 4.3.3 – ‘overlayfs’ Local Privilege Escalation</p>    <p><a href="/misc/goto?guid=4959714092699873492" rel="nofollow,noindex">https://www.exploit-db.com/exploits/39230/</a></p>    <p>最后核心提示:内核exploit提权有风险,有可能会崩溃系统。</p>    <h2><strong>实验2:利用低权限用户目录下可被Root权限用户调用的脚本提权</strong></h2>    <p>Mr.Robot是另一个boot到root的挑战虚拟机,我拿这个例子来告诉你为什么suid程序在提权的过程中是重要的,如果你以前对suid没有了解,可以参考 <a href="/misc/goto?guid=4959714092783073131" rel="nofollow,noindex">https://en.wikipedia.org/wiki/Setuid</a></p>    <p>我们首先查看下当前用户</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>通过截图可以得知,当前用户为”daemon”,我们接下来提权”daemon”到”root”</p>    <p>这台Ubuntu 14.04运行linux内核3.13.0-55-generic,我尝试已有的exploit都失败了。</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>这次我们通过寻找系统里可以用的SUID文件来提权。运行:</p>    <pre>  $ find / -perm -u=s -type f 2>/dev/null  </pre>    <p>得到如下列表:</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>通过截图,我们发现nmap居然有SUID标志位,来看看nmap版本</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>一个非常老的nmap版本,但是这个版本的nmap如何帮我们提权呢?</p>    <p>nmap支持“interactive.”选项,用户能够通过该选项执行shell命令,通常,安全人员会使用该命令来避免他们使用nmap命令被记录在history文件中</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>因为nmap有SUID位,所以通过“!sh”我们会获取到一个root权限的shell</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>在你的渗透过程,如果发现Nmap 3.48 有SUID位,可以按照本文的例子做下测试。</p>    <h3><strong>实验3:利用环境变量劫持高权限程序提权</strong></h3>    <p>PwnLad是笔者最喜欢的挑战,一个攻击者有几个账号,但是都不是root权限。</p>    <p>我们当前登录的是”Kane”账号,当前没有有效的内核exploit,也没有其他可以利用的suid文件</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>只有在Kane的home目录下有一个“msgmike.”文件</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>使用file命令查看下这个文件</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>从截图可以看到,这是一个ELF 32位 LSB执行文件,但是当我们执行文件的时候,报错了</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>通过报错信息我们可以看到msgmike调用cat命令读取/home/mike/msg.txt文件。</p>    <p>针对这种情况,我们可以通过设置bash的$path环境变量来利用,通常的$PATH包含</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>然而当我们调用cat命令的时候,cat会从以上目录来寻找,如果我们添加.到$PATH环境变量,则会先从当前目录来寻找cat指令</p>    <p>新建cat,添加执行权限</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p>这样当我们再次运行./msgmike命令的时候,就会触发当前目录下的cat(/bin/sh),从而提权。完整的exploit如下</p>    <p><img src="https://simg.open-open.com/show/8ccbbb3c2d63ce39b793630a0867755b.png" alt="实战Linux下三种不同方式的提权技巧" width="550" height="185"></p>    <p> </p>    <p> </p>    <p>来自:https://www.91ri.org/16398.html</p>    <p> </p>