365health-365体育投注网站官网-365bet官网投注

​​代码审计完全手册:从静态分析到动态调试全流程,收藏这一篇就够了

​​代码审计完全手册:从静态分析到动态调试全流程,收藏这一篇就够了

源代码审计是网络安全技术工作的重要内容,是安全岗位必备技能。

渗透测试岗几乎都会问道代码审计,这篇文章就来聊一聊代码审计的思路。

这篇文章就来聊一聊什么是代码审计,什么是静态测试 ?

重点部分:代码审计工具介绍,代码审计的思路介绍。

不要觉得代码审计很容易,也不要觉得代码审计很难,重在坚持,重在分析。

文中出现的细节在后续中都会有详细解读!!!

1. 根据敏感关键字回溯参数传递过程 -->

2. 查找可控变量,正向追踪变量传递过程 -->

3. 寻找敏感功能点,通读功能点代码 -->

4. 直接通读全文代码

文章目录

一、代码审计和静态测试介绍1. 什么是代码审计2. 什么是静态测试3. 静态测试和代码审计的关系

二、代码审计对象和内容介绍1. 代码审计对象2. 代码审计内容包括

三、代码审计要熟悉的技术1. 编程语言2. 渗透技巧1. 为什么要懂渗透技巧2. 工具渗透3. 手工渗透

3. 辅助技术1. 熟悉常见协议2. 程序搭建3. URL链接构造或者URL路由4. 了解SQL语句及数据库特性5. 了解中间件及服务器特性6. 审计辅助工具

3. 漏洞挖掘1. 必备知识2. 技能提高过程

三、代码审计工具2. PHP1. Seay2. RIPS3. Fortify SCA

2. JAVA1. FindBugs IDEA2. Android Lint

3. C++Flawfinder

4. JS5. Go6. Python7. 多种语言的安全代码检查工具8. 商业代码审计工具1. 静态分析工具2. 动态分析工具

四、代码审计思路:1.PHP代码审计敏感函数1. 预定义的变量[常规外部提交的变量]2. regist_globle=on(未初始化的变量)3. 变量覆盖(未被初始化的覆盖的前定义的变量)4. 变量的传递存储(中转的变量)5. 文件包含漏洞(包含任意文件)6. 代码执行(执行任意代码)7. 命令执行(执行任意命令漏洞)8. 漏洞挖掘时SQL注入漏洞和XSS漏洞需注意的关键字1. SQL注入漏洞2. XSS漏洞关键字

2. Java代码审计----敏感函数1. 命令执行函数2. 文件上传函数3. SSRF函数4. CORS跨域漏洞CORS跨域设置5. Jsonp劫持6. 反序列化7. XSS漏洞8. session失效时间问题9. 用户退出,session未销毁问题

五、代码审计思路:2. 查找可控变量,正向追踪变量传递过程六、代码审计思路:3. 寻找敏感功能点,通读功能点代码1. 文件上传功能2. 文件管理功能3. 登录认证功能3. 找回密码功能

七、代码审计思路:4. 直接通读全文代码1. 逻辑性2. 目的性1. 函数集文件2. 配置文件

3. 安全过滤文件4. index文件

题外话

一、代码审计和静态测试介绍

1. 什么是代码审计

代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。

说白了:代码审计检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。

2. 什么是静态测试

静态测试是指不运行被测程序本身,仅通过分析或检查源程序的文法、结构、过程、接口等来检查程序的正确性,找出程序中存在的风险,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。

3. 静态测试和代码审计的关系

静态测试包括代码检查、静态结构分析、代码质量度量等。静态测试主要由人工进行,充分发挥人的逻辑思维优势,同时借助软件工具自动进行。其中代码检查包括代码走查、桌面检查、代码审查等,主要检查代码和设计的一致性、代码对标准的遵循、可读性,代码的逻辑表达的正确性、代码结构的合理性等方面。

二、代码审计对象和内容介绍

1. 代码审计对象

代码审计对象包括并不限于对Windows和Linux系统环境下的以下语言进行审核:

php,java,JavaScript、C/C++,C#,jsp,asp,net。

2. 代码审计内容包括

1. 前后台分离的运行架构

2. WEB服务的目录权限分类

3. 认证会话与应用平台的结合

4. 数据库的配置规范

5. SQL语句的编写规范

6. WEB服务的权限配置

7. 对抗爬虫引擎的处理措施

三、代码审计要熟悉的技术

1. 编程语言

1. 前端语言 html/javascript/dom 元素使用主要是为了挖掘xss漏洞 jquery 主要写一些涉及到CSRF脚本使用的或者DOM型XSS,JSON劫持等。

2. 后端语言也要熟悉,基础语法要知道。例如:

变量类型,常量,数组(python 是列表,元组,字典),对象,类的调用,引用等, MVC设计模式要清楚,因为大部分目标程序都是基于MVC写的,包括不限于php,python,java。

3. 不用会写,但是一定能看懂,而且要看懂逻辑,知道哪些功能点会用什么方式去写,可能会出现什么类型漏洞,方便挖掘常规类型漏洞,更方便挖掘逻辑漏洞。

2. 渗透技巧

1. 为什么要懂渗透技巧

1. 在于你找到漏洞的时候,通常的开发功底是不足以构造 payload 的,需要一些特殊的 payload 构造方式。

2. 你在找漏洞时,可以辅助你更快的去挖掘漏洞。

2. 工具渗透

例如 sqlmap,awvs,burpsuite 等,能用工具挖掘到,就没必要人工审计了,你要做的只是辅助调试。

3. 手工渗透

手工渗透的情况下,如果有源代码,那我们就可以去配合一些代码审计,以便于漏洞的挖掘。

3. 辅助技术

1. 熟悉常见协议

例如:HTTP,HTTPS,TCP,dict://,file://等等

懂得 Header 头如何伪造,比如:

XFF注入时的x-forward-for,cookie注入,CRLF身份请求伪造等。

2. 程序搭建

代码审计的时候要学会程序搭建,不然静态审计时,无法进行动态调试。

方便你更快更高效挖掘漏洞。

3. URL链接构造或者URL路由

后续详解

4. 了解SQL语句及数据库特性

这个主要涉及到SQL注入及sql注入的payload构造绕过。

5. 了解中间件及服务器特性

有的代码漏洞 是基于中间件及服务器特性造成的。例如:

IIS6.0的解析漏洞,nginx的解析漏洞等。

6. 审计辅助工具

(后面有详解)

1. IDE,phpstrom 审计工具追踪代码时用到,可与xdebug绑定使用方便调试。

2. 源代码审计工具 rips,seay审计工具,辅助你更快的找到漏洞产生点。

3. 漏洞挖掘

1. 必备知识

1. 懂得漏洞类型产生原理

2. 懂得危险函数的参数不当使用可造成的漏洞威胁。例如:

涉及到命令执行代码执行的eval,assert,array\_map,usort等

本身函数的脆弱性,is\_numeric,md5等。

3. 晓得php函数的脆弱性。例如:

==与===

===并不是强大无比不可绕过的,也要结合代码设计逻辑。 4. php的淫技技巧。

5. php版本及配置不当结合函数不当利用造成的漏洞威胁。

2. 技能提高过程

1. demo案例练习 -->

2. 已出漏洞代码审计案例分析 -->

3. 小型cms单一漏洞实例练习 -->

4. 小型cms漏洞多种类型漏洞实例挖掘练习 -->

5. 框架漏洞挖掘实例练习 -->

6. 技巧挖掘

三、代码审计工具

想做好代码审计,好的代码审计辅助工具是必不可少的,可让代码审计事半功倍。

下面介绍一些代码审计辅助工具。(后续详细介绍工具的使用)

2. PHP

1. Seay

1. 一键自动化白盒审计,当发现可以漏洞后,会在下方列表框显示漏洞信息。

2. 代码调试,方便审计过程中测试代码。

3. 正则编码,支持MD5、UR1、Base64、Hex、ASCII、Unicode等多种编码解码转换功能。

4. 自定义插件及规则

2. RIPS

1. 能够检测XSS、SQL注入、文件泄露、本地/远程文件包含、远程命令执行以及更多种类型的漏洞。

2. 有5种级别选项用于显示以及辅助调试扫描结果。

3. 标记存在漏洞的代码行。

4. 对变量高亮显示。

5. 在用户定义函数上悬停光标可以显示函数调用。

6. 在函数定义和调用之间灵活跳转。

7. 详细列出所有用户定义函数(包括定义和调用)、所有程序入口点(用户输入)和所有扫描过文件(包括include的文件)。

8. 以可视化的图表展示源代码文件、包含文件、函数及其调用。

9. 仅用几个鼠标点击就可以使用CURL创建针对检测到漏洞的EXP实例。

10. 详细列出每个漏洞的描述、举例、PoC、补丁和安全函数。

11. 7种不同的语法高亮显示模式。

12. 使用自顶向下或者自底向上的方式追溯显示扫描结果。

13. 一个支持PHP的本地服务器和浏览器即可满足使用需求。

14. 正则搜索功能。

3. Fortify SCA

分析过程中与它特有的软件安全漏洞规则进行全面的匹配、搜索,在最终的漏洞结果中,包括详细的漏洞心理,以及漏洞相关的安全知识说明

2. JAVA

1. FindBugs IDEA

能发现规范和bug的,只能静态分析

2. Android Lint

它会给出所有在这个项目中不规范的编码、多余的资源、可能的bug、或者其它的一些问题,然后会给出修改的建议供我们参考。

3. C++

Flawfinder

Flawfinder是一个C/C代码的开源安全审查工具,采用内建语法缺陷数据库,能够标记类似缓冲溢出、格式字符串、竞争条件、随机数获取方面的问题。Flawfinder是一个非常简单的工具,采用的算法也不复杂,可以看做是一个基于词典的源代码静态分析器。

4. JS

eslint、NodeJsScan

5. Go

goint、go tool vet、gas

6. Python

pylint、bandit、py-find-injection、pyt

7. 多种语言的安全代码检查工具

sonar

8. 商业代码审计工具

1. 静态分析工具

RISP,VCG,Fortify SCA

2. 动态分析工具

​360的sky wolf,鸟哥的taint

四、代码审计思路:1.PHP代码审计敏感函数

根据敏感关键字回溯参数传递过程

根据敏感函数来你想追踪参数的传递过程,是目前使用的最多的一种方式,因为大多数漏洞是由于函数的使用不当造成的。

优点:只需要搜索相应的敏感关键字,即可快速地挖掘想要的漏洞,可定向挖掘、高效、高质量。

缺点:由于没有通读代码,对程序的整体,对程序的整体框架了解不够深入,在挖掘漏洞时定位需要花费一定时间、无法挖掘逻辑漏洞

1. 预定义的变量[常规外部提交的变量]

除$_GET $_POST $_COOKIE的提交外,还来源于 $_SERVER $_ENV $_SESSION等

2. regist_globle=on(未初始化的变量)

当on的时候,传递的值会被直接注册为全局变量直接使用。而off时,我们需要到特定的数组 得到他,php>4.2.0 default 关闭。

3. 变量覆盖(未被初始化的覆盖的前定义的变量)

如 $$ 使用不当,遍历初始化变量,extract() ,parse_str() 等

4. 变量的传递存储(中转的变量)

存储于数据库,文件,(如配置,缓存文件等)

5. 文件包含漏洞(包含任意文件)

require,include,require_once,include_once

6. 代码执行(执行任意代码)

eval() 字符串当作代码来执行

assert() 调试函数,检查第一个断言是否为FALSE。(把传入的字符串作为php代码执行)

preg_replace()(preg_replace(/“xxxx”/e)) 执行正则表达式,实现搜索和替换功能。

/e修正符使preg_replace()将其中的replacement参数当作PHP代码

create_function() 创建一个匿名函数,并返回都独一无二的函数名。

7. 命令执行(执行任意命令漏洞)

exec() 执行一个外部程序

passthru() 执行外部程序并显示原始输出

proc_open() 执行一个命令,并且打开用来输入/输出的文件指针

shell_exec() 通过shell环境执行命令,并且将完整的输出以字符串的方式返回

system() 执行外部程序,并且显示输出

popen() 通过popen()的参数传递一条命令,并且对popen()所打开的文件进行执行

8. 漏洞挖掘时SQL注入漏洞和XSS漏洞需注意的关键字

1. SQL注入漏洞

1. 出现位置

登录界面、获取HTTP开头(user-agent/client-ip)、订单处理等

2. 普通注入​关键字

select from、mysql_connect、mysql_query、mysql_fetch_row、update、insert、delete

3. 宽字节注入出现位置

文章发表、评论回复、留言、资料设置等

4. 宽字节注入关键字

SET NAMES、character_set_client=gbk、mysql_set_charset('gbk’)

5. 二次urldecode注入关键字

urldecode、rawurldecode

2. XSS漏洞关键字

print、print_r、echo、printf、sprintf、die、var_dump、var_export等。

2. Java代码审计----敏感函数

1. 命令执行函数

GroovyShell.evaluate()、Runtime.getRuntime()、.exec()、ProcessBuilder()、.start()等。

2. 文件上传函数

ServletFileUpload()、FileItemStream()、MultipartFile()等。

3. SSRF函数

在Java中分为两类:

一类只支持http,https协议,如HttpURLConnection、HttpClient、Request、okhttp。

一类支持所有协议如URLConnection、URL。

HttpURLConnection.getInputStream()

URLConnection.getInputStream()

Request.Get.execute()

Request.Post.execute()

URL.openStream()

ImageIO.read()

OkHttpClient.newCall.execute()

HttpClents.execute()

HttpClent.execute()

4. CORS跨域漏洞CORS跨域设置

response.setHeader(“Access-Control-Allow-Origin”,“*”);

response.setHeader(“Access-Control-Allow-Credentials”,“true”);

5. Jsonp劫持

jsonp跨域设置

response.setHeader(“Access-Control-Allow-Origin”,“*”);

callback

6. 反序列化

readObject

7. XSS漏洞

当out.print(“”);可控的时候,就会导致XSS漏洞。

Requests

Response

Session

8. session失效时间问题

session.setMaxInactiveInterval();

9. 用户退出,session未销毁问题

session.invalidate(); //销毁所有的Web应用

sessionsession.removeAttribute(); //移除指定的Web应用

sessionapplication

pageContent

五、代码审计思路:2. 查找可控变量,正向追踪变量传递过程

查找可控变量,正向追踪变量传递的过程,查找可能存在安全漏洞的变量,从变量处发现安全问题。

常见的可操控变量:name、id、password、pwd、select、search等。

六、代码审计思路:3. 寻找敏感功能点,通读功能点代码

通读功能点的代码,尤其关注于易出现漏洞的功能点

如:文件上传、留言板、登录认证功能、找回密码等通过从敏感功能点入手来查找安全问题。

1. 文件上传功能

若后端程序没有严格地限制上传文件的格式,导致可以直接上传或者存在绕过的情况,除了文件上传漏洞。

​还有可能发生sql注入漏洞。因为程序员一般不会注意到对文件名进行过滤,但有需要把文件名存入到数据库内。

2. 文件管理功能

如果程序将文件名把或者文件路径直接在参数中传递,则很有可能存在任意文件操作的漏洞。

还有可能发生xss漏洞,。程序会在页面中国输出文件名,而通常会疏忽对文件名的过滤,导致可能在数据库中存入带有尖括号等特殊 符号的文件名,最后显示在页面上的时候就会被执行。

3. 登录认证功能

登陆功能不是指一个登录过程,而是整个操作过程中的认证。

目前的认证方式大多是基于Cookie和Session。

如果Cookie信息没有加salt一类的东西,就有可能导致任意用户登录漏洞,只要知道用户的部分信息,即可生成认证令牌

3. 找回密码功能

找回密码虽然无法危害到服务器安全,但是可以重置管理员密码,也可以间接控制业务权限甚至拿到服务器权限。

七、代码审计思路:4. 直接通读全文代码

通读全文代码并不是逐个读完文件就可以了,而是要有逻辑性、有目的性地选择文件进行审计。

1. 逻辑性

​通读全文代码首先要有一定的"开发者思维",将自己想象为此软件的开发者,如果是我来设计这款软件我要实现什么功能,利用什函数结构,调用哪些接口,根据软件的功能性来分析每一个文件的作用,可以尝试画一个树状图来辅助自己理解软件的设计逻辑。

2. 目的性

特别关注函数集文件、配置文件、安全过滤文件、index文件等重要文件。

1. 函数集文件

常见命名:fuctions、common

​这些文件里面是一些公共的函数,提供给其他文件统一调用,所以大多数文件都会在文件头部包含到其他文件。

​寻找这些文件一个比较好用的技巧是打开index.php或者一些功能性文件,在头部一般都能找到

2. 配置文件

常见命名:coming

配置文件包括web程序运行必须的功能性配置选项以及数据库等配置信息。

从这个文件可以了解程序的小部分功能,另外看这个文件的时候注意观察配置文件中参数值是用单引号还是用双引号括起来,如果用双引号,则很可能会存在代码执行漏洞。

3. 安全过滤文件

常见命名:filter、safe、check

这类文件主要是对参数进行过滤,比较常见的是针对SQL注入和XSS过滤,还有文件路径、执行的系统命令的参数,其他则相对少见。

4. index文件

常见命名:index

index是一个程序的入口文件,所以通常我们只要读一遍index文件就可以大致了解整个程序的架构、运行的流程、包含到的文件,其中核心的文件又有哪些。

题外话

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程 网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我们和网安大厂360共同研发的网安视频教程,之前都是内部资源,专业方面绝对可以秒杀国内99%的机构和个人教学!全网独一份,你不可能在网上找到这么专业的教程。

内容涵盖了入门必备的操作系统、计算机网络和编程语言等初级知识,而且包含了中级的各种渗透技术,并且还有后期的CTF对抗、区块链安全等高阶技术。总共200多节视频,200多G的资源,不用担心学不全。 因篇幅有限,仅展示部分资料,需要见下图即可前往获取 🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

3.技术文档和电子书 技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要见下图即可前往获取 🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

4.工具包、面试题和源码 “工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话见下图即可前往获取 🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要见下图即可前往获取 🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源

相关推荐