代码审计--Bluecms

1,存储型XSS
 
代码分析
 
接收的参数 $content 没有使用 htmlspecialchars() 函数去实体编码,而是使用了一个过滤函数 filter_data()。
20.4_.6_.1_.PNG

 
跟进file_data() 发现只过滤了几个标签,很好绕过。

20.4_.6_.2_.PNG

 
然后就直接插入数据库中。
 
20.4_.6_.3_.PNG

 
接下来跟进到后台审核。

20.4_.6_.6_.PNG

 
在查询后将查询的 content 的结果做为参数传入到了 create_editor() 函数中。
 
跟进后可以看到,实例化 FCKeditor,content 赋值 $editor->value,然后调用 Create_html()。。

20.4_.6_.7_.PNG

 
进入函数后调用 htmlspecialchars() 函数对content 预编译,因为是默认编码,所以只对双引号进行实体编码。

20.4_.6_.8_.PNG

 
接下来进入 IsCompatible() 函数。

20.4_.6_.9_.PNG

 
这个函数是判断用户浏览器版本,只要版本不是太老就会返会TRUE。

20.4_.6_.10_.PNG

 
接下来是给 $html 赋值,然后输出到页面上,因为是 iframe 标签加载的同目录下一个html文件,而且把$html 输出到了页面上,又因为前面的 htmlspecialchars() 只预编译了双引号,所以JS代码是能够执行的。

20.4_.6_.11_.PNG

 
实际测试
 
因为前端对数据进行了实体编码,所以需要在burp中修改下。
 
20.4_.5_.4_.PNG

 
成功插入到数据库。
 
20.4_.5_.5_.PNG

 
成功执行payload。
20.4_.6_.14_.PNG

 

 
2,任意文件删除
 
代码分析
 
在删除文章处会删除已经上传的文件,从数据库中读取路径。
 

20.4_.6_.15_.PNG

 
同过分析代码可知,文件路径出现在上传和更新处,上传时不完全可控,更新处完全可控。

20.4_.6_.16_.PNG

 
只需要在burp中修改文件路径即可。

20.4_.6_.183_.PNG

 
后端没有对路径做任何检查,直接插入到数据库中。

20.4_.619_.PNG

 
接下来只需要在前台点击删除即可。

0 个评论

要回复文章请先登录注册