项目代码地址
这个博客是基于SSM实现的.先看下pom.xml
可以看到使用了fastjson 1.2.47版本的.这个版本的fastjson如果java环境低于8u121可以使用rmi协议远程命令执行.
搜索项目没有反序列化地方只有序列化
那fastjson这个就无法利用了.
前台搜索处有一个反射型xss
前台有一个发评论地址.
去看下具体请求接收代码
跟下第46行代码
获取了request header中的ip地址并且没有做任何过滤.如果有输出IP的地方那就会出现xss了.
第55行到58行是获取评论输入的昵称、邮箱、网址、和内容信息.使用了HtmlUtil.escape进行过滤.跟下这里的代码.
使用的是cn.hutool.http.HtmlUtil过滤 escape 方法过滤规则为
可以看到过滤的很全.但是这个url规则也是这样过滤的,如果url在a标签href属性里面出现岂不是可以写伪协议进行xss.
用burp发一个HTTP请求如下
进入后台首页,点击这个昵称
就成功触发了xss了
在管理评论列表页面,因为展示了ip信息所以就直接触发了.
前台还有一个申请友链的地方.
看下具体代码
可以看到没做任何过滤直接把传过来的参数代入数据库中了.
在后台链接列表展示这里
xss代码相继触发了,URL地址在a标签href属性里面点击URL就可以触发了.
后台写文章这里有一个上传功能.
上传一张图片,然后看下实现.
allowSuffix的值为这个.
文件前缀是 取上传文件名称第一个小数点位置前面的字符。文件后缀是取最后一个小数点后面的字符并且判断了字符的白名单。
后面文件名称冲突也没有可利用的办法,这里是不可以绕过了,但是这里如果把文件名称写成带xss代码的文件名也是可以上传,例如.png也可以上传成功,但是这个功能只有后台才可以上传。