深知自己不足,努力啃各种知识,实在是走了太多坑,前一阵子粗读了《代码审计》,结合一下案例做一些总结,思路为主。
个人觉得代码审计的本质可以总结为,两大类,危险函数,逻辑类。关于代码审计的方法,有针对性的搜寻危险函数(或是敏感操作文件)或者通读全文理解整个代码的流程,找出相应的问题。想提升代码审计除了啃代码,无它法。(知识面决定攻击面)
关于搜寻危险函数不用多言,例如命令执行函数eval assert执行数据库的mysql_quert()函数,select,update关键字 等等,
这种方法在我前不久就实战用上了
url='{$val}'中的$val并没有经过过滤,直接传了进去。
跟踪$val参数
发现来自$match参数的遍历。
跟踪$match参数
来自以[br]标签分割的$url。继续跟踪$url
可以看出,当我们执行文件导入任务的时候,他会直接读取文本内容,并没有过滤任何关键字,直接插入到sql语句中,所以这里我们先下sql断点测试一下。
这是经过构造的注入exp
从这里我们的确可以看到exp已经被执行。
查看网站根目录
可以看到数据库目录已经写出来了,如果能知道目标网站的绝对路径,那么我们就可以写shell了。
第二种就是通读全文然后理解网站的逻辑再去找寻相应的漏洞。
我在网上随便找了一个cms,来做案例。
首先查看程序目录
可以很清楚的看到一些配置文件,函数文件等等,我们先从index.php(入口文件看起),
代码很简单首先定义一个常量,然后包含common.php顾名思义,common为公共的一些变量或者函数,我们等会跟进,然后返回当前的时间并且调用了$phpcom这个实例化的inie函数,可以很清楚的看到我们这个index.php中并没有这个函数所以,而且下面也大量调用application的静态函数,我们跟进common.php看看
定义了很多环境变量并且包含了class/phpcom.php,跟进
就会发现里面定义了超级多的类,这样子我们再看看index刚才的操作 究竟做了什么,首先看第一个
我们在common.php中发现$phpcom是phpcom_init类中调用的instance静态方法,跟进
然后我们就找到了正主
代码意思很简单首先设置$_instance为
然后判断是否为空$_instance则会赋值一个新建一个phpcom_init对象,并且赋值给$_instance,最后返回。
一句话就是初始化上面的变量。
所以其他的也是一样的,按照这个思路,一直读取下去就ok了。
下周具体开始web的漏洞。
领取专属 10元无门槛券
私享最新 技术干货