PHPEMS (在线考试系统) 注入 第一枚。

2014-05-19T00:00:00
ID SSV:95893
Type seebug
Reporter Root
Modified 2014-05-19T00:00:00

Description

简要描述:

过滤不严。

详细说明:

public function getClientIp() { if(!isset($this->e['ip'])) { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; $this->e['ip'] = $ip; } return $this->e['ip']; }

这里x-forwarded-for可控 无过滤。 在注册的时候调用了这个函数。 造成了注入。

漏洞证明:

测试一下官网。

<img src="https://images.seebug.org/upload/201405/171459185155895bb9b5de7666f7199511e4a005.jpg" alt="phpems3.jpg" width="600" onerror="javascript:errimg(this);">

成功。