您当前位置: 首页 » 代码审计 » iwebshop4.6前台注入

iwebshop4.6前台注入

2017年2月10日 | 发表评论(0) 查看评论

这个洞是真的繁琐,即使知道这里有注入,单凭我自己肯定找不到,可见差距还是不小的。复现的时候是深夜了,脑子晕晕的,写文章逻辑有些问题,感谢ven指正。另代码过简,本是为了页面小点,导致可读性差了不少,以后改正。

缺陷版本:iwebshop4.6.16090900 百度可以直接下载到源码。

在首页搜索处,http://www.am0s.com/iwebshop/index.php?controller=site&action=search_list&word=fff

表示调用的是controller目录下的site.php中的search_list函数,word是函数的传值。

来看一下代码

/controller/site.php

通过下面两句获得参数,也就是上面链接中的word

可以看到get到的数值经过IFilter::act处理,跟踪下函数

在act中判断是否是数组,如果是则将键名带入addSlash,键值递归调用act,然后再经过两个判断进入switch,switch中默认是string,看下string如果过滤

经过htmlspecialchars处理后带入addSlash

同样是判断是否是数组,进行递归调用。否则使用word处理,再addslashes

在word中过滤了一些关键字,但是这里过滤的是”select “(中间有个空格),这样就可以很轻松的绕过了,对于sql注入过滤空格的情况下可以使用双括号绕过。

在get到的数值经过上面的处理后,单双引号全部转义,并且在函数中的数据库语句调用使用了双引号进行包围,这样的话就没办法注入了,如果是我看代码的话,基本到这步就放弃了。。既然这里有洞就跟着作者的思路看下去。

在这个函数后面跟了一个

定位一下redirect,(代码太长,省略部分)

看到$nexturl被带入了IViewAction::run,跟上看一下

$controller->render继续跟进

进入了renderView。

省略部分代码,这个函数大概意思就是根据模板文件生成$runtimeFile并requireFile,在搜索框带入引用的时候,这里的$runtimeFile的值是C:inetpubwwwrootiwebshopruntimeviewsdefaultsitesearch_list.php

来看一下这个值(注意:这里的search_list.php是后来生成的文件,刚开始是不存在的,所以如果使用的软件的目录中找不到的话,需要刷新一下,或者手动找到打开)

在C:inetpubwwwrootiwebshopruntimeviewsdefaultsitesearch_list.php 137行看到调用了seatch_goods::find。

<?php $goodsObj = search_goods::find($defaultWhere);$resultData = $goodsObj->find();?>

 

可以看到这里又引入了一个新的参数attr,attr依然经过IFilter::act处理,过滤了单双引号和部分关键字,但是在下面的sql语句中,调用attr的时候却没有使用单双引号进行包围,导致注入的产生。

 

 

分类:

代码审计

| 标签: