人工代码审计主要用在白盒测试,其实个人感觉就是更加深入的渗透测试,普通渗透测试感觉更倾向于黑盒,今天就是大概了解一下,这一门学问深入学得要很深的开发功底,这里就是作为渗透测试的辅助手段学一学吧,先有个认识,相关资料有点多,先跳过一下,不想投入大量时间。
代码安全测试简介代码安全测试是从安全的角度对代码进行的安全测试评估。结合丰富的安全知识、编程经验、测试技术,利用静态分析和人工审核的方法寻找代码在架构和编码上的安全缺陷,在代码形成软件产品前将业务软件的安全风险降到最低。
一般是在安全环境下(对方公司的断网环境中),借用工具进行测试 例如 xsearch seay php
代码安全测试方法代码审核采用人工审核和静态分析工具辅助的方式进行。
人工审核既能解决内部问题也能解决外部问题。这也是目前最有效率的解决方案,并且在理论上手工代码审核是非常有效的,但人工审核的效率不高,所以我们会采用自动化分析工具辅助人工的方式来提高审核效率。
静态分析工具:通过一组全面规则、测试机制和方针在软件开发过程、测试中发现软件的安全缺陷。
代码审计的通用思路1、通读全文代码,从功能函数代码开始阅读,例如include文件夹下的common_fun.php,或者有类似关键字的文件。 2、看配置文件,带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。 3、继续跟读首页文件index.php,了解程序运作时调用了哪些函数和文件 以index.php文件作为标线,一层一层去扩展阅读所包含的文件,了解其功能,之后进入其功能文件夹的首页文件,进行扩展阅读。
漏洞产生的原因1、变量控制不严(一切输入都是有害) 2、变量到达有利用价值的函数(一切进入函数的变量是有害的),漏洞的利用效果取决于最终函数的功能。
可能出现漏洞的关键字在很多面试选择题中看到了!!!! sql注入关键字: select、insert、update、$_GET $_POST、$_REQUEST 上传漏洞关键字: $_FILES 、move_uploaded_file 执行漏洞关键字: shell_exec、exec、passthru system、popen 包含漏洞关键字: include、include_once、require、require_once 变量覆盖关键字: $$ 跨站漏洞关键字: echo、print、print_r、var_dump、var_exprot,insert
漏洞挖掘一般流程举例例如sql注入,在浏览器中找出可能有漏洞的参数,再到源代码中看过滤条件,再到sqlmap验证
可参考以下源码审计学习: http://www.anquan.us/static/drops/tips-12751.html 注入漏洞防范地址页面:http://www.jb51.net/article/26069.htm http://www.phpddt.com/php/228.html