WebShell攻击的方式是这样的:
1.通过网站提供的上传入口,比如是上传图片的入口,上传时上传后缀为jps的图片
2.通过抓包工具抓包,修改上传的后缀为 .jsp或.php等,将实际内容更改为木马代码(比如创建一个用户赋予root权限)
3.上传成功后其实就成功了,可以通过创建的用户登录到你的服务器(其实这里我没太理解,查资料说需要菜刀将木马文件的路径写到菜刀上,然后就OK了,但这边的脚本上传到服务器不会自动执行吗?希望有大佬可以指点下迷津)
这种做法是绕过前端验证,将木马传到服务器
解决方案:
1.从源头上就杜绝非法文件上传到服务器,前端验证是可以绕过的,那加上后端验证即可
2.限制脚本文件权限,禁止访问木马文件
后端验证:
在后端代码中验证下上传文件是否是.jpg,.png,.gif,.jpeg这样,就无法绕过验证而将脚本文件上传到你的服务器
限制脚本文件权限
看到说可以通过apache来禁止访问,想了想其实也可以通过nginx,但这边我是简单的在web.xml中加了段话来达到目的
<security-constraint>
<display-name>interceptor-jsp</display-name>
<web-resource-collection>
<web-resource-name>JSPs</web-resource-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.php</url-pattern>
<url-pattern>*.asp</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
(ps:我的是Java项目)
这里加上后所有的,jsp .php .asp文件都无法访问,因为我这个项目正好是用的html,没用jsp,所以可以配.jsp
这里配好后,一写得不好就会启动报错,大概报错的是Catalina localhost巴拉巴拉的,原因是url-pattern里没写好,
如果写/xxx/xxx/*.jsp抱歉,就会报错了,想要禁止某个后缀的文件访问只能写 *.xxx,前面不能加上目录的,如果有其他的写法可以达到指定某个目录下的所有后缀为xxx的禁止访问,请疯狂艾特我,谢谢
此上,皆为我的一点愚见,如有不足烦请评论指出 (抱拳)