6 内存操作
6.1 【必须】防止各种越界写(向前/向后)
错误1:
int a[5];
a[5] = 0;
错误2:
int a[5];
int b = user_controlled_value;
a[b] = 3;
关联漏洞:
高风险-内存破坏
6.2 【必须】防止任意地址写
任意地址写会导致严重的安全隐患,可能导致代码执行。因此,在编码时必须校验写入的地址。
错误:
void Write(MyStruct dst_struct) {
char payload[10] = { 0 };
memcpy(dst_struct.buf, payload, sizeof(payload));
}
int main() {
MyStruct dst_stuct;
dst_stuct.buf = (char*)user_controlled_value;
Write(dst_stuct);
return 0;
}
关联漏洞:
高风险-内存破坏