eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Запуск клиент-серверного приложения от другой учетной записи
Посл.ответ Сообщение

Ранг: 1.6 (гость)
Статус: Участник

Создано: 25 июля 2013 21:42 New!
Цитата · Личное сообщение · #1

Нужно обмануть программу,которая сообщает серваку имя компа и имя учетной записи пользователя,чтобы обойти бан. Недолго думая, становится ясно что стукачеством она может заниматься при помощи апишек GetComputerName и GetUserName.
Однако, поставив бряк на GetUserName и заменив в отладчике логин, прога вываливается с ошибкой.
А если зайти под другим логином,то работает. В чем тут подвох, помимо GetUserName есть ещё другие способы узнать настоящее имя пользователя,например через реестр?

Ранг: 19.1 (новичок)
Статус: Участник

Создано: 25 июля 2013 23:07 New!
Цитата · Личное сообщение · #2

А что мешает использовать программу под другой учётной записью?

Для запуска процесса под другой учёткой служит функция CreateProcessAsLogonW.
Так же есть функция CreateProcessAsUser, но воспользоваться ей можно из под сервиса.

Ранг: 1.6 (гость)
Статус: Участник

Создано: 30 июля 2013 15:21 New!
Цитата · Личное сообщение · #3

OSA
Потому что другие (чужие) учетные записи на пароле,на сервере ведутся логи где записывается имя компьютера и имя пользователя, который подключался к БД. CreateProcessAsUser я так понимаю тоже ничего не даст, т.к. это тоже самое что кликнуть ПКМ "Run as ..."
Задача другая - фальсифицировать информацию об учетке юзера и имени машины для конкретной программы. Есть у кого подобные наработки?

Ранг: 23.1 (новичок)
Статус: Участник

Создано: 30 июля 2013 16:18 New!
Цитата · Личное сообщение · #4

Где программа ? Почему уверен что программа сообщает имя учетки и компа ?
Используется бд, так может передается аккаунт к бд, не ?
Описывай полностью, не телепаты же .

Ранг: 23.1 (новичок)
Статус: Участник

Создано: 30 июля 2013 16:21 · Поправил: ZX-CodeR New!
Цитата · Личное сообщение · #5

Можно еще траффик проанализировать и если в открытом виде данные идут попробовать их менять.

Ранг: 376.3 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 30 июля 2013 17:57 New!
Цитата · Личное сообщение · #6

Слишком примитивно с помощью GetComputerName и GetUserName идентифицировать юзера. По своему опыту, тут скорее всего подвох - на самом деле DeviceIoControl обычно используют, с привязкой к серийнику диска или нечто подобное.
ЗЫ: Как заметил ZX-CodeR, без самой самой программы, гадать бессмысленно!

Ранг: 1.6 (гость)
Статус: Участник

Создано: 30 июля 2013 18:17 New!
Цитата · Личное сообщение · #7

ELF_7719116 пишет:
По своему опыту, тут скорее всего подвох - на самом деле DeviceIoControl обычно используют, с привязкой к серийнику диска или нечто подобное.

Да ладно,это совершенно точно отпадает. Прога самопальная, написана людьми весьма далекими от кодинга (знают Делфи на уровне студентов), что такое DeviceIoControl они знать не знают.
ELF_7719116 пишет:
Как заметил ZX-CodeR, без самой самой программы, гадать бессмысленно!

А что он с ней делать собрался? Без сервака получишь access violation
ELF_7719116 пишет:
Слишком примитивно с помощью GetComputerName и GetUserName идентифицировать юзера

Я думаю через реестр ещё идет проверка.Может и не одна. На что можно ещё бряки поставить?
GetUserName ловится,но потом получаешь ошибку если заменить логин даже таким же числом символов

Ранг: 211.3 (наставник)
Статус: Участник

Создано: 30 июля 2013 18:33 New!
Цитата · Личное сообщение · #8

HEXMature
Что гадать, бери IDR\IDA и смотри код. Не хочешь выкладывать саму программу, выложи проекты от IDR или idb от иды

Ранг: 19.1 (новичок)
Статус: Участник

Создано: 30 июля 2013 23:06 New!
Цитата · Личное сообщение · #9

HEXMature пишет:
Потому что другие (чужие) учетные записи на пароле,на сервере ведутся логи где записывается имя компьютера и имя пользователя, который подключался к БД. CreateProcessAsUser я так понимаю тоже ничего не даст, т.к. это тоже самое что кликнуть ПКМ "Run as ..." Задача другая - фальсифицировать информацию об учетке юзера и имени машины для конкретной программы. Есть у кого подобные наработки?

Есть утилиты для изменения так называемых Credentials у активных logon-сессий: WCE и mimikatz. Вот только в данном случае это наврятли поможет, т.к. GetComputerName и GetUserName не читают Credentials (я так полагаю).
Да и для фальсификации нужно знать из под какой учётки будет "атака": админ/не админ, локальная учётка/доменная учётка.
Просто локальные учётки хранятся в SAM (для работы с ними из LSASS.EXE своё API), а доменные учётки в другом месте (msv1_0.dll - там другое API).
Если и фальсифицировать GetUserName, то через LSASS.EXE. Может в WCE/mimikatz уже есть что то по данной тематике, но я не помню.

ЗЫ. А так наработки по поводу аналога WCE и mimikatz имеются.


Ранг: 296.9 (наставник)
Статус: Участник

Создано: 31 июля 2013 00:11 · Поправил: DenCoder New!
Цитата · Личное сообщение · #10

HEXMature
ZX-CodeR пишет:
Можно еще траффик проанализировать и если в открытом виде данные идут попробовать их менять.

Не можно, а нужно! Первым делом! Знаешь протокол - знаешь откуда отталкиваться. Бери Фиддлер, если http/https, WireShark - если другое, и вперёд.

Кроме GetUserName() есть ещё GetUserNameEx(), кстати. Аналогично GetComputerName() - GetComputerNameEx(), ResUtilGetEnvironmentWithNetName(). Также ip-адрес и присвоенный идентификатор в реестре. Гадая, можно и не угадать.

Универсальный способ (если протокол не определить) - ставим бряк на ws2_32.dll!send()/sendto()/WSASend()/WSASendTo(), по срабатыванию смотрим call stack, анализируем функции с точками возврата. Всё внимание здесь на буфер, откуда он берётся - локальный или динамически выделяется, где и как заполняется. Установками хард бряков на запись находим функцию-инициализатор содержимого буфера. Ну а там рядом должны быть уже видны и нужные нам функции. Хотя не исключён вариант, что они используются только на старте программы. Таким образом в несколько проходов start debug - stop debug устанавливаем функцию, которая получает имя. Ну а дальше как правило патч вызова.

Также
HEXMature пишет:
Однако, поставив бряк на GetUserName и заменив в отладчике логин, прога вываливается с ошибкой.А если зайти под другим логином,то работает.


HEXMature пишет:
GetUserName ловится,но потом получаешь ошибку если заменить логин даже таким же числом символов


Видимо прога от подменённого имени запрашивает у системы инфу, но так как реальное имя другое - то ничего не получает, кроме NULL, а в проге это не учтено. Поэтому и ACCESS_VIOLATION. Кстати, реальная оплошность разработчиков и на этом можно тоже сыграть. Наверняка, там что-нибудь вроде:
Code:
  1. push eax; UserName
  2. call func1
  3. mov esi, eax
  4. ...
  5. push esi
  6. call func2
  7.  
  8. func2:
  9. push ebp
  10. mov ebp, esp
  11. sub esp, 0x1000
  12. ...; остальная часть пролога
  13. mov eax, dword ptr [ebp + 8]; Указатель на какую-то структуру, запрошенную от подменённого имени UserName
  14. ; или строку
  15. push eax; аргумент - строка
  16. lea ecx, dword ptr [ebp - 0x1000]
  17. push ecx
  18. call sprintf; <- 0xC0000005
  19.  
  20. ;или аргумент - структура
  21. mov ecx, dword ptr [eax + ???]; <- 0xC0000005


Хотя я не телепат )
 eXeL@B —› Вопросы новичков —› Запуск клиент-серверного приложения от другой учетной записи

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS