代码审计基础
今天分享一下我学习代码审计的一点经验,希望跟大家共同进步。
我们今天的主角是世界上最好的语言,
没错,就是PHP
PHP由于使用广泛,入门简单,主要适用于Web开发领域。
一般情况下,测试时黑盒的情况比较多。有时我们获取到源码后,如果有代码审计基础就可以进行比较全面的测试,使渗透效率更高。
PHP静态代码审计分几个阶段,
2007-2009正则表达式
2009-2012借助词法分析,主要处理面向过程的代码部分
2012-2016借助语法分析,抽象语法树AST,代码段,可以分析面向对象代码
基本概念:危险函数,用户输入
这里的漏洞定义可以这样来理解:用户输入经过各种操作,最终进入到危险函数,以危险的方式成功执行。
这里的用户输入是指GPCSF、数据库、文件等可能输入的点,危险函数如include,system等,当用户输入进到函数里面,并且要是以危险的方式执行,比如转义了,或者过滤了,这样就不能成功了。
大家了解到这个基本的概念之后,对后面的案例就会比较清晰。
然后我来给大家说一下学习方法:
简单来说就是多分析,多思考。在这里不得不提一套比较好的学习漏洞原理的教程——dvwa。对于初学者,可以以dvwa为案例,分析漏洞原理。掌握漏洞原理之后,对渗透测试的理解也会更深刻。
字符串函数怎么获取它是类型比较多,左边列出的类型基本是常用类型。
今天主要是讲人工审计,知道原理之后,大家可以借助工具进行分析。
如果大家还记得前面的漏洞的定义的话,就可以知道,这里是有2条路可以走的。
可以正向,可以逆向。
正着走,就是跟踪用户可控的输入,比如看到一个GET参数,跟踪这个参数最终是到哪一步了,是否进入到危险函数中,以危险的方式执行了。
那么逆着走呢?先到危险函数,逆着看进入到这个函数的参数是否可控,一路到来源,最终判断输入点。
中间分析的时候,需要留意一些过滤处理。
不同的人分析方式不一样,我比较喜欢大致浏览一下程序的架构,是否使用框架,MVC,是否有通用过滤等,这些都是需要考虑的。要不然,当你满心欢喜地发现,一个GET参数,没有经过过滤函数,直接进入到mysql_query函数,为什么就没有注入呢。
你看了一遍又一遍,甚至开始怀疑人生。
分析过的人就知道。
闲话少说,言归正传。让我们先看一看原理。
拿到一份源码应该如何开始审计呢?新手刚拿到一份源码一定很头疼,不知道该如何下手。首先你应该弄懂这套源码的结构,了解系统的源码怎么分布的,到其中的关键文件代码。
往往一些库文件都会放到include这个文件夹里。
下面这些文件一定要特别注意的:
函数集文件:命名中包含functions,common等关键字。
配置文件:命名中包含config关键字
安全过滤文件:filter,safe,check
index文件:程序的入口文件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论