Перезапись адреса возврата с помощью уязвимости формата строки
У меня есть программа на C, которая выглядит примерно так:
void doSomething() {
... <does something> ...
}
void vuln(char[] buf) {
{
...
printf(buf);
...
}
int main(int argc, char **argv)
{
... <get buf from user> ...
vuln(buf);
...
return 0;
}
Что я хочу сделать, это создать строку формата, которая приведет к doSomething()
быть выполненным. ASLR выключен, поэтому я знаю точные адреса doSomething()
функция.
Путем проб и ошибок я обнаружил, что адрес возврата можно распечатать, передав "%15$x"
как строка формата. В моем случае этот обратный адрес 0x8048ab8
, Я хочу переписать это 0x804866b
(адрес doSomething()
). Как мне это сделать? Я не мог найти хорошее объяснение этого онлайн.
В общем, если как мы пишем на адрес, к которому можно получить доступ с помощью "%A$x"
где A
какой-то номер?