软件漏洞名词介绍
- Vulnerability: 中文直译为漏洞
- Exploit:中文直译为漏洞利用,他是能够利用或触发漏洞的一段代码(或指导性思路),也就是漏洞的利用方法。Exploit 代码/方法一般执行在攻击者机器上,或执行在权限受限的环境中。
- ShellCode:中文直译为“壳代码”,他是通过Exploit顺利执行后,将一部分代码以巧妙地方式在指定机器上以指定的权限运行,这段代码被称为ShellCode,ShellCode一般执行在被攻击者的机器上,或执行在权限相对不受限的环境中。
- PayLoad:中文直译为“有效荷载”(一般指导弹的弹头),PayLoad是ShellCode的一部分,ShellCode的执行往往是为了给PayLoad代码开山铺路,使其能够按照攻击者的意图执行,也就是PayLoad部分是做具体坏事的那部分代码。
学习顺序
- PayLoad部份
-ShellCode部份
-编写Expliot
-漏洞挖掘
典型的栈溢出
int VerifyPassWord(char *pszPassword, int nSize)
{
char szBuffer[50];
memcpy(szBuffer, pszPassword, nSize);
return strcmp(PASSWORD, szBuffer);
}
int _tmain(int argc, _TCHAR* argv[])
{
int nFlag = 0;
char szPassWord[0x200];
FILE *fp;
LoadLibraryA("user32.dll");
if (NULL == (fp = fopen("PassWord.txt", "rb")))
{
MessageBoxA(NULL, "打开文件夹失败", "error", NULL);
exit(0);
}
fread(szPassWord, sizeof(szPassWord), 1, fp);
nFlag = VerifyPassWord(szPassWord, sizeof(szPassWord));
if (nFlag) printf("密码错误\n");
else printf("密码正确\n");
fclose(fp);
system("pause");
return 0;
}
- 手动Fuzz测试
** 用一段连续的字符串,构造一个明显会触发溢出的文件
- Step1. 程序崩溃
a. 控制面板 > 管理工具 > 事件查看器 > Windows日志 > 应用程序
b. 查看最后一次错误日志
Step2. 寻找溢出点
a. 利用顺序字符串、二分法等定位溢出点
b. 找到溢出点之后不要忘记验证(重要)
