1.代码审计概念
- 代码审计,是对应用程序源代码进行系统性检查的工作。目的是为了找到并且修复应用程序在开发阶段存在的一些漏洞或者程序逻辑错误,避免程序漏洞被非法利用给企业带来不必要的风险。
- 代码审计不是简单的检查代码,审计代码的原因是确保代码能安全的做到对信息和资源进行足够的保护,所以熟悉整个应用程序的业务流程对于控制潜在的风险是非常重要的。
代码审计入门基础:html/js基础语法、PHP基础语法 ,面向对象思想,PHP小项目开发(Blog、注册登录、表单、文件上传、留言板等),Web漏洞挖掘及利用,Web安全工具基本使用(burpsuite、sqlmap等),代码审计工具(seay审计系、zendstudio+xdebug等)
代码审计两种基本方式:
(1) 通读全文源码:通读全文发作为一种最麻烦的方法也是最全面的审计方法。特别是针对大型程序,源码成千上万行。当然了解整个Web应用的业务逻辑,才能挖掘到更多更有价值的漏洞。
(2) 功能点审计:根据漏洞对应发生函数进行功能行审计,常会用到逆向溯源数据流方法进行审计。
代码审计两种基本方法:
(1)正向追踪数据流:跟踪用户输入参数 -> 来到代码逻辑 -> 最后审计代码逻辑缺陷 -> 尝试构造payload
(2) 逆向溯源数据流:字符串搜索指定操作函数 -> 跟踪函数可控参数 -> 审计代码逻辑缺陷 -> 尝试构造payload
2.代码审计环境
PHP源码部署环境:Phpstudy
集成开发环境:Zend Studio/Phpstorm
数据库管理工具:Navicat for MySQL
MySQL实时监控工具:MySQLMonitor
文本编辑工具:Sublime_Text3
代码审计辅助工具:Seay源代码审计系统、Rips
代码审计辅助安全工具:渗透版火狐、BurpSuite、Sqlmap
3.危险函数及关键字
SQL注入 select 、update、 insert into 、delete
(注:此处非函数,主要找常用的SQL语句)
本地文件包含:
- include() 向上包含,向下包含,如果包含出错继续向下执行
- include_once() 同上,只进行包含一次
- require() 向上包含,向下包含,如果包含出错不下向下执行
- require_once() 同上,只进行包含一次
命令执行: system() 、exec() 、passthru()、 shell_exec()
XSS跨站脚本攻击: print、 print_r 、echo、 printf、die 、var_dump、 var_export
文件上传漏洞: move_uploaded_file()
文件下载: fopen() readfile() file_get_contents()
任意文件删除: unlink()
反序列化漏洞: unserialize()
4.代码审计工具
- RIPS(1)RIPS 是一个用 PHP 编写的源代码分析工具,它使用了静态分析技术,能够自动化地挖掘 PHP 源代码潜在的安全漏洞。渗透测试人员可以直接容易的审阅分析结果,而不用审阅整个程序代码。由于静态源代码分析的限制,漏洞是否真正存在,仍然需要代码审阅者确认。RIPS 能够检测 XSS, SQL 注入, 文件泄露, Header Injection 漏洞等。
RIPS官网:http://rips-scanner.sourceforge.net/ 下载完之后将该压缩包解压到本地网站的根目录下,然后在浏览器 localhost/Rips(你解压的文件名字)/就可以进去了。如下图:
(2)