Перезапись адреса возврата с помощью уязвимости формата строки

У меня есть программа на 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 какой-то номер?

0 ответов

Другие вопросы по тегам