安全工程师的核心竞争力不在于他能拥有多少个0day,掌握多少种安全技术,而是在于他对安全理解的深度,以及由此引申的看待安全问题的角度和高度。

0x01 世界观安全

安全三要素

机密性、完整性、可用性

安全评估过程

资产等级划分、威胁分析、风险分析、确认解决方案

白帽子兵法

Secure by default、最小权限、纵深防御、数据代码分离、不可预测性 五大原则互联网本来是安全的,自从有了研究安全的人,就变得不安全了。

0x02 浏览器安全

Orign 浏览器同源策略是浏览器安全基础浏览器沙箱恶意网址拦截

0x03 跨站脚本攻击(XSS)

Cross Site Script反射、存储、DOM Based远程Payload:
var img = document.createElement("img");img.src = "http://blog.dyboy.cn/index.do?m=delete&id=123";document.body.appendChild(img);
类似还有表单,XMLHttpRequestXSS WormCSS中 background:url('javascript:alert(1)')Flash XSSXSS防御:HttpOnly、浏览器filter

0x04 跨站请求伪造(CSRF)

Cross Site Request Forgery对于CSRF漏洞的利用,我最初的想法是在因为业务没有验证token,目标网站管理员在浏览黑客精心搭建的网页时,导致CSRF攻击,相当于在第三方网站中执行了管理网站的操作请求。浏览器持有 Third-party Cookie 是本地Cookie(可设置时效,本地存储),Session Cookie浏览器关闭即失效(内存中)P3P : 允许跨域访问隐私数据Flash CsrfCsrf防御: 验证码、Referer CheckAnit Csrf TokenToken尽量位于表单,敏感操作改为POST提交,XSS做好防护,否则CSRF防御也只是空中楼阁

0x05 点击劫持(ClickJacking)

拖拽劫持 数据窃取 触屏劫持防御:JavaScript禁止iframe嵌套 HTTP头X-Frame-Optionsiframe 可设置 sandbox 参数

0x06 SQL注入

盲注(Blind Injection)Timing Attack : BENCHMARK(count,expr) 用于延时,当然还有sleep()命令注入:UDFxp_cmdshell sysadmin 权限下可开启sp_configure,sp_addextendproc开启此功能xp_regread 操作注册表等等很多,在SQLMAP下已经集成宽字节注入SQL Column Truncation strict模式防御SQL注入攻击: mysql_real_escape_string()转义 预编译语句,绑定变量 数据类型检查

0x07 XML注入

代入数据,改变了xml结构

0x08 代码注入

eval() assert() system() 等防御:禁用此类危险函数

0x09 CRLF注入

Carriage Return, Line Feed -> \r\n使用CRLF的地方都可能存在此类型注入,如Log和HTTP头(Http Response Spliting)

0x10 文件上传漏洞

解析问题、脚本文件、文件包含黑名单的检测方式绕过:0x00、伪造文件头Apache解析问题:文件名从后往前直到一个认识的文件类型为止IIS文件解析问题:截断字符 ;/a.asp/路径下所有类型文件当作asp解析,PUT method(上传),MOVE method(改名),DELETE method…使用 OPTIONS /HTTP/1.1 探测服务器信息PHP CGI 路径解析问题:test.jpg/.php当作php脚本执行利用上传文件钓鱼防御:白名单、上传目录不可写不可执行、单独设置文件域名、随机数写文件名白名单类型

0x11 认证与会话管理

Authentication认证实际上就是一个验证凭证的过程单/双/多因素认证OWASP 推荐策略加salt hashsessionSession Fixation 攻击Session 保持攻击SSO(单点登录)

0x12 访问控制

Authorization 读、写、执行垂直和水平越权OAuth:授权第三方应用

0x13 加密算法问题

分组加密算法有:DES,3-DES,Blowfish,IDEA,AES等Reused Key AttackBit-flipping AttackECB模式缺陷在于 电码薄式的方式 调换明文位置,密文位置调换,如此变动可反向推算Padding Oracle AttackMD5 Length Extention Attack密钥等不要硬编码在程序代码中不要使用ECB模式不要使用流密码使用HMAC-SHA1代替MD5甚至代替SHA-1不要使用相同的key做不同的事情saltsIV 要随机产生不要自己实现加密算法,尽量使用安全专家已实现好的库不要依赖系统的保密性使用CBC模式的AES256加密使用HMAC-SHA512检查完整性使用带saltSHA-256SHA-512用于Hashing

0x14 伪随机数问题

弱随机问题,纯数字4-6位都是属于弱随机伪随机因为时间时刻推倒的,php中的 microtime() 由一个微秒数和系统当前秒数组合PHP中有rand()(范围:32767)和mt_rand()(范围2147483647)的随机数算法。mt_rand() 函数通过seed来计算出的伪随机数,其值固定,多次计算所得值也固定。当在统一进程中,同一个seed通过mt_rand()所生成的值都是固定的。
WAF丨《白帽子讲web安全》-V站
安全的随机数:random_int(),多种随机算法结合,时间取md5某几位值等方式,openssl_random_pseudo_bytes(int length [, bool &$crypto_strong])

0x15 WEB框架安全

Model-View-Controller这里其实就是产品的安全讨论,在MVC中变量等地方容易出现XSS等问题,在对的地方做对的事情,针对性的处理安全隐患,做好程序的过滤和拦截,前端拦截只是对正常用户误操作的提示,节省服务器资源,但同时必须做好后端对参数的检查过滤。在常见的漏洞中,每个部分的功能与可能发生的漏洞对应做好检查和防御Struts2 命令执行漏洞Spring MVC 命令执行漏洞Django 命令执行漏洞

0x16 应用层拒绝服务攻击

DDOS 分布式拒绝服务攻击