软件漏洞

造成软件漏洞的原因

本质原因是人类没有办法在原点上区分数据和代码,也就是说没有理解编写安全代码的真正办法

如何预防软件漏洞

通过修改自身代码、公共库函数的安全性降低漏洞出现频率,通过操作系统干预,使得漏洞攻击变得难以实现

软件漏洞常见名词

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;
}

这是一个经典栈溢出,利用溢出来修改各种内容