操作系统关键知识点之格式化字符串攻击与返回libc攻击深度解析
本次重新学习操作系统,希望将学习内容进行总结,与大家一同学习进步。以下将梳理相关知识点,并以通俗语言讲解,标注重点,最后通过表格总结。
一、知识点总结与通俗讲解
(一)格式化字符串攻击
- 知识点:
printf
函数的%n
格式符会将%n
前输出的字符个数存入指定变量,这可能导致内存被重写。若程序员未严格限制用户输入的格式化字符串,攻击者可利用此漏洞覆盖栈中函数返回地址,使程序跳转到任意位置(如注入的代码段)。若程序具有高权限(如SETUID root),攻击者可能借此获取系统控制权。 - 通俗讲解:就像你让打印机打印一句话,结果打印机不仅打印了内容,还偷偷改了你的笔记本数据。黑客利用这个“漏洞”,通过精心构造的输入,让程序执行他们自己写的恶意代码,就像让程序“听黑客的话”,从而搞破坏或窃取信息。
- 重点:
%n
格式符的风险、内存重写机制、高权限程序的攻击后果。
(二)返回libc攻击
- 知识点:当栈被设置为不可执行时,攻击者可通过修改函数返回地址指向
libc
库中的函数(如strcpy
),利用该函数将恶意代码复制到可执行的数据段并执行。攻击过程需重写栈中的返回地址、伪造参数(源地址和目的地址),使恶意代码在数据段运行,获取程序权限。 - 通俗讲解:好比黑客想进房间,但房门上了锁(栈不可执行)。于是黑客找到一把“备用钥匙”(
libc
库中的函数),用这把钥匙打开另一个门(数据段),把自己的“工具”(恶意代码)放进去,然后让程序去执行这些工具,从而控制程序。 - 重点:栈不可执行场景下的攻击绕过、
libc
库函数的利用、数据段执行恶意代码的流程。
(三)攻击后果与防御背景
- 知识点:两种攻击均可能使攻击者获取程序权限,若程序为高权限(如root),可导致系统被入侵(如创建root shell、植入僵尸程序)。现代CPU(如奔腾)支持设置栈为非执行权限,但部分操作系统不支持。
- 通俗讲解:如果你的程序有“管理员”权限,黑客攻击成功后就像拿到了“管理员钥匙”,能在你的系统里为所欲为,比如偷偷打开后门、让你的电脑成为“僵尸”去攻击别人。而有些电脑虽然有“防贼锁”(栈不可执行),但系统可能没启用,给了黑客可乘之机。
- 重点:高权限程序的攻击危害、硬件与系统的防御支持差异。
二、知识点对比表格
知识点 | 核心原理 | 攻击条件 | 典型场景 | 重点防御思路 |
---|---|---|---|---|
格式化字符串攻击 | %n 格式符写入字符数到变量,利用用户可控的格式化字符串重写栈内存(如返回地址) | 用户可输入格式化字符串;程序未过滤危险格式符 | 含用户输入的格式化输出场景(如日志、交互界面) | 过滤%n 等危险格式符;限制用户输入内容 |
返回libc攻击 | 通过修改返回地址指向libc 库函数(如strcpy ),利用该函数将恶意代码复制到可执行数据段执行 | 栈不可执行;存在可利用的库函数(如strcpy );可控制函数参数 | 栈不可执行但库函数可被调用的场景 | 设置栈为非执行权限;启用地址随机化;减少库函数滥用 |
写作不易,希望以上内容能对大家学习操作系统有所帮助。如果觉得文章有用,欢迎关注我的博客,点赞并留下你的评论,让我们一起在技术学习的道路上共同进步!