shellcode学习第一个例子。
以下有一段c语言编写的命令行程序,检验用户输入的数字,并判断是否合法。这里用户的输入被放在了函数的缓冲区里,但程序没有对缓冲区长度做检查,留下了漏洞。这里可以利用该漏洞绕过数字检察,使得任意输入都会被判定为正确。
在 validate_serial 中,do_valid_stuff 的地址溢出到函数的返回值上,就可实现。
源程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int valid_serial(char * psz)
{
size_t len = strlen(psz);
unsigned total = 0;
size_t i;
if (len<10)
return 0;
for (i = 0; i < len; i++)
{
if ((psz[i]<'0') || (psz[i]>'z'))
return 0;
total += psz[i];
}
if (total % 853 == 83)
return 1;
return 0;
}
int valildate_serial()
{
char serial[24];
fscanf(stdin, "%s", serial);
if (valid_serial(serial))
return 1;
else
return 0;
}
int do_valid_stuff()
{
printf("the serial num