2016-04-20 4 views
1

В качестве задания в курсе компьютерного проектирования моей команде приходится обращаться к оболочке с использованием ориентированного на результат программирования путем переполнения буфера и использования нескольких найденных гаджетов.Использование ROP для доступа к оболочке в ARM

Использование GDB мы нашли место строки «/ bin/ш» с помощью следующей команды:

(GDB) find &system, +9999999, "/bin/sh" 

Затем с помощью нескольких гаджетов мы в состоянии загрузить его в r0 и оттуда мы можем запрыгнуть .

К сожалению, каждый раз, когда мы сталкиваемся с ошибкой сегмента, перед тем, как мы получим доступ к терминалу. Мы довольно потеряны в этом, и можем использовать любую помощь, которую вы могли бы нам дать. Кто-нибудь из вас знает какие-либо распространенные ошибки, которые вызывают это?

Наш стек выглядит это право, прежде чем идти через наши гаджеты и ввести систему:

(gdb) x/15a $sp 
0xbefffb40: 0x85a4 0x42424141 0x44444343 0x46464545 
0xbefffb50: 0xbeff0046 0xb6f55108 <inet6_opt_finish+56> 0xb6f84a60 
      0xb6f55104 <inet6_opt_finish+52> 
0xbefffb60: 0x0 0xb6ea3f6c <__libc_system> 0x0 0x84d0 <main> 
0xbefffb70: 0xb6ffc718 0xb6ffc400 0x0 

и после того, как попасть в систему:

(gdb) x/10a $sp 
0xbefffb68: 0x0 0x84d0 <main> 0xb6ffc718 0xb6ffc400 
0xbefffb78: 0x0 0x0 0x83bc <_start> 0x0 
0xbefffb88: 0x0 0x0 
+0

Что вы пытаетесь запустить? Текст '/ bin/sh''? Вам нужно запустить 'execv()' syscall или что-то в этом роде. Вам нужно добавить дополнительную информацию к своему вопросу. Вы использовали поисковик гаджета ROP в двоичном формате? Можете ли вы показать, какие из них вы выберете? –

+0

Мы пытаемся запустить <__ libc_system> с аргументом «bin/sh /», хранящимся в r0, чтобы получить оболочку. Мы нашли гаджеты вручную, используя grep. Мы отредактируем сообщение, чтобы содержать распакованные гаджеты. – Tesnich

ответ

0

Не уверен, что ваша главная программа выглядит как но похоже, что у меня было это раньше. Крушение, вероятно, связано с тем, что вы прыгаете/возвращаетесь в подпрограмму большого пальца, функция __libc_system() для Android 5.0,1, по крайней мере, находится в большом пальце. Из документа ARM Procedure call standard (Страница 17, раздел 5.3), если цель находится в большом пальце, целевой адрес вашего возвращения должен быть равен +1, поэтому 0xb6ea3f6c <__libc_system> должен быть 0xb6ea3f6d