自我介绍范文网

当前位置:自我介绍范文网 > 毕业论文 > 会计审计 > 审计 > >

一名代码审计新手的实战经历与感悟

来源::网络整理 | 作者:管理员 | 本文已影响

个人认为,作为一个要入门代码审计的人,审计流程应该从简单到困难,逐步提升。因此我建议大家的审计流程为——DVWA——blueCMS——其他小众CMS——框架。同时做总结,搞清楚漏洞原理。好,进入正文!

blueCMS是一款小众的CMS,在2012年左右的时候,就有人发布其相关漏洞。但是,我个人感觉用blueCMS进行新手实战代码审计入门,是一个非常不错的选择。而我在进行blueCMS审计之前,网上也搜索了blueCMS的审计文章。那些文章可能都是你转过来,我转过去的,一般都是文章中只提到了两个漏洞,一个是位于根目录下的ad_js.php文件中,存在sql注入。

一名代码审计新手的实战经历与感悟

另一个就是,在common.fun.php中,自定义函数getip()可以伪造IP地址,造成注入。

而我,作为一个新手,很清楚新手在初学代码审计的时候,会遇到什么样的困惑,因此,决定花一些时间,认真记录下自己实战过程中的所见所闻所想,以及解决思路的方法。争取给新手一个非常全面的借鉴过程。

环境准备

BlueCMS v1.6 sp1

phpstudy php5.4.45+apache+mysql

操作系统 WIN7 64位 专业版

BlueCMS资源在i春秋上有一篇文章,上面有下载地址。其他的文章中出现的工具自己完全可以独立解决。因此文章中不再详述这部分内容。若不会搭建本地网站环境,百度一下即可。

开始实战!

代码审计有好几种办法,有人习惯于追踪数据流,有人习惯追踪危险函数,然后回溯。有人喜欢按功能点来进行审计。当然也有人直接通读全文。

我作为一个新手,按道理讲最好通读全文,熟悉架构。但是,我发现我的性格和习惯,更偏向于追踪数据流。俗话说,适合自己的才是最好的。因此,作为新手,读者应当结合自己的习惯,去进行代码审计。

我之所以选择追踪数据流,一方面是个人习惯,另一方面是因为余弦大佬曾经说过,web安全重点就三个词——“输入”,“输出”,“数据流”。

虽然我是追踪数据流,但是基本的网站结构该看还是要看的。因此,我做的第一件事,就是简单浏览网站目录结构。

一名代码审计新手的实战经历与感悟

实际上,很多情况下,根据命名,就可以猜出来这部分的文件具体是干嘛的了。比如admin文件夹,那么里面的文件肯定是和管理员的操作有关。include文件夹,里面肯定包含了一些常用的函数文件。

简单看完目录后,我会看主页的index.php,在看这个文件的同时,我还会打开它的网页,做到一边看代码,一边看网页的效果。这种方法可以让我们这些对代码不熟悉的新手脑海中可以构建相应的情景图。以后即使做渗透,也不会手足无措。

接着,我会打开主页index.php,“装模作样”的浏览一番。实际上,我也就是看看里面的注释罢了。。。。。因为在Index.php里面,往往不需要获取用户输入。之所以看它,是想知道在这个主页上,会引用哪些操作文件,一个网站的大概样子是啥样子。

一名代码审计新手的实战经历与感悟

比如说blueCMS中,根据主页,我就猜测,如果将一些xss语句存到数据库,那么他主页显示的时候,是不是就会有存储型xss呢?另外,主页还引入了一些文件,但是,我个人是没有去看的。个人习惯吧,尽管那本《代码审计:企业级web安全》中,建议大家是看看常用函数库文件,看看配置文件的。不过,我本人更喜欢在用到相关函数、相关配置的时候再去查看。

接下来,有两种审计思路,一种是通过点击网页,看网页如何跳转,来追踪审计。比如下面这幅图:

一名代码审计新手的实战经历与感悟

我一旦点击主页上的登录按钮,那么我就会跳转到user.php中,执行act=index_login的操作。那么这时候,你就可以打开相关的文件,查看该操作是如何进行的即可。

一名代码审计新手的实战经历与感悟

可以看到,先是获取了用户的输入,然后有的地方过滤了,有的地方没有。实际上,这里咋一看是好像存在漏洞,但是,当你仔细看的时候,就会发现UC_API,并且引用了client.php中的函数。可以这么说,由于我没有网站开发能力,导致我在看client.php中的一些函数时,是看不懂的。就比如下面这个,即使我知道是将那些参数全都传入UC_API_FUNC中,可是依旧不清楚返回值是什么类型。

一名代码审计新手的实战经历与感悟

“当你遇到问题的时候,就是你成长的契机”我非常喜欢这句话。同理,我们都是新手,初学代码审计,肯定很多东西看不懂。怎么办?这个问题会将一大批想学代码审计又没有开发背景的人刷下去。我们唯有硬啃,把这硬骨头啃碎了,才能继续下去,否则代码会读的昏昏沉沉。于是我通过搜索引擎查阅UC_API_FUNC知道,这个玩意儿是判断用户提交信息是否正确,然后返回正确情况下的uid。知道这个,目前来说,就够了。没必要再深入了。

我这里举这个例子,就是想让新手知道,初学代码审计,会有大批代码看不懂。死磕下去,才会看懂越来越多的代码。也为了以后审计逻辑漏洞打下基础。但是,也不能盲目死磕一个不会的点,这个度只能自己把握。

另外,由于我是追踪数据流的,所以我个人还有另外一种审计思路,就是不看网页,也不必刻意搞懂网站的整体架构。就一句话“我只关心用户输入”。

这种方法说的直白点,我就利用正则匹配,每个网页里面我都找到用户能控制的变量,一个一个的排查。优点就是不会像上面那种方法那样,漏掉一些页面。缺点就是,理清这个网站的结构有点麻烦。因为是追踪用户输入么,所以各种页面都要打开,很麻烦。

一名代码审计新手的实战经历与感悟

比如,在根目录下,我就看到了这些PHP文件,那么就挨个进去查有没有用户输入,没有就跳过。有就继续跟读。


本文标题:一名代码审计新手的实战经历与感悟
分享到: 更多