バッファオーバーフローを使用して次のプログラムでシェルコードを実行するにはどのようにeipレジスタにメモリアドレスを指すようにすることができますか?ここでバッファオーバーフローのリターンアドレスC - メインなし
static int __init onload(void)
{
void function1(char *arg1)
{
char buffer[10];
strcpy(buffer, arg1);
}
char *kernel_version = kmalloc(MAX_VERSION_LEN, GFP_KERNEL);
printk(KERN_WARNING "Hello world!\n");
// printk(KERN_EMERG "Version: %s\n", acquire_kernel_version(kernel_version));
find_sys_call_table(acquire_kernel_version(kernel_version));
printk(KERN_EMERG "Syscall table address: %p\n", syscall_table);
printk(KERN_EMERG "sizeof(unsigned long *): %zx\n", sizeof(unsigned long*));
printk(KERN_EMERG "sizeof(sys_call_table) : %zx\n", sizeof(syscall_table));
if (syscall_table != NULL) {
//function1("AAAAAAAAAAAAAAAAAAAAAAAAAAAB7F41B63");
original_write = (void *)syscall_table[__NR_write];
syscall_table[__NR_write] = &new_write;
write_cr0 (read_cr0() | 0x10000);
.
.
so on...
}
コード(https://gitlab.tnichols.org/tyler/syscall_table_hooks/blob/master/src/hooks.c)に、私は私が私のリターンアドレスにバッファオーバーフローやポイントを作成する必要がある位置を表示しています上記のリンクです。
私は上記のコードを使ってバッファをオーバーフローさせて26 Aとし、返されたアドレスポイントを "0xB7F41B63"にしましたが、リターンアドレスを置き換えません。また、私のコードをgdbでデバッグすることはできませんので、誰でもデバッガを提案してコードを段階的に分析することができますか?
PS:私のコードにはメインがありません。バッファオーバーフローでメインと別のコードを試してみましたが、それはうまくいきましたが、ここに#include <stdio.h>
でメインを挿入するとstdioが見つからないというエラーが出ます。 h。 g ++をインストールしましたが、gccのバージョンを変更できないため、OSをアップグレード/アップデートできません。
どのような状況下で、私はより速く答えを得るために、私の質問に、「緊急」または他の同様の句を追加することができます[お読みください:ここでは似たような状況を活用する方法を示す記事がありますか? ](// meta.stackoverflow.com/q/326569) - これはボランティアに対処する理想的な方法ではなく、おそらく回答を得ることに逆効果があるということです。これをあなたの質問に追加しないでください。 – halfer