网站安全狗又一发绕过WebShell上传拦截的姿势

测试环境Windows2003+IIS6+ASP。

安全狗版本:
 



上传asp文件被拦截:
 





一个典型的上传包如下(主要部分):
 

Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWyGa1hk6vT9BZGRr //头部


 

------WebKitFormBoundaryWyGa1hk6vT9BZGRr Content-Disposition: form-data; name="FileUploadPath" C:\Inetpub\wwwroot ------WebKitFormBoundaryWyGa1hk6vT9BZGRr Content-Disposition: form-data; name="FileUploadName"; filename="test.asp" Content-Type: application/octet-stream <%response.write( bypass="" safedog=""> ------WebKitFormBoundaryWyGa1hk6vT9BZGRr-- <%response.write( bypass="" safedog="">





------WebKitFormBoundaryWyGa1hk6vT9BZGRr从POST数据开始到结束------WebKitFormBoundaryWyGa1hk6vT9BZGRr--



推测安全狗是通过匹配multipart/form-data; boundary=----WebKitFormBoundaryWyGa1hk6vT9BZGRr来解析一个上传包中的各个参数的,那么可能发生在安全狗和Web Server之间的差异是什么呢?



尝试如下请求:
 



在头部的WebKitFormBoundaryWyGa1hk6vT9BZGRr随便加上字符,便可成功上传。
 



同理,保持头部的WebKitFormBoundary...不变,更改(减去最后一个字符或增加几个字符)POST参数中的WebKitFormBoundary...一样可以绕过上传拦截。
 


 


 




 


 


 

解决方案:

Web Server容错性好,能处理的异常请求也比较多,在检测数据包时不能只按正常的格式去解析,还应考虑那些不正常的格式。