代码安全测试是从安全的角度对代码进行安全测试评估
人工审核和静态分析工具辅助进行
人工审核:既能解决内部问题也能解决外部问题。是目前最有效率的解决方案,并且在理论上手工代码审核是非常有效的,但人工审核的效率不高,所以我们会采用自动化分析工具辅助人工的方式来提高审核的效率。
静态分析工具:通过一组安全规则,测试机制和方针在软件开发过程
1、通读全文代码,从功能函数代码开始阅读
2、看配置文件,带有config关键字的文件,找到mysql.class.php文件的connect()函数,查看在数据库连接时是否出现漏洞。
3、继续跟读首页文件index.php,了解程序运作时调用了哪些函数和文件 以index.php文件作为标线,一层一层去扩展阅读所包含的文件,了解其功能,之后进入其功能文件夹的首页文件,进行扩展阅读。
打开源代码的首页文件,根据首页文件调用的功能,一层层的看调用的功能和用到的函数,查看是否有漏洞
1、变量控制不严(一切输入都是有害)
2、变量到达有利用价值的函数(一切进入函数的变量是有害的),漏洞的利用效果取决于最终函数的功能。
- sql注入关键字
select、insert、update、$_GET $_POST、$_REQUEST
宽字节注入
搜索gbk
mysql_real_escape_string()或者搜索这个函数
使用pdo方式,在PHP5.3.6及以下版本需要设置setAttribute(PDO::ATTR_EMULATE_PREPARES,false);来禁用prepared statements的仿真效果。
二次注入
搜索urldecode()函数
搜索rawurldecode()函数
- 变量覆盖关键字
$$
- xss漏洞跨站脚本解析
print、print_r、echo、printf、sprintf、die、var_dump、var_export
- csrf跨站请求伪造
没有token 和referee 一般存在csrf
- 文件包含
include()、include_once()、require()和require_once()
PHP低于5.3要考虑%00截断的问题
- 任意文件下载
file_get_contents()、highlight_file()、fopen()、readfile()、fread()、fgetss()、fgets()、parse_ini_file()、show_source()、file()
- 任意文件上传漏洞关键字
$_FILES 、move_uploaded_file
- 代码执行
eval()、assert()、preg_replace()、call_user_func()、call_user_func_array()、array_map()
- 命令执行
system()、exec()、shell_exec()、passthru()、pcntl_exec()、popen()、proc_open()
- 越权
level、session
- 手工挖洞使用软件x-search
- 使用工具
将文件导入进去,开始扫描,扫出来高危中危低危在验证一下,audit workbeach显示漏洞在几行,有描述和修复方案
- 手工
简单阅读代码首页文件,和功能页面,一层层看调用的函数和文件内容
利用xsearch搜索函数和语句
找到后前后看看有没有漏洞,能不能漏洞复现,打开对应页面对应参数,构造payload验证