• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья WQL Injection

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
Как правило, в целях безопасности приложения, входящие символы очищают. Когда дело доходит до SQL инъекции, причина в большинстве случаев заключается в том, что входные данные не были должным образом очищены. Мне было интересно узнать о языке Windows Management Instrumentation Query - WQL, который является SQL для WMI. Можем ли мы проэксплуатировать WQL, если входящие данные не очищают?

Я написал простое приложение на C++, которое получает служебную информацию из класса Win32_Service. Приложение будет отображать такие элементы, как Name, ProcessId, PathName, Description и т.д.

Это WQL Query.
Код:
SELECT * FROM win32_service where Name='User Input'
Как вы видите, я использую метод IWbemServices::ExecQuery для выполнения запроса и перечисления пользователей с помощью метода IEnumWbemClassObject::Next.
Код:
IWbemServices* pService = NULL;
BSTR input = L"SELECT * FROM win32_service where Name='User Input'";
 
if (FAILED(hRes = pService->ExecQuery(L"WQL", input, WBEM_FLAG_FORWARD_ONLY, NULL, &pEnumerator))) {
    pLocator->Release();
    pService->Release();
    cout << "Unable to retrive Services: 0x" << std::hex << hRes << endl;
    return 1;
}
 
IWbemClassObject* clsObj = NULL;
int numElems;
while ((hRes = pEnumerator->Next(WBEM_INFINITE, 1, &clsObj, (ULONG*)&numElems)) != WBEM_S_FALSE) {
    if (FAILED(hRes)) break;
    VARIANT vRet;
    VariantInit(&vRet);
    if (SUCCEEDED(clsObj->Get(L"Name", 0, &vRet, NULL, NULL))
        && vRet.vt == VT_BSTR) {
        wcout << L"Name: " << vRet.bstrVal << endl;
        VariantClear(&vRet);
}
Как только пользователь введет имя службы, приложение отобразит его участников.
1.jpg

Я подумал, возможно ли сделать запрос и вернуть им все сервисы целевого хоста. Что-то вроде id=1 or 1=1 в SQLi, где мы делаем утверждение логически истинным.
Так как в этом случае входящие данные (пользовательский ввод) должным образом не очищены, мы можем использовать ключевое слово and и перечислить все сервисы, используя ключевое слово like.
Код:
SELECT * FROM win32_service where Name='Appinfo' or name like '[^]%'
2.jpg

Также вы просто можете использовать «%».
3.png

Это простая демонстрация, чтобы доказать существование WQL injection. Я уверен, что есть и другие, более удачные, варианты демонстрации бага. Тем не менее, Extended WQL, который является надмножеством WQL, можно использовать для объединения операторов и выполнения более интересных задач. Он используется System Center Configuration Manager - SCCM. Всегда санируйте входящие данные приложения.

Вы можете скачать приложения отсюда, чтобы потестировать материалы, о которых мы говорили выше.

оригинал
автор @ Osanda Malith Jayathissa
Перевод: tabac, специально для https://xss.pro
 
очень неплохой материал..
у автора софта ещё немало интересного в разработках
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх