Частина 8 - Хакінг базових I/O
Для повного змісту змісту всіх уроків натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть обговорені. https://github.com/mytechnotalent/hacking\_c-\_arm64
Сьогодні ми хакуємо валідацію входу з нашого останнього уроку.
Давайте запустимо radare2 у режимі запису.
radare2 -w./0x02_asm_64_basicio
Давайте зробимо аналіз автоматично.
aaa
Позначте на головну.
s main
Дивіться розборку.
v
Давайте повернемося до огляду терміналу.
q
Давайте подивимося візуальну діаграму і почнемо з першого b.ne, який під належними очікуваними умовами прийматиме лише справжній цілий рядок між 0 і 100, як ми продемонстрували в останньому лекції.
b.ne означає перехід якщо не рівно. Ассемблер перед ним просто не має значення в цьому випадку, оскільки ми знаємо, що якщо залишити b.ne так, як є, валідація входу залишиться ціла.
Нам потрібно вимкнути цю валідацію входу, змінивши цю інструкцію на b.eq або перехід якщо рівно.
Давайте подивимося цей блок коду.
Ми бачимо, що якщо воно вірне, тобто валідація вірна і ми маємо ціле число між 0 і 100, ми слідуємо за справжньою зеленою лінією до наступної функції.
Якщо ми провалюємо валідацію, ми потрапимо до falsу умови, щоб отримати новий вхід.
Давайте q до термінальної команди.
Давайте підійдемо до заяви, яку ми хочемо хакнути.
[0x000010a4]> s 0x000010c4
Давайте тепер хакнемо перехід, про який говорили.
[0x000010c4]> wa b.eq 0x1214 Written 4 byte(s) (b.eq 0x1214) = wx 800a0054 [0x000010c4]>
Давайте вийдемо.
q
Тепер коли ми запустимо бінарний файл, він просто проігноруватиме будь-який вхід взагалі, не кажучи вже про валідацію входу і просто досягне бажаного місця.
kali@kali:~/Documents/0x02_asm_64_basicio$./0x02_asm_64_basicio Your are 0 years old, seems legit! kali@kali:~/Documents/0x02_asm_64_basicio$
Хоча 0 є справжнім, він просто є нестабільним значенням, яке випадково знаходилося в одному з регістрів, який програма очікувала належним чином призначити під час нормальної програми потоку. Тут ми змогли змінити бінарний файл постійно, щоб здійснити наш хак.
Ці приклади дуже прості, але коли ви поєднаєте їх, як ви просуватиметеся, ви фактично зможете відтворити будь-яку річ.
У нашому наступному урокі ми обговоримо примітивний тип даних char.