代码审计之tinyshop注入

我们从网上下载的3.1.1的源码
将源码拖入到代码审计工具中查看结构

代码审计1.png

 
发现注入的审计过程
原生GET,POST,REQUEST变量中的' " <>等字符被转义了,通过debug跟踪代码以及全局搜索$_REQUEST等字符我并没有找到对这些变量进行过滤的地方,可能是在渲染输出的时候对字符串进行了过滤
我们找到(系统外部变量获取函数)---index.php

1.png


我们可看到获取外部变量都调用了Req类,我们跟进/framework/lib/util/request_class.php

2.png


3.png

 

GET和POST变量分别对应了Req::get()、Req::post()、Req::args(),且没有任何过滤,每次过滤都会调用Filter类,跟进/framework/lib/util/filter_class.php

4.png


5.png

 
Filter类中每一个方法都对应着不同的过滤功能,比较严格
查看系统DB类,了解数据库底层运行方式
/framework/web/model/module_class.php和/framework/web/model/query_class.php
前者用于被控制器调用,后者用于viewAction

6.png

 
基本上Model类的底层没有任何过滤,只是简单的进行类字符串拼接,所以只要能将'或\带入Model类中,且没有被Filter类过滤,即可构成注入
审计分析
综合上面信息,我们可以得知基本上除了Filter类,底层没有进行过于严格的过滤。
只要调用了Req类获取参数且在渲染赋值的过程中没有使用Filter类进行过滤,那么就很容易造成sql注入,底层Model类没有专门进行过滤。

我们进过搜索查找发现/protected/crontrollers/goods.php set_online方法中接收id参数进行商品上下架处理,却没有对id参数进行过滤,直接拼接进sql语句中

7.png

 
审计结果
构造id=12) and if(1=1,sleep(10),0)#,我们进入数据库查询

代码审计5.png

 

0 个评论

要回复文章请先登录注册