c++ - 缓冲区溢出如何成为黑客的利用?
问题描述
我看过一个关于“缓冲区溢出利用”的视频视频中的那个人写入的字节数超过了数组可以容纳的字节数,例如:
int foo(const char* cp){
char sz[10];
strcpy(sz, cp); // consider cp is a pointer to 20 characters
return x; // some valid return statement here
}
上面如果foo
用 20 个字符的参数调用,那么我确定它是未定义的行为。但为什么他说这可能是一种利用,以及如何?
- 事实上,在 C++ 中,我们总是强烈建议不要这样做,但这怎么可能是一种利用呢?谢谢你。
解决方案
但为什么他说这可能是一种利用,以及如何?
仅举几个例子:
通过简单地覆盖具有有意义内容的其他内存内容。也许您的缓冲区结构后面有一个 bool 变量,其中包含访问权限标志。覆盖缓冲区可能会设置访问标志,并且代码将提供访问权限,这不是想法。
破坏堆栈也是一件坏事。也许您的 return 语句在错误的地址上运行更关键的是执行缓冲区的某些内容。
每个搜索引擎都可以找到很多这样的事情!
操纵标志访问的简单示例:
struct Check
{
char small[4];
bool accessGranted;
};
int main()
{
Check check{ "", false };
strcpy( check.small, "12345" );
if ( check.accessGranted )
{
std::cout << "Ubs...!" << std::endl;
}
}
顺便说一句:我发现那篇论文有点过时但很有用:http ://www.cis.syr.edu/~wedu/Teaching/IntrCompSec/LectureNotes_New/Buffer_Overflow.pdf
推荐阅读
- python - 使用四元数对3D空间中的对象进行坐标校正
- python - 用 numpy 掩码数组绘图
- zapier - 如何查看使用我们的 zapier 应用程序的用户列表?
- shell - 如何在 Xamarin.Forms 4.0 Shell.TitleView 中居中 ImageView?
- java - 如何修复包含泛型的方法
- javascript - 数字格式的空格
- hbase - HBase 中带有扫描查询的 RowFilter
- html - 在有角度的应用程序中导航栏粘性顶部不起作用
- html - 我的 HTML 文件正在链接另一个我什至没有导入或链接的 css
- apache - Apache tika 架构和处理节点