ret2libc проблема с адресом

Discussion in 'Песочница' started by Danila_N, 19 Mar 2012.

  1. Danila_N

    Danila_N New Member

    Joined:
    18 Mar 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Всем привет!
    Изучаю метод ret2libc и столкнулся с проблемой, которая заключается в адресе функции system().

    В Ubuntu 11.10 адрес функции system() такой 0x16db20.
    В BackTrack 5 адрес функции system() такой 0xb7ead100.

    Если в первый адрес добавить "00" (0x0016db20), программа всё равно падает по ошибке сегментации. Т.е, это не выход.

    Во втором случае, программа так же падает по ошибке сегментации по адресу 0x46b7ead1.

    Как передать управление на такие адреса (и им подобные)?
     
  2. Danila_N

    Danila_N New Member

    Joined:
    18 Mar 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Неужели здесь нет специалистов по эксплоитам, способных проконсультировать по данному вопросу?
     
  3. Danila_N

    Danila_N New Member

    Joined:
    18 Mar 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Очень жаль, что даже здесь нет квалифицированных специалистов.
    Спасибо "за помощь", тему можно закрывать.
     
  4. Га-Ноцри

    Га-Ноцри Elder - Старейшина

    Joined:
    16 Oct 2011
    Messages:
    326
    Likes Received:
    177
    Reputations:
    76
    Segmentation fault? У вас память "потекла".
    [​IMG]

    P.S. А вообще самый лучший способ получить конкретный ответ - это задать конкретный вопрос. Включите фантазию. Здесь нет ясновидящих. И вообще вопрос лучше было бы задать в разделе C++ c конкретными выдержками участка кода, где происходит ошибка сегментации. И, да, в 99.9% случаев это вызвано неправильно манипуляцией с указателями, на мой скромный взгляд.
     
    #4 Га-Ноцри, 20 Mar 2012
    Last edited: 20 Mar 2012
  5. OxoTnik

    OxoTnik На мышей

    Joined:
    10 Jun 2011
    Messages:
    939
    Likes Received:
    524
    Reputations:
    173
    А ты что хотел найти на форуме "гомосексуалистов"?
     
  6. Danila_N

    Danila_N New Member

    Joined:
    18 Mar 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Меня интересуют не гомики, а специалисты по эксплоитам.

    Проблема в данном случае в нулевых байтах адреса функции system() 0xb7ead100.
    При переполнении буфера, адрес возврата переписываем этим адресом 0xb7ead100, но из-за нулевых байтов, переход осуществляется по адресу 0x46b7ead1. Т.к. функция strcpy обрабатывает входную строку, до тех пор, пока не встретит нулевой байт (символ конца строки). Таким образом, функция strcpy просто не копирует последний нулевой байт, считая его концом строки, но это не конец строки, а составляющая часть адреса возврата. По этому осуществляется переход по неверному адресу. Кто его знает, что находится там (0x46b7ead1), вот потому и Segmentation fault.

    Если изменить адрес 0xb7ead100 на 0xb7ead101, то выполнится переход по указанному адресу (0xb7ead101).

    В общем проблема заключается в нулевых байтах адреса возврата, как передать управление на такой адрес? Как его правильно переписать?
     
  7. Danila_N

    Danila_N New Member

    Joined:
    18 Mar 2012
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Народ, если никто не может помочь, скажите сразу.