![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
MAKCim |
|
||||||||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
есть код
shellcode соответствует следующему коду
смысл программы заключается во внедрении шеллкода увеличения brk процесса pid вот тестовая программа
все отрабатывает отлично если изменить программу таким образом
brk не меняется, в этом случае даже если изменить шеллкод на
что соответствует
то процесс не завершается в чем может быть причина? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||||||||
|
|||||||||||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
никто не в курсе?
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
ну мне просто знаний не хватает, хотя я честно прочитал весь пост
![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
ошибка еще больше локализована
если убрать выравнивание по размеру страницы
в обоих случаях все работает ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Посмотри куда смотрит rip при записи, судя по всему это должно быть где то в libc, мог затереть что-то жизненно важное ![]() |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
RIP действительно содержит адрес инструкции в libc как с выравниванием, так и без но проблема не в этом смысл программы заключается в инжектировании достаточно большого фрагмента кода в активный процесс для этого сначала внедряется небольшой шеллкод, который должен увеличить brk процесса после этого по адресу, который соответствует старому значению brk, внедряется основной код естественно, при инжектировании шеллкода затирается часть кода libc но после его отработки, содержимое восстанавливается в процессе работы шеллкода нет никаких обращений к каким-либо функциям libc, которые могли бы использовать часть затертого кода, идет прямой вызов sys_brk() посредством syscall в любом случае, если бы проблема была в этом, программа не работала бы совсем -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
В 2х вариантах есть разница в том КАКИЕ функции в libc временно затираются. Возможно это и не имеет значения, но все может быть. Возможно какая то интерференция возврата из syscall'а (sleep в данном случае) и изменении регистра rip через ptrace. Можно попробовать сделать пару PTRACE_SINGLESTEP перед инжектированием кода и сменой rip. А может проще инжектировать кусок кода в стек? |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
нет возврат из sleep() идет по новому RIP я смотрел реализацию sys_ptrace(), при установке нового значения RIP, изменяется старое значение RIP в стеке (которое было сохранено после syscall для sleep()) нет механизм EDB (Execute Disable Bit) не позволит -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xvr |
|
||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Но чудес не бывает - что то мешает коду исполнится ![]()
|
||||||
|
|||||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
вот и я думаю, что не бывает ![]()
решение вспомогательной задачи окажется больше решения основной ![]() хотелось бы разобраться в чем проблема -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Не совсем понятно как разбираться (точнее совсем не понятно) ![]() ![]() ![]() |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
проверял, все нормально так, сейчас изменил программу следующим образом
т. е после записи шеллкода и установки нового RIP, вызывается ptrace() с PTRACE_SINGLESTEP дальше выполняется (якобы) одна инструкция после этого идет чтение RIP и...он становится на 2 меньше исходного т. е если, допустим до PTRACE_SINGLESTEP выровненный RIP был равен 0x2b4ea0ed6000 то после PTRACE_SINGLESTEP он становится равным 0x2b4ea0ed5ffe я в шоке ![]() кстати, проверял также через GDB, результат тот же так что дело не в моей программе может баг? ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
Мда, может и баг ![]() А может стоит добавить в shellcode штук 16 NOP'ов в начало и устанавливать rip куда-нибудь в их середину, и пусть он пляшет насколько захочет ![]() |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
переставил 2 NOP-а с конца вперед помогло (но RIP все равно ушел на 2 байта назад) однако поведение непонятно если адрес не выравнивать, то RIP не декрементируется ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |