常见Web安全漏洞杭州华三通信技术有限公司版权所有,未经授权不得使用与传播H3C专业安全培训课程Web安全现状SQL注入XSSCSRF文件上传目录遍历其他Web安全漏洞目录丰富了我们的生活Web来源于WorldWideWeb,Web系统是Internet的重要组成部分,形形色色的Web系统正在改变着我们的生活。网上购物网上汇款交费写博客Web小游戏竞选网上营业厅系统的安全性参差不齐……复杂应用系统代码量大、开发人员多、难免出现疏忽;系统屡次升级、人员频繁变更,导致代码不一致;历史遗留系统、试运行系统等多个Web系统共同运行于同一台服务器上;开发人员未经过安全编码培训;定制开发系统的测试程度不如标准的产品;……相对安全性而言,开发人员更注重系统功能!客户满意界面友好操作方便处理性能实现所有功能架构合理代码修改方便运行稳定没有bug不同模块低耦合开发进度与成本开发者的关注点攻击场景攻击动机攻击方法攻击工具系统漏洞防范措施攻击面(attacksurface)Web服务器黑客攻击动机•恶作剧;•关闭Web站点,拒绝正常服务;•篡改Web网页,损害企业名誉;•免费浏览收费内容;•盗窃用户隐私信息,例如Email;•以用户身份登录执行非法操作,从而获取暴利;•以此为跳板攻击企业内网其他系统;•网页挂木马,攻击访问网页的特定用户群;•仿冒系统发布方,诱骗用户执行危险操作,例如用木马替换正常下载文件,要求用户汇款等;•……常用的挂马exploit•MS07-017MSWindowsAnimatedCursor(.ANI)RemoteExploit•MS07-019•MS07-004VMLRemoteCodeExecution•MS06-073•MS06-071XMLCoreServicesRemoteCodeExecution•MS06-068•MS06-067•MS06-057WebViewFolderIcodActiveX•MS06-055•MS06-014MDACRemoteCodeExecution•MS06-013•MS06-005•MS06-004•MS06-001攻击方法•Googlehack•网页爬行•暴力猜解•Web漏洞扫描•错误信息利用•根据服务器版本寻找现有的攻击代码•利用服务器配置漏洞•文件上传、下载•构造恶意输入(SQLSQL注入、命令SQL注入、跨站脚本攻击)•HTTP协议攻击•拒绝服务攻击•其他攻击点利用(WebServices,Flash,Ajax,ActiveX,JavaApplet)•业务逻辑测试•……收集系统相关的通用信息•将系统所有能访问页面,所有的资源,路径展现出来;•URL、口令、数据库字段、文件名都可以暴力猜解,注意利用工具;•利用Web漏洞扫描器,可以尽快发现一些明显的问题•错误可能泄露服务器型号版本、数据库型号、路径、代码;•搜索Google,CVE,BugTraq等漏洞库是否有相关的漏洞;•服务器后台管理页面,路径是否可以列表等;•是否可以上传恶意代码?是否可以任意下载系统文件;•检查所有可以输入的地方:URL、参数、Post、Cookie、Referer、Agent等是否进行了严格的校验;•HTTP协议是文本协议,可利用回车换行做边界干扰;•用户输入是否可以影响服务器的执行;•需要特殊工具才能利用这些攻击点;•复杂的业务逻辑中是否隐藏漏洞。攻击工具:WebScarab特色:HTTP协议完全可见(可以完全操作所有的攻击点)支持HTTPS(包括客户端证书)全程数据与状态记录,可随时回顾=OpenWebApplicationSecurityProject,OWASP是最权威的Web应用安全开源合作组织,其网站上有大量的Web应用安全工具与资料。WebScarab是OWASP组织推出的开源工具,可应用于一切基于HTTP协议系统的调试与攻击。=page1.htmlHTTP/1.1Accept:*/*Referer::en-us,de;q=0.5Accept-Encoding:gzip,deflateContent-Type:application/x-:Mozilla/4.0Host::JSESSIONID=0000dITLGLqhz1dKkPEtpoYqbN2uid=fred&password=secret&pagestyle=default.css&action=login直接可在浏览器中利用的输入所有输入点更多输入点黑客实际利用的输入点攻击漏洞:安全漏洞库Securityfocus网站的漏洞库名称为Bugtraq,它给每个漏洞编号叫BugtraqID。()CVE是和Bugtraq齐名的漏洞库,它给漏洞库编号叫CVEID。()CVE与Bugtraq漏洞库都会对确认的漏洞进行统一编号,其编号是业界承认的统一标准,有助于避免混淆。在这些漏洞库中都可以查到大量的Web应用漏洞。简称为XSS如果Web应用没有对攻击者的输入进行适当的编码和过滤,就转发给其他用户的浏览器时,可能导致XSS漏洞;攻击者可利用XSS在其他用户的浏览器中运行恶意脚本,偷窃用户的会话,或是偷偷模拟用户执行非法的操作。发帖子,发消息2注入InjectionFlaws如果Web应用没有对攻击者的输入进行适当的编码和过滤,就用于构造数据库查询或操作系统命令时,可能导致注入漏洞;攻击者可利用注入漏洞诱使Web应用执行未预见的命令(即命令SQL注入)或数据库查询(即SQLSQL注入)。搜索用户3文件上传MaliciousFileExecution如果Web应用允许用户上传文件,但对上传文件名未作适当的过滤时,用户可能上载恶意的脚本文件(通常是Web服务器支持的格式,如ASP,PHP等);脚本文件在Include子文件时,如果Include路径可以被用户输入影响,那么可能造成实际包含的是黑客指定的恶意代码;上述两种情况是造成文件上传的最常见原因。上传附件,上传头像4目录遍历InsecureDirectObjectReference访问内部资源时,如果访问的路径(对文件而言是路径,对数据库而言是主键)可被攻击者篡改,而系统未作权限控制与检查的话,可能导致攻击者利用此访问其他未预见的资源。下载文件(续)No.漏洞名称简介举例5跨站请求伪造CrossSiteRequestForgery,简称为CSRFCSRF攻击即攻击者在用户未察觉的情况下,迫使用户的浏览器发起未预见的请求,其结果往往损害用户本身的利益;CSRF攻击大多利用Web应用的XSS漏洞,也有很多CSRF攻击没有利用XSS而是利用了HTML标签的特性。不明邮件中隐藏的html链接6信息泄露与错误处理不当InformationLeakageandImproperErrorHandlingWeb应用可能不经意地泄露其配置、服务器版本、数据库查询语句、部署路径等信息,或是泄露用户的隐私。攻击者可利用这些弱点盗窃敏感信息。错误信息揭示路径7认证与会话管理不当BrokenAuthenticationandSessionManagement如果Web应用的认证与会话处理不当,可能被攻击者利用来伪装其他用户身份。sessionID可猜测8存储不安全InsecureCryptographicStorge如果Web应用没有正确加密存储敏感信息,可能被攻击者盗取。例如攻击者可能通过SQL注入手段获取其他用户的密码,如果Web应用对密码进行了加密,就可以降低此类威胁。CSDN密码明文保存9通讯加密不安全InsecureCommunication如果Web应用没有对网络通讯中包含的敏感信息进行加密,可能被窃听。认证信息明文传输10URL访问控制不当FailuretoRestrictURLAccess如果Web应用对URL访问控制不当,可能造成用户直接在浏览器中输入URL,访问不该访问的页面。未授权访问Web安全现状SQL注入XSSCSRF文件上传目录遍历其他Web安全漏洞目录注入SQL注入漏洞是由于SQL语句的调用方法不完善而产生的安全隐患。SQL注入漏洞产生的影响:数据库内的信息全部被外界窃取数据库中的内容被篡改登录认证被绕过其他,例如:服务器上文件被读取、修改、程序被执行等应用数据库服务器恶意输入../../../etc/passwdOK!123调用数据库查询直接调用操作系统命令通过数据库调用操作系统命令目标:借Web应用的“刀”来攻击服务器数据库或操作系统。方法:检查Web应用调用数据库服务器或操作系统功能所有调用点,检查是否能构造恶意输入,进而影响调用命令。下面重点讲解SQLInjection。可能影响的系统几乎所有的关系数据库系统和相应的SQL语言都面临SQL注入的潜在威胁MSSQLServerOracleMySQLMSAccessPostgres,DB2,Sybase,Informix,等等各种后台语言/系统进行数据库访问的方式ASP,JSP,PHP访问后台数据库的Perl和CGI脚本XML,XSL和XSQLVB,MFC,以及其他基于ODBC的工具和API等等字符串参数程序员未预料到的结果……Username:admin'OR1=1--Password:1SELECTCOUNT(*)FROMUsersWHEREusername='admin'OR1=1--'andpassword='1'`/login.asp攻击者登录成功!‘是SQL字符串变量的定界符攻击关键通过定界符成功地将攻击者的意图注入到SQL语句中!通过注释保证SQL语句正确!--是MSSQL的注释符数字参数管理员程序员考虑的场景:age:20SELECTname,age,locationFROMUsersWHEREage20程序员未预料到的结果……age:1000000unionselectname,age,passwordfromusersSELECTname,age,locationFROMUsersWHEREage999unionselectname,age,passwordfromusers实际上:大多数程序员都注意到了’的问题,他们用’’来代替用户输入的’,从而防止字符串SQL注入;但很多人缺忽略了同样严重的数字注入问题。其防范方法是检查用户输入的数字是否合法。Union暴库是常见的注入方法Union语法要求前后两句SQL