微信群里有小伙伴问 web 渗透应该咋入门? web 代码审计应该咋入门? 是不是学渗透主要是掌握扫描工具能验证漏洞就可以了?
其实呢套哥认为, 渗透 和 代码审计 虽然是两个方向, 但是对于做安全的小伙伴是一回事.
殊途同归
两条途径最终结果是一样的:
只有看得懂代码了解漏洞原理才能随机应变在复杂的环境下做好渗透测试, 也只有具备了一定黑盒渗透测试经验才能更快更准确的发现问题点并能在代码审计后写出完美的 poc 把漏洞利用的淋漓尽致.
所以说学好 web 安全就一定要渗透测试方法和代码原理都要学习.
那到底 web 安全该怎么入门呢, 套哥的建议是:
1, 先了解一个 web 系统是怎么运行的, 比如一个新闻发布系统(cms), 在线商城系统, 网络办公系统是如何搭建并运行起来的.
2, 然后了解这些系统都有哪些功能和业务逻辑, 这些功能和业务逻辑的大概实现原理.
3, 对常见 web 系统漏洞要熟知其原理, 成因, 危害, 测试方法等(如: 网络设备, 操作系统, 中间件, 数据库, web 程序, 业务逻辑)
4, 结合具体系统的各个功能和环节匹配可能存在的漏洞, 并进行测试, 最终形成测试报告或技术总结
其中呢: 1,2 属于基础, 3,4 需要积累.
套哥先给小白说说基础哈, 后面的有机会咱们坐下来慢慢来掰扯掰扯.
有的小伙伴可能会说我是要做 web 安全的, 了解 "网络设备, 操作系统, 中间件, 数据库" 这些有必要么?
咱们先不说答案, 先来看看一个 web 系统是咱们运行的.
首先呢, 这个 web 系统得有他的功能, 也就是有他的业务逻辑, 比如是一个新闻发布系统还是一个商城系统......
其次呢, 要实现这个业务逻辑就必须要靠编写 web 脚本程序的应用代码来实现, 光有代码还是不够的, 必要的时候还要有数据库来存放业务数据, 比如, 你用 php 实现了一个留言本系统, 那么用户的留言信息就可以存放在 mysql 数据库中.
第三呢, web 程序要运行起来必须有运行环境, 不管是 iis, 还是 Apache, 还是 tomcat 得有一个 web 中间件来运行 web 脚本.
第四呢, 不管是什么中间件或者数据库要运行起来就不能没有操作系统环境, 比如你在 windows 上搭建 iis+SQL Server 的 web 环境, 或者在 centos 上搭建 Apache+php+mysql 的 web 环境, 都要有操作系统作为基础. 第五呢, 有个操作系统搭建好了 web 系统, 那么要联网运行, 就必须通过网络设备接入到互联网中, 所以呢, 网络设备及环境是必不可少的.
看了上面这些, 我不说你也知道答案了, web 系统安全在广义上是比较全面的. 因为任何一个环节出了问题, 都会影响整个系统的安全.
所以说,"殊途同归" 不管你现在是在做黑盒渗透测试的, 还是在做代码审计的, 只要我们的目标是做 WEB 安全, 那么上面说的这些就都需要掌握.
第一部分: 基础环境的安全
网络设备, 操作系统, 中间件, 数据库这几个基础环境比较相似, 可能存在的问题主要是弱口令和低版本漏洞, 存在的风险就是基础环境被控制, 相比 web 脚本的漏洞, 这部分的危害是更为严重的, 比如, 操作系统存在管理员账号弱口令或者存在远程缓冲区溢出漏洞可以命令执行, 攻击者就可以对服务器进行控制了, 如果权限配置不当被攻击者拿到了系统管理员权限, 那这个服务器上的 web 系统就面临着任人宰割的风险了, 因为所有代码, 数据都跑在服务器上, 一旦拿到服务器操作系统的最高权限, 代码, 数据就都可以任意读取或更改了.
那么像这样的安全隐患需要怎么检测呢, 之前在 我是工具党! 我骄傲! http://www.freebuf.com/column/169292.html 一文中提到了一些检测工具, 比如 NESSUS,NMAP,OpenVAS 等, 都可以对这部分的基础环境进行安全扫描.
可以发现这部分的漏洞有如下特点:
1,"挖掘难度大", 对于小白来说基本上是望而却步的, 所以刚入坑的小伙伴可以先掌握检测和验证的方法.
2,"验证风险大", 对于弱口令还好说, 如果是漏洞, 如缓冲区溢出漏洞等漏洞, 在验证的时候很可能会对目标系统造成一些破坏, 因此验证的时候要格外小心, 对于小白来说要多收集一些常用的可靠的漏洞验证及利用 poc.
基于以上特点, 入坑的小白需要数量掌握常规漏洞扫描器的使用, 及漏洞验证及利用工具的使用.
扫描器: 系统扫描至少要熟练掌握: NESSUS,NMAP,OpenVAS 等
漏洞利用: 至少要熟练掌握: Metasploit 等
并且也要收集和积累常用漏洞验证的 poc 代码, 有的小伙伴可能要问了
"常见的基础环境的漏洞基本都可以用 Metasploit 来验证和利用啊, 为什么还要再收集一份呢?"
呃...... 这个是对的, Metasploit 确实很强大, 但对于一些漏洞在利用方面, 当选择不同参数或者不同 payload 及 shellcode 的时候很可能会让目标系统崩溃, 所以还是建议积累一些常见漏洞的稳定利用代码比较好.
总结一下: 入坑小白要做到 "用得了扫描, 验得了漏洞".
第二部分: web 程序脚本安全
web 程序漏洞主要可以参考 owasp top 10, 每隔几年 owasp 都会更新 top 10 漏洞的排名, 截止 2017 排名如下:
插图 1
详细可参考 http://www.owasp.org.cn/owasp-project/OWASPTop102017RC2.pdf
这个文档里都有详细的说明, 套哥就不多说了, 这部分与基础环境的漏洞还是有区别的, 基础环境漏洞的检测及验证方法比较固定, 但 web 程序脚本漏洞的检测就比较多样了, 因为不同的程序代码的实现方法各不相同, 导致同一个漏洞可能存在不同的表现形式, 比如 sql 注入漏洞, 存在漏洞的参数可能在 http 数据包的 get 请求中, 也可能在 post 请求中, 还可能在 cookies 以及其他字段中, 这个参数可能未经处理直接拼接成 sql 语句进行数据操作, 也可能经过编码或者过滤后再拼接成 sql 语句进行数据操作...... 这每一种情况下对于漏洞检测来说需要构造的验证代码都不大一致, 因此有些扫描器就有可能漏报或者误报, 那么及需要我们进行手工测试了.
总结一下: 入坑小白要做到
1, 对常见 web 应用程序漏洞 owasp top 10 的原理要深入了解
2, 见 web 扫描器要数量使用
3, 对 http 协议各个字段及参数要数量掌握
4, 对于常见 web 漏洞要能结合不同测试环境进行手工测试及验证
5, 收集并分析常见 web 应用程序 (cms,shop,oa 等) 的漏洞利用 poc 并掌握其原理
第三部分: 业务逻辑安全
业务逻辑就要结合具体业务系统来说了, 当然也能总结出一些通用的部分, 比如:
, 用户登录逻辑
, 密码找回逻辑
, 用户越权逻辑
, 验证码机制逻辑等等
这部分的漏洞也是有一定特点的:
, 与业务功能结合紧密
, 扫描器基本无能为力, 需要手工测试
比如用户越权来说, 当 a 用户正常登陆之后, 会生成 a 的用户标识, 在用户 a 向系统请求数据的时候, 会带上用户标识以便系统找到是谁在请求数据(比如用户 a 的标识是 "user=a"), 然后 web 系统接收到请求后会判断用户标识字段发现是 a 的请求, 就会把 a 的数据反馈给用户. 那么如果系统并没有对用户 a 发来的请求做进一步的身份验证, 当用户 a 将标识改为 "user=b" 的时候想 web 系统发送数据请求的时候, 系统就很有可能将 b 的数据反馈给 a. 如果使用脚本对所有用户进行遍历提交, 就可能获得系统中所有用户的数据.
常用的手工测试工具有: Burp Suite,Fiddler 等, 其中 Burp Suite 功能比较全面, 推荐使用.
这部分测试的时候通常关注 http 数据包的发送, 返回包中的各个字段变化, 再结合业务逻辑进行更改发包测试.
从这几部分的漏洞特点也可以看出, 扫描器的作用是越来越少的, 需要手工测试的越来越多.
这也就需要入坑小白要做到:
1, 对系统的业务逻辑要梳理清楚
2, 掌握可能存在逻辑漏洞的功能点
3, 熟练使用 Burp Suite 等工具更改发包及回包数据
4, 发现漏洞后可推测其代码编写的逻辑问题
说这些也只是套哥我个人的一点经验, 希望能帮到刚入坑的小白, 后面我会继续和大家分享常见漏洞的一些具体见检测方法和利用技巧, 希望大家支持.
如果你也有经验要交流分享, 可以联系我(微信公众号:"安全圈套", 套哥微信号:"anquanquantao")
来源: http://www.tuicool.com/articles/JZ3Yzuv