php检测图片木马多进制示例
内容摘要
这篇文章主要为大家详细介绍了php检测图片木马多进制示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!前不久,我申请加入了某开
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!前不久,我申请加入了某开
文章正文
这篇文章主要为大家详细介绍了php检测图片木马多进制示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随php教程的小玲来看看吧!
前不久,我申请加入了某开源组织,他们要我写一个功能用来检测图片中是否有木马脚本。其实一开始我什么也不知道,只是后来在网上查了一些资料,找到的全是有制作图片木马的教程,并没有找到检测的程序。经过几番思索之后,决定从制作原理来分析这种木马程序。这种木马程序是十六进制编码写的,我灵机一动,写了以下这个上传类。最终通过了组织测验。呵呵现在把它拿出来给大家分享,有什么不好的地方,还请指正! anyon@139.com;代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | <code> <?php /* php教程 www.512Pic.com */ /** +------------------------------------------------------------------------------ * Upload 文件上传类 +------------------------------------------------------------------------------ * @package Upload * @author Anyon <Anyon@139.com> * @version $Id: Upload.class.php 2013-3-20 21:47:23 Anyon $ +------------------------------------------------------------------------------ */ class Upload { private static $image = null; private static $status = 0; private static $suffix = null; private static $imageType = array ( '.jpg' , '.bmp' , '.gif' , '.png' ); private static $message = array ( '0' => '没有错误发生,文件上传成功。' , '1' => '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。' , '2' => '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。' , '3' => '文件只有部分被上传。' , '4' => '没有文件上传。' , '5' => '未能通过安全检查的文件。' , '6' => '找不到临时文件夹。' , '7' => '文件写入失败。' , '8' => '文件类型不支持' , '9' => '上传的临时文件丢失。' , ); //@ 开始执行文件上传 public static function start( $feild = 'file' ) { if (! empty ( $_FILES )) { self:: $status = $_FILES [ $feild ][ 'error' ]; if (self:: $status > 0) return array ( 'status' => self:: $status , 'msg' => self:: $message [self:: $status ]); self:: $image = $_FILES [ $feild ][ 'tmp_name' ]; self:: $suffix = strtolower ( strrchr ( $_FILES [ $feild ][ 'name' ], '.' )); return array ( 'status' => self::_upload(), 'path' => self:: $image , 'msg' => self:: $message [self:: $status ]); } else { return array ( 'status' => self:: $status , 'msg' => self:: $message [self:: $status ]); } } //@ 私有 上传开始 private static function _upload( $path = './upload/' ) { date_default_timezone_set( 'PRC' ); $newFile = $path . date ( 'Y/m/d/His' ) . rand(100, 999) . self:: $suffix ; self::umkdir(dirname( $newFile )); if ( is_uploaded_file (self:: $image ) && move_uploaded_file(self:: $image , $newFile )) { self:: $image = $newFile ; if (in_array(self:: $suffix , self:: $imageType )) return self::checkHex(); else return self:: $status = 0; } else { return self:: $status = 9; } } //@ 私有 16进制检测 private static function checkHex() { if ( file_exists (self:: $image )) { $resource = fopen (self:: $image , 'rb' ); $fileSize = filesize (self:: $image ); fseek ( $resource , 0); if ( $fileSize > 512) { // 取头和尾 $hexCode = bin2hex( fread ( $resource , 512)); fseek ( $resource , $fileSize - 512); $hexCode .= bin2hex( fread ( $resource , 512)); } else { // 取全部 $hexCode = bin2hex( fread ( $resource , $fileSize )); } fclose( $resource ); /* 匹配16进制中的 <% ( ) %> */ /* 匹配16进制中的 <? ( ) ?> */ /* 匹配16进制中的 <script | /script> 大小写亦可*/ if (preg_match( "/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054)|(2F5343524950543E)|(3C736372697074)|(2F7363726970743E)/is" , $hexCode )) self:: $status = 5; else self:: $status = 0; return self:: $status ; } else { return self:: $status = 9; } } //@ 私有 创建目录 private static function umkdir( $dir ) { if (! file_exists ( $dir ) && ! is_dir ( $dir )) { self::umkdir(dirname( $dir )); @ mkdir ( $dir ); } } } </code> |
注:关于php检测图片木马多进制示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释