知方号

知方号

代码审计入门实战<代码审计工具原理>

代码审计入门实战

一 审计tricks

至少对常见的漏洞要熟悉,这样才能快速定位到敏感点。

使用自动化审计工具辅助审计,快速寻找常规漏洞,并进行验证分析。

使用常见安全工具来验证漏洞,如BurpSuite、sqlmap、python程序。

状态不好,一定要暂停审计。因为没效率,而且还可能审计不出来,这样会削减你对审计的热情。

审计初期,可以找一些小型的cms来审计,因为小型cms程序结构比较简单,漏洞点可能比较多,能够给自己信心

跟进别人的审计文章,需要动手操作而不是看。在审计的过程中才能发现问题,审计经验是一点点积累出来的,审计的过程中也要注意漏洞发生的位置

二 审计流程

首先,打开 seay源代码审计系统 软件,将要审计的网站源码导入项目,然后点击自动审计。当审计完成时,我们需要根据自动审计的结果,进行逐一验证。当然,我们不需要真的每个文件都打开看过去,可以根据扫描报告中的漏洞详细信息来判断是否可能存在漏洞,如果你觉的某个地方可能存在,这时,你再打开具体文件查看。

如果你想查询某个变量或者函数在代码中的具体位置,你也可以使用全局定位搜索,该软件会快速地定位找出具体文件,这一功能大大加快了我们审计的速度。对于来自用户的数据以及后端对数据库的操作,我们要特别注意。

定位函数的话,我们甚至可以使用linux下的 grep 命令来完成,例如我想找到定义 upload() 函数的地方,可以在命令行下面切换到网站根目录,然后输入 grep -Rni “function upload(“ 快速定位, -R表示从当前位置递归往下寻找, -i 表示忽略大小写进行匹配, -n 则显示行号。下图为查找定义 PartView 类的位置:

我们还可以使用数据库监控插件,来监控程序对数据库的操作,测试并构造恶意的mysql执行语句,如下图:

以上手法,可专门用于挖掘常规漏洞,至于像逻辑漏洞、越权漏洞这一类,基本上是不可能被自动化审计工具扫描到的,因为针对这类漏洞的正则难以制定,需要人工判断程序是否存在逻辑问题。这样我们就需要先对网站的功能点熟悉一下,特别是与用户相关的地方,例如用户的身份,用户提交的表单,用户发出的请求等等。然后我们可以结合 BurpSuite 观察用户请求的参数有哪些,这里面是否有重要的参数可以被伪造。平时经常挖逻辑漏洞或者有丰富的黑盒测试经验,将有助于对这种漏洞的审计。

三 审计实例3.1 PHPCMSv9逻辑漏洞导致备份文件名可猜测

在看实例前,先看一段《代码审计–企业级Web代码安全架构》书中的引用:

目前大多数程序都会对上传的文件名加入时间戳等字符再进行MD5,然后下载文件的时候通过保存在数据库里的文件ID 读取出文件路径,一样也实现了文件下载,这样我们就无法直接得到我们上传的webshell 文件路径,但是当在Windows 下时,我们只需要知道文件所在目录,然后利用Windows 的特性就可以访问到文件,这是因为Windows 在搜索文件的时候使用到了FindFirstFile 这一个winapi 函数,该函数到一个文件夹(包括子文件夹) 去搜索指定文件。

利用方法很简单,我们只要将文件名不可知部分之后的字符用“”代替即可,不过要注意的一点是,只使用一个“”则只能代表一个字符,如果文件名是12345或者更长,这时候请求“1”都是访问不到文件的,需要“1

在/api/creatimg.php文件中,使用了file_exists()函数判断$fontfile文件是否存在,文件存在和不存在的返回信息是不同的,而且$fontfile可以被用户控制,且未过滤.和/等符号,最终导致了漏洞发生。

# /api/creatimg.php

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了