主页 > 网络知识 > 代码审计思路讨论

代码审计思路讨论

首先感谢手电筒的建议,建议我从Bluecms来开始学习代码审计。感谢桑桑格,风哥的问题解答。文章主要是写下我自己在代码审计的时候所思所想。当然并不是太过严谨,也有可能存在错误。这里主要是写出了审计SQL、XSS、CSRF、文件包含漏洞的思路。当然,还有比如变量覆盖,代码执行,逻辑漏洞,会话认证等等。以后有时间会整理。这里的思路是我自己的。当然也有大神有更好的想法。今后我还需要加油。

文章使用审计软件seay源代码审计,Bluecms 版本v1.6sp1

最后,希望每个学习的小伙伴都能劈风斩浪。

一、常用代码审计思路

常见的代码审计漏洞方式有:根据敏感关键字回溯参数,查询可控变量,寻找敏感功能点,通读全文。

下面是我的代码审计方式,不正宗。各位随意看看。以bluecms为例:

1、初步查看源码,了解其架构。特别需要注意的是common.fun.php,mysql.class.php,user.fun.php等文件。(判断出来没有关系,来来来,通读一遍就好。)

e.g:data文件夹包含一些配置文件,include文件夹包含了自定义的函数,类等文件。

 

代码审计思路讨论

 

2、我们都知道渗透的话,我们着重关注三点:输入点,数据流,输出点。那么首先我们可以打开网页来判断输入点位置,常见输入点位置用户登录界面,搜索栏,留言板,一些公告URL参数位置。

3、通过对应输入点位置的代码,追踪数据流,主要关注是否存在过滤代码。

4、判断出错函数是否被其他文件调用。大可能概率其他包含的文件也是存在的。

二、SQL注入漏洞审计 2.1、SQL注入总结

正常情况,sql注入的位置经常出现在登陆页面,订单处理等。注意x-forward-for以及client-ip也会经常出现。因为该值是主动获取的。并不需要用户输入,所以经常性的不会进行过滤。在订单系统里面多个订单与购物车的交互,导致复杂性提升,容易出现二次注入。值得注意。

2.2、BlueCmssql注入审计举例

首先查看用户登录位置,查看表单代码,发现数据传送给user.php文件。那么我们尝试在源码以及web前端当中分析该文件。

 

代码审计思路讨论

 

WEB界面展示:

 

代码审计思路讨论

 

很明显这是一个登陆界面,那么我们尝试输入信息,抓包看看具体的参数。在抓取数据包当中我们发现输入的变量有:user_name,pwd,safeconde,userful_time,from,act。结合我们输入的信息,很容易判定user_name表示用户名称,pwd表示密码,safecode表示验证码,useful_time我们猜测可能是时间戳。剩下的from,act暂时不清楚。

 

代码审计思路讨论

 

查看源代码user.php文件,通读全文我们了解到变量act的作用,代码根据cat参数不同的值来执行不同的SQL语句。所以,我们通过seay源代码审计系统来打开代码文件并且搜索“do_login”,来查看参数值为“do_login”时,执行什么样的sql语句。(注意:个人习惯我喜欢用nodepad++来查看,部分截图是使用nodepad++打开,不影响阅读)

 

代码审计思路讨论

 

由代码可以发现输入参数符合上面一系列if语句的判定之后会执行一个select语句。利用这个getone函数以及login函数来执行。很明显这是自定义函数。我们定位一下该函数来查看一下该函数是如何定义的。发现该getone函数是mysql.class.php文件当中类class自定义的一个成员函数。Login函数是文件user.fun.php当中定义的函数。下面我们来分析一下该函数:

A、getone函数调用了一个query函数来执行,并且将结果赋值给变量$query,且通过函数mysql_fetch_array函数处理赋值到变量$row,最后返回变量$row。

注释:mysql_fetch_array在结果集中取得一行作为数字数组或关联数组。MYSQL_ASSOC表示关联数组。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!