• 1. 初步分类: 权限 (黑盒+sql注入+目录遍历+非法文件与文字上传与写入) 加密 (网络传输、本地cookie、源文件、认证与会话) 攻击 (缓冲区溢出、sql注入、异常处理信息、端口扫描、服务器攻击、跨站脚本攻击、http回车换行注入攻击、代码注入、url重定向、google攻击) 理论篇
  • 2. 做的比较粗糙,大家在这块有什么可以交流下, 消逝
  • 3. 黑盒主要测试点 用户管理模块,权限管理模块,加密系统,认证系统等 工具使用 Appscan(首要)、Acunetix Web Vulnerability Scanner(备用)、HttpAnalyzerFull、TamperIESetup 木桶原理 安全性最低的模块将成为瓶颈,需整体提高
  • 4. 他人模型(虽然比较旧了)安全管理与审计物理层安全网络层安全传输层安全 应用层安全链路层 物理层网络层 传输层 应用层 表示层 会话层审计与监控 身份认证 数据加密 数字签名 完整性鉴别 端到端加密 访问控制 点到点链路加密 物理信道安全访问控制 数据机密性 数据完整性用户认证 防抵赖 安全审计网络安全层次层次 模型网络安全技术实现安全目标 用户 安全
  • 5. (一)可手工执行或工具执行 输入的数据没有进行有效的控制和验证 用户名和密码 直接输入需要权限的网页地址可以访问 上传文件没有限制(此次不需要) 不安全的存储 操作时间的失效性
  • 6. 1.1)输入的数据没有进行有效的控制和验证数据类型(字符串,整型,实数,等) 允许的字符集 最小和最大的长度 是否允许空输入 参数是否是必须的 重复是否允许 数值范围 特定的值(枚举型) 特定的模式(正则表达式)(注:建议尽量采用白名单)
  • 7. 1.21)用户名和密码-1检测接口程序连接登录时,是否需要输入相应的用户 是否设置密码最小长度(密码强度) 用户名和密码中是否可以有空格或回车? 是否允许密码和用户名一致 防恶意注册:可否用自动填表工具自动注册用户? (傲游等) 遗忘密码处理 有无缺省的超级用户?(admin等,关键字需屏蔽) 有无超级密码? 是否有校验码?
  • 8. 1.22)用户名和密码-2 密码错误次数有无限制? 大小写敏感? 口令不允许以明码显示在输出设备上 强制修改的时间间隔限制(初始默认密码) 口令的唯一性限制(看需求是否需要) 口令过期失效后,是否可以不登陆而直接浏览某个页面 哪些页面或者文件需要登录后才能访问/下载 cookie中或隐藏变量中是否含有用户名、密码、userid等关键信息
  • 9. 1.3)直接输入需要权限的网页地址可以访问避免研发只是简单的在客户端不显示权限高的功能项 举例Bug: 没有登录或注销登录后,直接输入登录后才能查看的页面的网址(含跳转页面),能直接打开页面; 注销后,点浏览器上的后退,可以进行操作。 正常登录后,直接输入自己没有权限查看的页面的网址,可以打开页面。 通过Http抓包的方式获取Http请求信息包经改装后重新发送 从权限低的页面可以退回到高的页面(如发送消息后,浏览器后退到信息填写页面,这就是错误的)
  • 10. 1.4)上传文件没有限制(此次不需要) 上传文件还要有大小的限制。 上传木马病毒等(往往与权限一起验证) 上传文件最好要有格式的限制; 此次我们不需要验证此处,简单介绍下,跳过
  • 11. 1.5)不安全的存储 在页面输入密码,页面应显示 “*****”; 数据库中存的密码应经过加密; 地址栏中不可以看到刚才填写的密码; 右键查看源文件不能看见刚才输入的密码; 帐号列表:系统不应该允许用户浏览到网站所有的帐号,如果必须要一个用户列表,推荐使用某种形式的假名(屏幕名)来指向实际的帐号
  • 12. 1.6)操作时间的失效性 检测系统是否支持操作失效时间的配置,同时达到所配置的时间内没有对界面进行任何操作时,检测系统是否会将用户自动失效,需要重新登录系统。 支持操作失效时间的配置。 支持当用户在所配置的时间内没有对界面进行任何操作则该应用自动失效。 如,用户登陆后在一定时间内(例如15 分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
  • 13. (二)借助工具或了解后手工来进行测试 不能把数据验证寄希望于客户端的验证 不安全的对象引用,防止XSS攻击 注入式漏洞(SQL注入) 传输中与存储时的密码没有加密 ,不安全的通信 目录遍历
  • 14. 2.1)不能把数据验证寄希望于客户端的验证 避免绕过客户端限制(如长度、特殊字符或脚本等),所以在服务器端验证与限制 客户端是不安全,重要的运算和算法不要在客户端运行。 Session与cookie 例:保存网页并对网页进行修改,使其绕过客户端的验证。 (如只能选择的下拉框,对输入数据有特殊要求的文本框) 还可以查看cookie中记录,伪造请求 测试中,可使用TamperIESetup来绕过客户端输入框的限制
  • 15. 2.21)不安全的对象引用,防止XSS等攻击阻止带有语法含义的输入内容,防止Cross Site Scripting (XSS) Flaws 跨站点脚本攻击(XSS) 防止Cross-site request forgery(CSRF)跨站请求伪造 xss解释:不可信的内容被引入到动态页面中,没有识别这种情况并采取保护措施。攻击者可在网上提交可以完成攻击的脚本,普通用户点击了网页上这些攻击者提交的脚本,那么就会在用户客户机上执行,完成从截获帐户、更改用户设置、窃取和篡改 cookie 到虚假广告在内的种种攻击行为
  • 16. 2.22)不安全的对象引用,防止XSS等攻击测试方法:在输入框中输入下列字符,可直接输入脚本来看 HTML标签:<…>…  转义字符:&(&);<(<);>(>); (空格) ; 脚本语言: 特殊字符:‘  ’ <>/     最小和最大的长度 是否允许空输入  对Grid、Label、Tree view类的输入框未作验证,输入的内容会按照html语法解析出来,要控制脚本注入的语法要素。比如:javascript离不开:“<”、“>”、“(”、“)”、“;”. 在输入或输出时对其进行字符过滤或转义处理
  • 17. 2.23)注入式漏洞(SQL注入)对数据库等进行注入攻击。 例:一个验证用户登陆的页面,   如果使用的sql语句为:   Select *  from  table A where  username=’’ + username+’’ and pass word ….. 则在Sql语句后面 输入  ‘ or 1=1 ――  就可以不输入任何password进行攻击 SELECT count(*) FROM users WHERE username='a' or 'a'='a' AND password='a' or 'a'='a' (资料太多,不显示了此处,借助工具Appscan等吧)
  • 18. 2.24)传输中与存储时的密码没有加密利用ssl来进行加密,在位于HTTP层和TCP层之间,建立用户与服务器之间的加密通信 进入一个SSL站点后,可以看到浏览器出现警告信息,然后地址栏的http变成https (特点确定) 证书认证 ———————————————————————— 检查数据库中的用户密码、管理者密码等字段是否是以加密方式保存。 存储数据库单独隔离,有备份的数据库,权限唯一
  • 19. 2.25)目录遍历举例: http://love.ah163.net/Personal_Spaces_List.php?dir=MyFolder 那现在把这个URL改装一下: http://love.ah163.net/Personal_S ... /local/apache/conf/ /usr/local/apache/conf/里的所有文件都出来了 简要的解决方案:   1、限制Web应用在服务器上的运行 ,格设定WEB服务器的目录访问权限   2、进行严格的输入验证,控制用户输入非法路径,如在每个目录访问时有index.htm
  • 20. (三)研发或使用工具才能进行认证和会话数据不能作为GET的一部分来发送 隐藏域与CGI参数 不恰当的异常处理 不安全的配置管理 缓冲区溢出 拒绝服务 日志完整性、可审计性与可恢复性
  • 21. 3.1)Get or post 认证和会话数据不应该作为GET的一部分来发送,应该使用POST 例:对Grid、Label、Tree view类的输入框未作验证,输入的内容会按照html语法解析出来 可使用TamperIESetup或ScannerHttpAnalyzerFull来判断
  • 22. 3.2)隐藏域与CGI参数Bug举例: 分析:隐藏域中泄露了重要的信息,有时还可以暴露程序原代码。 直接修改CGI参数,就能绕过客户端的验证了。 如: 只要改变value的值就可能会把程序的原代码显示出来。 如大小写,编码解码,附加特殊字符或精心构造的特殊请求等都可能导致CGI源代码泄露 可使用appscan或sss等来检测,检查特殊字符集
  • 23. 3.3)不恰当的异常处理 分析:程序在抛出异常的时候给出了比较详细的内部错误信息,暴露了不应该显示的执行细节,网站存在潜在漏洞,有可能会被攻击者分析出网络环境的结构或配置 通常为其他攻击手段的辅助定位方式 举例:如www.c**w.com ,搜索为空时,,数据库显示出具体错误位置,可进行sql注入攻击或关键字猜测攻击
  • 24. 3.4)不安全的配置管理 分析:Config中的链接字符串以及用户信息,邮件,数据存储信息都需要加以保护 配置所有的安全机制, 关掉所有不使用的服务, 设置角色权限帐号, 使用日志和警报。 手段:用户使用缓冲区溢出来破坏web应用程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应用程序来执行任意代码 例:数据库的帐号是不是默认为“sa”,密码(还有端口号)是不是直接写在配置文件里而没有进行加密。
  • 25. 3.5)缓冲区溢出 WEB服务器没有对用户提交的超长请求没有进行合适的处理,这种请求可能包括超长URL,超长HTTP Header域,或者是其它超长的数据 使用类似于“strcpy(),strcat()”不进行有效位检查的函数,恶意用户编写一小段程序来进一步打开安全缺口,然后将该代码放在缓冲区有效载荷末尾,这样,当发生缓冲区溢出时,返回指针指向恶意代码 用户使用缓冲区溢出来破坏web应用程序的栈,通过发送特别编写的代码到web程序中,攻击者可以让web应用程序来执行任意代码。 如apach缓冲区溢出等错误,第三方软件也需检测
  • 26. 3.6)拒绝服务手段:超长URL,特殊目录,超长HTTP Header域,畸形HTTP Header域或者是DOS设备文件 分析:攻击者可以从一个主机产生足够多的流量来耗尽狠多应用程序,最终使程序陷入瘫痪。需要做负载均衡来对付。 详细如:死亡之ping、泪滴(Teardorop)、 UDP洪水(UDP Flood)、 SYN洪水(SYN Flood)、 Land攻击、Smurf攻击、Fraggle攻击、 畸形消息攻击
  • 27. 3.7)日志完整性。可审计性与可恢复性 服务器端日志:检测系统运行时是否会记录完整的日志。 如进行详单查询,检测系统是否会记录相应的操作员、操作时间、系统状态、操作事项、IP地址等 检测对系统关键数据进行增加、修改和删除时,系统是否会记录相应的修改时间、操作人员和修改前的数据记录。
  • 28. 工具篇 Watchfire Appscan——全面自动测试工具 Acunetix Web Vulnerability ——全面自动测试工具 ScannerHttpAnalyzerFull——加载网页时可判断 TamperIESetup——提交表单时改造数据 注:上述工具最好安装在虚拟机中,不影响实际机环境 Appscan、 Web Vulnerability 需安装.net framework,可能与sniffer冲突 ScannerHttpAnalyzerFul与TamperIESetup会影响实际机浏览器平时的功能测试
  • 29. (一)Watchfire Appscan选择模板,default(含大部分的测试集合)
  • 30. 填入用户名与密码(各页面通用)
  • 31. (二)Acunetix Web Vulnerability选择web scan,填写用户名与密码
  • 32. (三)ScannerHttpAnalyzerFull嵌套在网页中,对于每个加载项都有加载时间、method、result、type、url等
  • 33. Method 主要验证到时是否使用post来进行认证与会话 Result 主要看加载项是否出现http 403、404、500等错误(对于错误还要进行归类)
  • 34. (四)TamperIESetup验证用户名与密码传输(post or get)
  • 35. (五)其他工具Companion js—逆向查看java语言编写的网页源码 Nessus——扫描服务器(协议与端口) Paros——扫描工具 Sss——系统扫描工具 Sds——数据库扫描工具 wikto——spider、google hack等 X-scan、流光