目录
一、代码审计简介
二、源代码泄露
1.常见的备份文件
(1)文本备份文件
(2)整站源代码备份文件
2.Git泄露
(1)通过特征搜索
(2).git泄露
3.svn泄露
4.利用漏洞泄露
三、代码审计的方法与技巧
1.小型代码
2.大型代码
3.审计工具
代码审计就是检查源代码汇总的安全缺陷,检查程序源代码是否存在安全隐患和代码不规范的地方。可以通过自动化检测或者人工审查的方式进行。
源代码泄露是代码审计的内容之一。
备份文件是由于运维人员的疏忽,忘记删除而留在服务器中的文件,这个时候,攻击者就能通过穷举常见的备份文件名来得到关键代码,从而进行源代码审计。为了能够找到这些备份文件,我们可以使用敏感文件扫描工具来进行探测。常见的备份文件如下:
一般运维人员会在Linux系统下使用vim或者gedit等文本编辑器,当编辑器崩溃或者因为异常时会自动备份当前文件,有时候程序开发者在编写代码的时候,也可能会将实现某功能后的代码备份再继续后续开发工作。下面一index.php为例列出一些可能的备份文件
有些网站会把整站源代码打包,放在网站的根目录之下,这时候只要找到这个包,就能进行源代码审计,常见的整站备份文件名如下:
有时候还能利用其他可能会泄露目录结构或文件名的铭感文件来获取备份文件的位置,如:.DS_Store等。
Github是一款很好的软件,上面有各种开源工具,自己开发的项目等等,是一个获取源代码的途径。
当某个网站存在明显特征字符串时,可以通过GitHub的搜索功能来搜索这个项目。
每个git项目的根目录下都存在一个.git文件夹,这个文件夹的作用就是存储项目的相关信息。
svn泄露与git泄露类似,同样是项目初始化时会生成一个“.svn”目录,所以也可以用工具来解决,这里推荐使用svn-extractor,内容与git差不多。
如果能发现任意文件包含漏洞或者任意文件存在下载漏洞,就有可能下载到源代码进行审计。
任意文件包含和下载的漏洞的表现形式包含但不限于一下几种:
http://www.csd.com/download.php?file=abc.pdf
http://www.csd.com/show_image.php?file=1.jpg
http://www.csd.com/read.aspx?file=./upload/1.txt
将file参数修改为../index.php这种形式,就可以利用漏洞下载源代码。
小型代码的代码量一般都不算大,还是比较容易找到漏洞,通常可以利用下面几个方法来找到。
找到各个输入点。
找到针对输入的过滤并尝试绕过。
找到处理输入的函数并查看有无漏洞。
找到漏洞后进行最充分的利用。
一般来说,大型代码主要是对CMS型的框架进行审计,主要难点还是在大量的代码中定位这些漏洞,一般由一下几个方法。
找到危险函数。
向上回溯寻找有无可利用输入点。
尝试绕过针对输入点的过滤。
寻找触发漏洞的方法
这里利用phpok之前存在的一个注入例子,首选寻找危险函数,可以找到一个通用的插入数据库的函数,代码如下:
然后,查找是否有调用次函数并且有输入点的地方,在framework/mode/weaith/wealth.php中发现wealth_autosave满足条件,其中存在$_SERVER['QUERY_STRING']可以让我们输入。$_SERVER['QUERY_STRING']是直接取出来的,没有经过过滤,代码如下:
最后看看如何触发这个漏洞就可以了,发现在framework/api/register_control.php中存在调用,代码如下:
目前还没有比较完美的自动化代码审计工具,代码审计工具仍然需要人工处理,目前比较流行的代码审计工具是“RIPS”和“Seay远源码审计系统”。
除了上面这些工具,还可以借助安全狗,D盾,护卫神等webshell的工具来扫描代码。