上传图片马绕过discuz的Flash渲染

昨天下午 在家无聊 日了个站 扫了一下有php-cgi的解析洞 看了一下是个 Discuz!X3.4

那就老办法注册账号 上传头像抓包放行 取得那个真实的图片地址 没有被渲染过的

注册了个账号 上传头像抓包 放行 就提示上传成功 没出来图片地址

这可不行啊 然后我就想 不行就发帖嘛 或者上传相册也是可以的 结果提示我 还tm叫我等15分钟

那能有什么办法呢 没有社工库 退出了 当前账号 想去试试弱口令搞个高权限的账号 结果还是没成功 ....

然后我就等啊等 等了15分钟 结果告诉我 还是不能上传图片 还得再升一级 去你妈的!

然后我就琢磨到底怎么样才能拿到真实地址 有的基友可能知道 拼凑嘛

知道ID号是可以拼凑的 然而并没有成功 我也不知道它到底是什么机制 可能是管理员做了什么设置
因为我看到被人做了你懂得广告 估计管理员修复了一下 但是并没有什么卵用 还是被人做了 扯远了

现在开始正题 分析这个上传包

Content-Disposition: form-data; name="avatar1"
xxxxx
Content-Disposition: form-data; name="avatar2"
xxxxx
Content-Disposition: form-data; name="avatar3"
xxxxx

大概是这样的 第一个是图片马 第二个和第三个不知道是什么鬼
看起来像是base64 后面证实确实是base64
然后百度了一波 discuz 头像地址 有三个

/uc_server/data/avatar/000/15/01/13_avatar_small.jpg
/uc_server/data/avatar/000/15/01/13_avatar_middle.jpg
/uc_server/data/avatar/000/15/01/13_avatar_big.jpg

小中大 三种尺寸的 写了个phpinfo在里面 并没有成功

然后我base64编码一下 访问/uc_server/data/avatar/000/15/01/13_avatar_middle.jpg./.php 报500错误

下载到本地看到有写入进去了 但是不知道为什么报错 不显示出来 我个人猜测可能是一些什么字符原因造成的

然后我就在那个图片马的包里的phpinfo那里 一直狂按左右键 发现这个phpinfo后面好像是有点问题 我不知道怎么描述这个事情 代码没有完全连起来 就是好像吃掉点什么 没有成为一个整体

后来想了一下 要是找到个空格什么的 不就好了么 (装逼语录:渗透需要细心)

然后在一个加号后面插入base64后的phpinfo avatar2 和 avatar3 都插入一次 放包 提示成功

再次查看 完美插入 其实phpcmsV9 也可以这样绕 不过那个不是base64的 需要找准点插入 一次高潮

表哥是怎么判断网站使用了php-cgi解析呢?

随便一个图片路径随手加一个/.php就可以判断了。。。。。。。。。。。。这种的直接注册一个会员进去以后随便找个贴子回复处上一个图片马就getshell了

1 Like

有道理

php-cgi 就是俗称的nginx解析漏洞 只不过这样说不准确 因为iis6以上 apache也有这种解析漏洞 判断方法有两种 XX.jpg./.php XX.jpg/.php 然后看返回响应的Content-Type 肉眼也能看得出来

1 Like

不是我吹牛,复现十几个没有一个成功的

在dz的头像能成功上传的话,上传的时候头像会存到一个缓存目录里面(这个目录下的图片是原图片,没有渲染过,能直接访问)

1 Like

学到了在+号后门插入base64的代码

为啥在+号php代码就可以正常运行。请问师傅这是什么原理呢

那我就不知道了 黑盒测试的站 确实是discuz的 确实是base64编码的 绕过了他的渲染