第一个cve


第一个CVE

在今天获得了第一个有CVE编号的漏洞 CVE-2020-10804 .

CVE只是一个漏洞数据库,只需要自己申请即可. 但国内会自己给小漏洞申请CVE很少,往往视为一种水货CVE.这也是第一个不需要我自己申请CVE的漏洞.

有趣的是PHPMyadmin这个月修复的漏洞,包括这个漏洞里,三个漏洞撞了两个(指被两个或以上的人提交)

和我同时发现问题的是hoangn144_VCS 大佬,他是在登录插件处发现的用户名注入.

漏洞详情

这个漏洞很水,我从审计开始到发现这个问题用时没超过两个小时.只是在sql查询时直接拼接字符串.

phpmyadmin在编辑密码和权限对用户名转义不当 ,补丁很简单 就是加上转义了而已

image.png

密码处补丁 复现也很简单 只需要在mysql5.6下编辑一个有单引号的用户名即可

漏洞发现

首先我阅读了近几天被发现的漏洞 这个可以在这里找到.

发现大部分问题都只是简单的sql拼接 而且漏洞模式非常相似. 我在IDE下精心构造了几个正则表达式

由于时间比较久了 没记下 但是大概如下

第一个

$GLOBALS['dbi']->tryQuery(\$_[GET|POST][^)]*) 寻找在查询函数中被直接引入的请求变量

实际上上面效果不佳 因为大部分sql语句都不在查询函数构造 而且这个没有过滤已经被转义过的变量

第二个

'.*?'+.\$_POST 这个能找到简单的字符串拼接 但在复杂的函数调用中还是无能为力

最后我使用了两种方法结合 第一种跟踪$_GET|$_POST 第二种根据开发的变量命名习惯 将第二条修改为

$.*?query = \'.*?\'+.\$

成功在短时间内发现了问题

评价

在知名项目中 phpmyadmin应该属于最好挖 但漏洞影响很小的.在发现第一个时,我同时还有几个怀疑的注入,但毫无疑问那些也是接近于无的危害.

phpmyadmin只能使用你给的账号来查询,select注入是没什么意义的,无法提权.只有能导致高权限用户在进行某些操作时像update alter之类语句中注入或者xss才有意义,但利用难度也非常高

漏洞时间线

1
2
3
4
2020.1.20 提交给phpmyadmin安全组
2020.1.21 得到第一次回应
2020.3.21 修复并发布新版本
2020.3.22 CVE-2020-10804已分配