lionhoo 嘶吼专业版
大家好,今天给大家带来的是代码审计入门级文章!毕竟很多代码审计的文章没有一个基础是看不懂的,所以这篇文章算是为一些想学习代码审计而又看不懂代码审计类技术文章的朋友而准备的!
代码审计概述
顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。
PHP漏洞简述
一般我们进行审计的时候有两个点,可控的变量,还有函数!要学代码审计那么首先要知道漏洞的原理,那么常见的比如SQL注入,命令执行,XSS等漏洞的原理要知道!
举个例子:SQL注入&命令执行
众所周知,SQL注入是因为***者可以构造sql语句提交给程序,但提交的语句未检验,结果就会造成sql注入***!在PHP中可以调用外部程序的常见函数:system、exec、shell_exec、passthru、popen、proc_popen应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,又没有过滤用户的输入的情况下,就会造成命令执行漏洞。
我们来看一下代码:
这是一个存在sql注入漏洞的代码,可以看出来因为执行的SQL语句。
可以进行拼接,造成***者执行任意的sql语句。
我们对照一下命令执行。
这是一个存在命令执行的php漏洞代码,其中在执行函数shell_exec中也可以进行拼接从而造成***者执行任意的命令!
那么我们对照一下这两段:
可以看出来漏洞的出现位置和漏洞的利用方式,为什么要对照这两段代码,因为我们前文说了审计的时候有两个点,可控的变量,还有函数,可控的id参数和造成漏洞的函数shell_exec,如果把sql语句换成执行命令的语句呢?这样就不难理解为什么审计这两个点了吧!
所以既然要学审计那么漏洞原理是要搞明白的,这里我就不再写漏洞原理了!(推荐php漏洞原理的文章: https://zhuanlan.zhihu.com/p/47818756)
代码审计工具
俗话说“工欲善其事,必先利其器!”通过概述可以知道有两种方式,其一就是自动化工具,那么介绍几款常见的代码审计工具,当然不止有这几个,GitHub上还有好多,就不一一列举了!
No1 Seay源代码审计工具
Seay源代码审计工具一款php代码审计工具,主要是运用于windows,这款工具可以发现常见的php漏洞,另外还支持一键审计、代码调试、函数定位、插件扩展、数据库执行监控等功能!
安装很简单直接按照提示安装就好!
使用方式:
新建项目然后找到要审计的代码文档就可以!
然后自动审计。
当然不要完全相信工具,它只能帮我们去减少庞大的工作量,剩下的漏洞我们还要自己去验证一下才行!
双击之后会跳转到漏洞地址及看到漏洞代码。
No2 rips源代码审计系统
Rips源代码审计系统是可以用于linux和windows上的一款源代码审计系统!使用方式很简单,直接将rips源码放在web应用的根目录下就可以了。
使用方式:
首先对源代码进行扫描检测既在:
Path/file中输入扫描的代码路径,然后点击扫描。
扫描完成后:
user input 可以查看到用户可控制的参数。
然后点击可进行审计。
步骤:传递参数à执行语句à浏览整体。
扫描出来的漏洞会给出漏洞地址及漏洞代码!
如何做自己的代码审计工具
通过对这两款的代码审计工具分析我们可以知道:
代码审计工具步骤:
· 第一步:创建项目
· 第二步:扫描文件代码
· 第三步:输出结果
步骤思路:
· 第一步:寻找文件
· 第二步: 通过正则及其他方法寻找可控的变量,还有函数进行分析(需了解漏洞原理)
· 第三步:输出结果
那么可以用这个思路去试试做一个自己的自动化代码审计工具!
操作实例
为了更好的去做说明解释,我使用dvwa来做例子就不在网上找cms了!
我们搭建一个测试环境,我用的phpstudy。
然后我们用seay代码审计工具进行分析。
输出好多结果我们随便找一个进行验证:
有文件路径找到文件。
然后查看代码:
进行分析验证:
然后验证一下漏洞存在!
一般的话都会使用phpinfo来验证!
总结
代码审计中漏洞的原理是重中之重,另外理解代码审计工具的原理最后要记住重要的两个审计的点:可控的变量,还有函数!
希望这篇文章对想学入门代码审计的朋友有所帮助!