软件漏洞
造成软件漏洞的原因
本质原因是人类没有办法在原点上区分数据和代码,也就是说没有理解编写安全代码的真正办法
如何预防软件漏洞
通过修改自身代码、公共库函数的安全性降低漏洞出现频率,通过操作系统干预,使得漏洞攻击变得难以实现
软件漏洞常见名词
Vulnerability:漏洞、计算机安全隐患
Exploit: 漏洞利用
Shellcode: 壳代码
Payload: 有效载荷,payload是shellcode的一部分,shellcode的执行往往就是为了给Payload代码开辟道路,说白了就是真正干坏事的代码
一个最简单的漏洞例子
先修改属性
#define _CRT_SECURE_NO_WARNINGS
#include<Windows.h>
#include<iostream>
using namespace std;
int checkPassword(const char* password)
{
int result = 1;
char buff[7]{};
result = strcmp(password, "51hook");
strcpy(buff, password);
return result;
}
int main()
{
int flag = 0;
char password[0x500];
while (1)
{
printf("请输入密码\n");
int result = scanf("%s", password);
flag = checkPassword(password);
if (flag)
{
MessageBoxA(0, "密码错误!", "提示", MB_OK);
}
else
{
MessageBoxA(0, "密码正确!", "提示", MB_OK);
break;
}
}
return 0;
}
这是一个经典栈溢出,利用溢出来修改各种内容