网站代码漏洞审计的一些经验分享


安全业界内有句老话,所有的用户输入都是有害的,我们所有的网站安全测试都是基于这个原理来展开详细的渗透测试。既然所有的用户输入都是有害的,如何让这种危害出现,这就引入了安全的另一句话。当有害数据进入危险函数时,就会出现漏洞。所以我们可以总结出安全的两个基本点:数据和功能,我们所有的安全相关工作都是基于这两点。代码审计也不例外。根据这两点,代码审计有两种基本的审计方法。

它们是:


1.跟踪用户的输入数据,判断数据输入的每个代码逻辑中是否有可用的点,其中代码逻辑可以是一个函数,也可以是一个小的条件判断语句。2.根据不同代码的特点和一些经常产生漏洞的一些函数和功能,找出这些点,在调用函数时分析参数。如果参数是用户可以控制的,很有可能造成安全漏洞。这两种方法各有各的优点和缺点。使用第一种方法,可以最大限度地发现程序的安全漏洞。然而,跟踪数据的趋势是一项巨大的工作量。如果你想跟着一套程序走,这个方法很优秀,因为在跟踪变量的时候,是一个了解程序的过程。我们跟着越多,越走程序流程,对程序理解越深,越有可能挖掘出精彩的东西。第二种方法的好处是可以尽快发现安全漏洞。但是由于我们没有跟踪所有的用户参数,必然会有一些遗漏,不可能发现程序的所有漏洞。同时,追溯参数,寻找函数的调用点,在某些情况下也是一件令人头疼的事情,但与第一种方法相比,我们的工作量还是少了很多。综上所述,我们要快速发现漏洞,需要灵活运用两种方法。如何变通,靠经验。最后是上手后的体力劳动。


审计推荐工具:SINESAFE,一个非常容易使用的编辑器匹配规则,搜索简单的跟踪变量。各种相应编程语言的ide用于调试程序和跟踪变量。(我写程序的时候喜欢用Notpad++)在真正找漏洞之前。现在的cms大致可以分为两种,单入口模式和多入口模式。所谓的多入口模式cms是往年非常常见的编程模式。它的形式是我们在使用程序的每一个功能时需要访问不同的文件。例如,如果我想使用注册功能,我需要访问regest.php文件,如果我想使用评论功能,我需要访问comment.php。在aspcms中,在php中是非常少见的。单入口cms出了一个开发模式,叫做MVC。这里简单提一下这个模式。所谓的MVC编程架构将程序分为三个层次,分别实现三个功能,数据以什么形式显示给用户,程序的具体实现逻辑,数据处理。然而,我们的审计应该集中在数据处理层。因为我们之前说过,来自用户的有害输入和适当的函数形成漏洞,而数据处理层恰好是处理我们输入数据的一个层,因为这种编程模式有很多优点,现在大量的程序都采用这种编程模式,所以如果要审计这样的程序,也必须熟悉这种开发模式。至于如何熟悉,请自行百度。


单入口模式程序的特点是我们只需要访问一两个文件(普通用户一个入口文件,管理员一个入口文件)就可以使用程序的每个功能,我们只需要给入口文件提供特定的参数就可以调用其他文件中的特定功能实现代码。这个cms有很多案例,比如wordpress,phpcms...在审核代码时,多入口模式的程序审核相对简单,因为我们可以在发现漏洞后快速找到进入易受攻击代码的途径,而对于单入口模式的程序,在正式审核之前,我们需要了解程序的各个文件之间的调用规则,这当然是一件比较简单的事情。一般来说,我们基本上可以从入口文件和程序的执行流程中一次梳理出程序流程。事实上,经过一些经验,我们可以从参数的值来猜测程序的执行流程。在明确了程序的文件之间的调用关系之后,我们需要做的就是看一下程序的一些配置文件和全局函数文件,其中很可能包含了一定的过滤功能。如果我们能更早地发现程序参数的处理过程,我们就可以发现一些不能及时使用的漏洞,这有助于减少我们的工作量。完成这些任务后,我们开始搜索特定的漏洞。如前所述,当我们搜索漏洞时,我们有两种方法。首先,我们通过搜索一些获取用户输入数据的函数来找到用户输入数据的来源,然后我们从这里开始。跟踪数据流,分析数据在整个过程中的处理情况,进而定位可能触发漏洞的点;第二种方式,我们搜索一些经常引起安全问题的函数,比如执行数据库查询的函数、执行系统命令的函数、文件操作函数等等。通过在调用这些函数时追溯其参数,可以判断参数是否可控,进而定位漏洞。

粘贴我平时的规律:PHP.变量cookies以及变量get和post供用户输入。Eval\(|assert\(|system\(命令执行。反序列化漏洞。ASP,因为程序的流程比较简单,代码量比较少,所以我一般选择直接跟变量,搜索Request关键字就可以找到所有的数据输入点。NET很少做,这类程序往往需要反编译才能继续审计。所以对于这类节目我没有什么好的方法,只是一个一个来看。如果我的朋友们有一些好的方法,请随时给我们一些建议和感谢。


分享: