-
-
[翻译]第二部分:Linux 格式字符串利用
-
2019-5-24 19:52
5748
-
第二部分:Linux格式字符利用
首先感谢大家阅读我们的Linux漏洞利用教程系列的第一部分。同时再次感谢Kyuzo花时间与我们分享他的知识!在这一部分中,我们将再次讨论格式字符串的开发利用。格式字符串的漏洞通常发生在程序员想要打印出用户控制的函数,但不清楚用户输入,从而允许恶意攻击者注入自己的格式说明符。这反过来又允许恶意攻击者读写任意内存。
在我自学格式字符串利用基础知识的过程中,我阅读了两个优秀的资源:(1)利用格式字符串漏洞【scut/team Teso - 2001】和(2)格式字符串利用的进展【gera&riq/Phrack - 2002】。我在下面列举了这两种资源的链接,并强烈推荐它们作为背景阅读。
在讲好东西之前,我想提一下默认情况下,gdb
不能操作AT&T语法中的汇编码,对于我们这些已经完成了Windows开发利用的人来说,这有点令人困惑。幸运的时,你可以使用以下命令轻松改变这种状况。
set disassembly-flavor intel
set disassembly-flavor att
资源:
格式字符串利用的进展(通过gera&riq):链接 介绍:
几个月前,b33f和我一起组织额一个关于软件开发的研讨会,将在大学活动中展示。研讨会有两个主要思想:(1)处理非缓冲区溢出漏洞利用;(2)讨论Windows和Linux。因此,我列出一系列不是特别迷人但却更深奥的漏洞列表(!)其中我们就包含有格式字符串,因为在过去几年里,就Linux而言,格式字符串非常重要。举其中一例,在2012年初发布的sudo,在sudo_debug函数中存在格式字符串缺陷,该缺陷随着Fedora和OpenSUSE等主流发行版一起发布。
研讨会结束后,我答应b33f将会为FuzzySecurity贡献一些材料,几个月后,我终于下定决心制作一些关于格式字符串利用的视频。
视频教程第一部分中使用的示例代码:
/* example.c
*
* $ gcc -o example example.c
* $ execstack -s example # make stack executable
*/
#include <stdio.h>
int main() {
int a = -5;
float b = 5.5;
char *c = "My String";
printf("A = %d, B = %f, C = %s\n", a, b, c);
}
视频教程的第一部分和第二部分使用的示例代码:
/* fmt.c - sample program vulnerable to format string exploitation
*
* $ gcc -o fmt fmt.c
* $ execstack -s fmt # make stack executable
*/
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
char b[128];
strcpy(b, argv[1]);
printf(b);
printf("\n");
}
格式字符串漏洞利用教程:
第一个视频介绍了什么是格式字符串,以及它们如何导致信息泄露(一些主题包括:转换说明符用法和直接参数访问)。
第二部分向前推进了一步,展示了如何利用神秘的格式字符串功能的程序,例如神秘的%n转换说明符!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工
作,每周日13:00-18:00直播授课
最后于 2019-5-27 13:15
被Liary编辑
,原因: