重磅推荐
【前言】

Preface 前  言代码审计是指对源代码进行检查,寻找代码中的bug,这是一项需要多方面技能的技术,包括对编程的掌握、漏洞形成原理的理解,系统和中间件等的熟悉。
为什么需要代码审计代码审计是企业安全运营以及安全从业者的基础能力。代码审计在很多场景中都需要用到,比如企业安全运营、渗透测试、漏洞研究等。目前已经有不少公司在推广微软的软件SDL(Security Development Lifecycle,安全开发周期),它涵盖需求分析→设计→编码→测试→发布→维护,安全贯穿整个软件开发周期,其中设计、编码和测试是整个SDL的核心,安全问题大多在这里被解决掉。其中在安全设计这块,必须要非常了解漏洞形成原理,纵观全局。而在代码实现也就是编码阶段,安全依靠于编程人员的技术基础以及前期安全设计的完善性。然后是测试,测试包括白盒测试。黑盒测试以及灰盒测试。黑盒测试也叫功能测试,是指在不接触代码的情况下,测试系统的功能是否有bug,是否满足设计需求。而白盒测试就是我们说的代码审计,以开放的形式从代码层面寻找bug,如果发现有bug则返回修复,直到没有bug才允许软件发布上线。
渗透测试人员掌握代码审计是非常重要的,因为我们在渗透过程中经常需要针对目标环境对payload进行调试。另外,如果通过扫描器扫描到Web目录下的一个源码备份包,通常攻击者都会利用源码包找一些配置文件,因为里面有数据库、API等一类配置。如果环境有限制,比如目标站数据库限制连接IP等,那么工具小子可能在源码包进行的漏洞利用也就到此为止。对于懂代码审计的人,结果完全不一样,他可以对源码包进行安全审计,发现网站代码里存在的漏洞,然后利用挖掘到的漏洞进行渗透。
编程能力要求代码审计对编程语言的基础有一定要求,至少要能看得懂代码,这里说的看懂代码不是简单地理解几个if...else语句和for循环,而是能看懂代码的逻辑,即使有很多函数没见过,也是可以到Google去查的。都说编程在语言这块是一通百通,只要我们对编程思想理解得非常透彻,重新接触一种编程语言也是非常快就能上手的,所以不管你之前写过Java还是C#程序,想玩一玩PHP的代码审计都应该不是什么大问题。
代码审计环境准备代码审计首先要准备的是审计环境工具,不同的环境会影响漏洞的利用,所以建议Linux和Windows系统下的PHP环境都搭建一套,并且需要多个PHP版本。关于版本切换这块,建议安装phpStudy,phpStudy是一套Apache Nginx LightTPD PHP MySQL phpMyAdmin Zend Optimizer Zend Loader的集成环境,可以很方便地安装和切换环境。代码审计的工具有很多个,这里推荐使用笔者开发的Seay源代码审计系统以及RIPS,二者都是免费开源工具。
除了自动化审计工具外,还有一些像Burp Suite、浏览器扩展以及编码工具等审计辅助工具也都是的。
代码审计思路通常做代码审计都是检查敏感函数的参数,然后回溯变量,判断变量是否可控并且没有经过严格的过滤,这是一个逆向追踪的过程。而代码审计并非这一种手段,还可以先找出哪些文件在接收外部传入的参数,然后跟踪变量的传递过程,观察是否有变量传入到高危函数里面,或者传递的过程中是否有代码逻辑漏洞,这是一种正向追踪的方式,这样的挖掘方式比逆向追踪挖掘得更全。还有一种方式是直接挖掘功能点漏洞,根据自身的经验判断该类应用通常在哪些功能中会出现漏洞,直接全篇阅读该功能代码。
可能不少新手对于学习PHP代码审计还有一些迷茫,或许之前尝试过学习,但一直没有很好的进展,因为代码审计是一门很专的技术活,要学好PHP代码审计,需要掌握以下几点:
PHP编程语言的特性和基础。
Web前端编程基础。
漏洞形成原理。
代码审计思路。
不同系统、中间件之间的特性差异。


【内容简介】

本书详细介绍代码审计的设计思路以及所需要的工具和方法,不仅用大量案例介绍了实用方法,而且剖析了各种代码安全问题的成因与预防策略。对开发人员和安全技术人员都有参考价值。本书共分为三个部分,部分为代码审计前的准备,详细介绍代码审计前需要了解的PHP核心配置文件、PHP环境搭建的方法、代码审计需要的工具,以及这些工具的详细使用方法。第二部分着重介绍PHP代码审计的中漏洞挖掘思路与防范方法,包括代码审计的思路、常见漏洞的审计方法、二次漏洞的挖掘方法、代码审计过程中的一些常用技巧。第三部分主要介绍PHP安全编程规范,从攻击者的角度来告诉你应该怎么写出更安全的代码,包括参数的安全过滤、PHP中常用的加密算法、常见功能通常会出现的安全问题、企业的应用安全体系建设等。


【目录】

Contents 目  录
序言
前言
导读
部分 代码审计前的准备
第1章代码审计环境搭建2
1.1 wamp/wnmp环境搭建2
1.2 lamp/lnmp环境搭建4
1.3 PHP核心配置详解6
第2章审计辅助与漏洞验证工具14
2.1 代码编辑器14
2.1.1 Notepad 15
2.1.2 UltraEdit15
2.1.3 Zend Studio19
2.2 代码审计工具21
2.2.1 Seay源代码审计系统21
2.2.2 Fortify SCA24
2.2.3 RIPS25
2.3 漏洞验证辅助27
2.3.1 Burp Suite27
2.3.2 浏览器扩展32
2.3.3 编码转换及加解密工具36
2.3.4 正则调试工具38
2.3.5 SQL执行监控工具40
第二部分 漏洞发现与防范
第3章通用代码审计思路46
3.1 敏感函数回溯参数过程46
3.2 通读全文代码50
3.3 根据功能点定向审计64
第4章漏洞挖掘与防范(基础篇)68
4.1 SQL注入漏洞68
4.1.1 挖掘经验69
4.1.2 漏洞防范74
4.2 XSS漏洞77
4.2.1 挖掘经验77
4.2.2 漏洞防范82
4.3 CSRF漏洞83
4.3.1 挖掘经验83
4.3.2 漏洞防范85
第5章漏洞挖掘与防范(进阶篇)88
5.1 文件操作漏洞88
5.1.1 文件包含漏洞88
5.1.2 文件读取(下载)漏洞93
5.1.3 文件上传漏洞95
5.1.4 文件删除漏洞99
5.1.5 文件操作漏洞防范100
5.2 代码执行漏洞102
5.2.1 挖掘经验102
5.2.2 漏洞防范108
5.3 命令执行漏洞108
5.3.1 挖掘经验109
5.3.2 漏洞防范112
第6章漏洞挖掘与防范(深入篇)114
6.1 变量覆盖漏洞114
6.1.1 挖掘经验115
6.1.2 漏洞防范121
6.2 逻辑处理漏洞122
6.2.1 挖掘经验122
6.2.2 漏洞防范130
6.3 会话认证漏洞131
6.3.1 挖掘经验131
6.3.2 漏洞防范135
第7章二次漏洞审计136
7.1 什么是二次漏洞136
7.2 二次漏洞审计技巧137
7.3 dedecms二次注入漏洞分析137
第8章代码审计小技巧142
8.1 钻GPC等转义的空子142
8.1.1 不受GPC保护的$_SERVER变量142
8.1.2 编码转换问题143
8.2 神奇的字符串146
8.2.1 字符处理函数报错信息泄露146
8.2.2 字符串截断148
8.3 php:// 输入输出流150
8.4 PHP代码解析标签153
8.5 fuzz漏洞发现154
8.6 不严谨的正则表达式156
8.7 十余种MySQL报错注入157
8.8 Windows FindFirstFile利用161
8.9 PHP可变变量162
第三部分 PHP安全编程规范
第9章参数的安全过滤166
9.1 第三方过滤函数与类166
9.1.1 discuz SQL安全过滤类分析167
9.1.2 discuz xss标签过滤函数分析173
9.2 内置过滤函数175
第10章 使用安全的加密算法177
10.1 对称加密177
10.1.1 3DES加密178
10.1.2 AES加密180
10.2 非对称加密183
10.3 单向加密185
第11章 业务功能安全设计187
11.1 验证码187
11.1.1 验证码绕过187
11.1.2 验证码资源滥用191
11.2 用户登录192
11.2.1 撞库漏洞192
11.2.2 API登录193
11.3 用户注册194
11.4 密码找回195
11.5 资料查看与修改197
11.6 投票/积分/抽奖198
11.7 充值支付200
11.8 私信及反馈200
11.9 远程地址访问202
11.10 文件管理204
11.11 数据库管理205
11.12 命令/代码执行206
11.13 文件/数据库备份207
11.14 API208
第12章应用安全体系建设211
12.1 用户密码安全策略211
12.2 前后台用户分表213
12.3 后台地址隐藏215
12.4 密码加密存储方式216
12.5 登录限制218
12.6 API站库分离218
12.7 慎用第三方服务219
12.8 严格的权限控制220
12.9 敏感操作多因素验证221
12.10 应用自身的安全中心223
参考资源227


【编辑推荐】

返回顶部