Сейчас на форуме: rmn, Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+4 невидимых)

 eXeL@B —› Программирование —› Переполнение - возврат
Посл.ответ Сообщение

Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 13 мая 2008 07:49
· Личное сообщение · #1

Пару лет назад кричали - SP2, защита от выполнения кода в стеке, overflow умрёт!
Не умер, зараза, так что решил разобратся с реализацией.
Пример из wiki
/* overflow.c - демонстрирует процесс переполнения буфера */

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
char buffer[10];
if (argc < 2)
{
fprintf(stderr, "ИСПОЛЬЗОВАНИЕ: %s строка\n", argv[0]);
return 1;
}
strcpy(buffer, argv[1]);
return 0;
}


Шелкод написал, без нулей, место для подмены адреса возврата нашёл, но! Адрес, по которому в стеке лежит наш код - 001234ААh. Вот этот 00h в подменяемом адресе возврата всё портит. При считывании параметров доходит до 00 и прекращает читать строку! Как это забороть? Вообще, ссылкой на доходчивую статью по переполнению не поделитесь?
PS крякинг к теме всё таки где-то близко ;)




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 13 мая 2008 07:54
· Личное сообщение · #2

Freecod, а ты опцайку в винде включил для обычных user mode прог?



Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 13 мая 2008 09:35
· Личное сообщение · #3

Да я не к тому что SP2 не помог, я к тому, что уязвимость до сих пор актуальна и надо бы её изучить



Ранг: 172.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 13 мая 2008 09:53
· Личное сообщение · #4

make DEP on

-----
HOW MUCH BLOOD WOULD YOU SHED TO STAY ALIVE




Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 13 мая 2008 10:04
· Личное сообщение · #5

OMG я не хочу лечить, я хочу убивать! (с)



Ранг: 37.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 13 мая 2008 10:31
· Личное сообщение · #6

Freecod а если UNICODE? Или код на C только для примера?



Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 13 мая 2008 10:51 · Поправил: Freecod
· Личное сообщение · #7

дадада. Мне интересен данный момент - в стеке на месте адреса возврата левые данные. Мне нужно вставить туда указатель на мой код в стеке, так же переданный в строке. Но адрес-то с 00h! Внятно статьях описывается только собстно баг перезаписи чужих ячеек стека у локальных переменных. Потом - "передав нужную строку, можно подменить адрес возврата указателем на свой код". Куда свой код помещать? Каким образом? Как быть, если в этом адресе есть 00h?




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 13 мая 2008 11:21
· Личное сообщение · #8

Freecod
Какой компилер и с какими опциями? Под GCC собрал и все нормально переполняется, так что тут дело скорей всего в компилере.

-----
Computer Security Laboratory




Ранг: 108.7 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 13 мая 2008 11:48 · Поправил: Freecod
· Личное сообщение · #9

Господи, убейте мой мозг тапком. Может у меня кодировка неправильная, и мои посты закорючками рисуются, вот меня никто и понять не может?
Пост от 13 мая 2008 10:51:11 - подробнее или понятнее я объяснить суть вопроса не могу.
Но постараюсь, т.к. очень хочется получить ответ.
Компилирую программу. Пишу офсет-независимый шелкод без 00h, т.е. можно передать в строке параметров.
Запускаю overflow.exe "1234567890FFFF[тут 4 байта, подменяющие адрес возврата][тут шелкод]"
Внимание, вопрос! 4 байта, подменяющие адрес возврата не должны содержать 00h, т.к. остальная часть строки не обработается. Но в стек растёт от 0012FFFCh. Следовательно передать управление на мой шелкод по возврату я не могу (т.к. 00h!). Как действовать дальше???



Ранг: 37.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 13 мая 2008 12:00 · Поправил: sss
· Личное сообщение · #10

[HEX], а какую строку подал на вход? У него же строка рубиться... А strcpy менять нельзя.

Чёрт. Не видел тапки оратора выше...




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 13 мая 2008 15:39
· Личное сообщение · #11

Freecod
Во время переполнения под оллей посмотри какие регистры куда смотрят. Обычно ESP смотрит на вершину стека вот этим и воспользуйся! Прыгни на любой участок памяти содержащий опкод CALL ESP или JMP ESP. Тогда сможешь обойти свою проблему с 0x00 вначале адреса.

А вообще много статей на www.securitylab.ru
Например вот здесь с примерами нормально расматривается www.securitylab.ru/analytics/216312.php

-----
Computer Security Laboratory





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 13 мая 2008 20:26 · Поправил: s0larian
· Личное сообщение · #12

Freecod пишет:
Запускаю overflow.exe "1234567890FFFF[тут 4 байта, подменяющие адрес возврата][тут шелкод]"

Эээ, эта строка, и она в ASCII. Напиши ф-цию читающую "0x00,0x10,0x20..." что б скормить байты и это всё отладить.

И ещё вот - если ты используешь VC++ то отключи опцайку проверки стека.



Ранг: 52.2 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 13 мая 2008 20:51
· Личное сообщение · #13

s0larian пишет:
И ещё вот - если ты используешь VC++ то отключи опцайку проверки стека.


Release версия вроде бы без нее да и кода меньше копать в отладчике =)




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 13 мая 2008 20:56
· Личное сообщение · #14

Vitek, /GS eсть в Release, а /RTCx только в Debug.



Ранг: 37.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 14 мая 2008 04:59
· Личное сообщение · #15

Freecod, получается, что если ты пользуешься уязвимостью обработки командной строки некой программы, перекомпилировать которую ты не можешь, ни хера не получиться... Если только не воспользоваться поиском кодов в пространстве библиотек системы, в адресе которого нет 0. Например, ищи опкод jmp esp - 4 (требуемый офсет) и кодируй в строке адрес этой команды.




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 14 мая 2008 11:59
· Личное сообщение · #16

sss
О чем я выше и написал И даже статью привел в которой об этих проблемах расписано.

-----
Computer Security Laboratory




Ранг: 37.1 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 15 мая 2008 04:26 · Поправил: sss
· Личное сообщение · #17

[HEX] сорри ..

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



Ранг: 17.8 (новичок)
Активность: 0.020
Статус: Участник

Создано: 15 мая 2008 07:19
· Личное сообщение · #18

Друзья с ачата написали неплохую статью, сцылку лень искать, вот здесь всё что было:

fa72_15.05.2008_CRACKLAB.rU.tgz - !переполнение буфера by KEZ.rar




Ранг: 467.7 (мудрец), 5thx
Активность: 0.270
Статус: Участник
Иной :)

Создано: 15 мая 2008 09:30
· Личное сообщение · #19

UR-Shark
Что то подобное помоему давно видел на секлабе.

Вот попалось про брутально локальный сплоит www.securitylab.ru/analytics/216308.php

-----
Computer Security Laboratory





Ранг: 238.8 (наставник), 67thx
Активность: 0.20
Статус: Участник
CyberHunter

Создано: 15 мая 2008 13:12
· Личное сообщение · #20

Помнится поднимал я подобную тему года два назад
http://exelab.ru/f/action=vthread&forum=1&topic=6596&page= 0

-----
Nulla aetas ad discendum sera



 eXeL@B —› Программирование —› Переполнение - возврат
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати