如何在bash中解决这个安全难题?

时间:2013-05-10 22:30:24

标签: linux bash shell unix command-line

作为使用linux工具练习的一部分,我一直在尝试随机的“bash挑战”,并坚持使用它。我在受限制的bash shell中,我不能cd,我无法在其中运行带有正斜杠的命令。输出重定向也是不可用的。 PATH环境变量也设置为指向非常有限的工具子集。即:

awk,cmp,cut,egrep,find,grep,gzip,hostname,less,lsof,netstat,nm,ps,sed,ssh-agent,
sum,tar,uname,vi,whoami,xz,zcat,cat,column,diff,fgrep,gdb,gzcat,head,
ifconfig,ls,mv,nl,ping,sort,strings,tail,top,uniq,xargs,xzcat

现在,使用awk我可以访问一个不受限制的shell - 拼图问题是:“如果从可用命令列表中删除awk之前有一段有限的时间 - 有没有办法确保自己在将来达到不受限制的shell?这个用户下的主目录是不可写的。

在awk unrestricted shell下,我尝试将/bin/sh的副本复制到其他位置/tmp/writable ...但这不起作用,因为我以后不能cd进/ tmp / writable and i can't run / tmp / writable / sh`,因为它包含正斜杠。出于同样的原因,我也不能只是建立一个软链接。假设我不能在登录脚本中留下永久的东西(容易检测到),还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

由于chsh是setuid root,因此您可以使用awk将登录shell修改为不受限制(我假设您可以执行它,因为您可以执行不受限制的shell)。然后,下次登录时,您将不再拥有受限制的shell。

否则,正如Brian Campbell指出的那样,除了awk之外,还有其他方法可以访问不受限制的shell。

答案 1 :(得分:1)

如果您有GDB可用,您可以从那里调用其中一个exec函数来获得不受限制的shell

$ gdb cat
(gdb) run
^C
(gdb) call execl("/bin/sh", 0);
$

现在你处于无限制的外壳中。