【网络安全安全管理入门必知必会】代码审计之思路详解,零基础入门到精通,收藏这一篇就够了

370 篇文章 2 订阅
370 篇文章 3 订阅

前言

这是大白给粉丝盆友们整理的代码审计阶段第2篇。

喜欢的朋友们,记得给大白点赞支持和收藏一下,关注我,学习黑客技术。

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

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

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

要点就是:

1. 根据敏感关键字回溯参数传递过程  -->  
2. 查找可控变量,正向追踪变量传递过程  -->  
3. 寻找敏感功能点,通读功能点代码  -->  
4. 直接通读全文代码  

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

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. 技巧挖掘  

四、代码审计工具

1. 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)indBugs IDEA

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

(2)Android Lint

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

3. C++

(1)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. 根据敏感关键字回溯参数传递过程

根据敏感函数来你想追踪参数的传递过程,是目前使用的最多的一种方式,因为大多数漏洞  
是由于函数的使用不当造成的。  
  
优点:只需要搜索相应的敏感关键字,即可快速地挖掘想要的漏洞,可定向挖掘、高效、高  
质量。  
  
缺点:由于没有通读代码,对程序的整体,对程序的整体框架了解不够深入,在挖掘漏洞时  
定位需要花费一定时间、无法挖掘逻辑漏  
  

2. 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注入漏洞
a. 出现位置

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

b. 普通注入关键字

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

c. 宽字节注入出现位置

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

d. 宽字节注入关键字

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

e. 二次urldecode注入关键字

urldecode、rawurldecode

f. XSS漏洞关键字
print、print_r、echo、printf、sprintf、die、var_dump、var_export等。

3. 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  

六、代码审计思路:

(1)查找可控变量,正向追踪变量传递过程

查找可控变量,正向追踪变量传递的过程,查找可能存在安全漏洞的变量,从变量处发现安全问题。  
  
常见的可操控变量:name、id、password、pwd、select、search等。  

(2)寻找敏感功能点,通读功能点代码

尤其关注于易出现漏洞的功能点  
  
如:文件上传、留言板、登录认证功能、找回密码等通过从敏感功能点入手来查找安全问题。  

(3) 登录认证功能

登陆功能不是指一个登录过程,而是整个操作过程中的认证。  
  
目前的认证方式大多是基于Cookie和Session。  
  
如果Cookie信息没有加salt一类的东西,就有可能导致任意用户登录漏洞,只要知道用户的  
部分信息,即可生成认证令牌  

(4) 找回密码功能

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

(5)直接通读全文代码

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

2)目的性:特别关注函数集文件、配置文件、安全过滤文件、index文件等重要文件。

3)函数集文件:

常见命名:fuctions、common  
  
这些文件里面是一些公共的函数,提供给其他文件统一调用,所以大多数文件都会在  
文件头部包含到其他文件。  
  
寻找这些文件一个比较好用的技巧是打开index.php或者一些功能性文件,在头部一般  
都能找到  

4) 配置文件

常见命名:coming  
  
配置文件包括web程序运行必须的功能性配置选项以及数据库等配置信息。  
  
从这个文件可以了解程序的小部分功能,另外看这个文件的时候注意观察配  
置文件中参数值是用单引号还是用双引号括起来,如果用双引号,则很可能会存在代码执行漏洞。  

3)安全过滤文件

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

4) index文件

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

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]


在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
在这里插入图片描述

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值