Переведено для codeby. Net


Download 0.92 Mb.
Pdf ko'rish
bet19/36
Sana09.05.2023
Hajmi0.92 Mb.
#1449564
TuriРеферат
1   ...   15   16   17   18   19   20   21   22   ...   36
Bog'liq
эксплуатация систем arm linux AFANX

4.2.3 Return to Libc
Мы уже видели, как изменять выполнение программы. Но нашей целью
является получение оболочки системы, и, скорее всего, уязвимая программа не
не содержит в своем коде функции, выполняющей именно эту операцию.
Поэтому мы должны искать в другом месте, в общем коде, до которого мы
можем добраться независимо от того, какая программа к нам подключена от
вложенной программы: идеальным местом является Libc.
Любая Unix-подобная операционная система нуждается в библиотеке C,
библиотеке, которая определяет доступные доступные "системные вызовы" и
другие базовые средства, такие как open, malloc, printf, exit…
32


Мы можем быть уверены, что каждая программа использует эту библиотеку, и,
определив интересующие нас функции, которые нас интересуют, их можно
будет использовать повторно для всех наших эксплойтов.
Чтобы увидеть библиотеки, загруженные в программу, и их расположение в
памяти, мы можем использовать эту команду:
root@armstation# ldd test
libc.so.6 => /lib/libc.so.6 (0x40026000)
/lib/ld-linux.so.3 (0x40000000)
root@armstation#
Мы только что выяснили путь используемой libc (/lib/libc.so.6) и адрес памяти,
куда она загружена (0x40026000). Этот адрес не изменяется во время различных
выполнений программы и может считаться постоянным.
Мы можем перейти к анализу библиотеки: мы дизассемблируем ее и сохраним
результат в файл, чтобы облегчить последующие исследования:
root@armstation#objdump -d /lib/libc.so.6 > libc_dump.txt
root@armstation#
Операция успешна, если файл "libc dump.txt" содержит дизассемблированный
код библиотеки:
root@armstation# tail libc-arm.txt
fc9d4: e79f3003 ldr r3, [pc, r3]
fc9d8: e3a02000 mov r2, #0 ; 0x0
fc9dc: e7802003 str r2, [r0, r3]
fc9e0: e28dd004 add sp, sp, #4 ; 0x4
fc9e4: e8bd4030 pop {r4, r5, lr}
fc9e8: e12fff1e bx lr
fc9ec: 00026820 andeq r6, r2, r0, lsr #16
fc9f0: 0002668c andeq r6, r2, ip, lsl #13
fc9f4: 00002b6c andeq r2, r0, ip, ror #22
fc9f8: 000267a4 andeq r6, r2, r4, lsr #15
root@armstation#
В качестве первой попытки возврата в-libc мы нацелились на простую
функцию, просто для понимания процедуры. Хорошим выбором является exit(),
поскольку она позволяет избежать сбоев в работе и позволяет нам наблюдать,
как изменяется код выхода.
Функция принимает единственный параметр, который передается в r0, но
независимо от того, какое значение, содержащееся в регистре, программа
завершится без ошибок. Поэтому пока код выхода нас не волнует.
33


Чтобы найти функцию в дизассемблированном коде, мы можем действовать
двумя способами. Первый способ - это ручной поиск:
root@armstation# cat libc_dump.txt | grep -e ":$"
0002cec4 :
root@armstation#
Однако его адрес - это не то, что нам нужно.
Чтобы получить реальный адрес функции, при загрузке программы мы должны
добавить это смещение к адресу загрузкlи libc (который мы нашли ранее):

Download 0.92 Mb.

Do'stlaringiz bilan baham:
1   ...   15   16   17   18   19   20   21   22   ...   36




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling