linux shellcode技术
第9章 Linux shellcode技术
中国科学技术大学
曾凡平
billzeng@ustc.edu.cn
Linux shellcode技术
• 缓冲区溢出攻击面临的3个问题:
(1)返回地址在攻击串的位置;
(2)返回地址的值;
(3)编写shellcode 。
• 编写shellcode要用到汇编语言。x86 的汇编语法
常见的有AT&T 和Intel 。
• Linux 下的编译器和调试器使用的是AT&T 语法(mov
src, des)
• Win32 下的编译器和调试器使用的是Intel 语法(mov
des, src)
Linux shellcode 2
主要内容
• 9.1 Linux IA32 中的系统调用
• 9.2 编写Linux IA32的shellcode
9.2.1 编写一个能获得shell的C程序
9.2.2 用系统功能调用获得shell
9.2.3 从可执行文件中提取出shellcode
• 9.3 Linux IA32本地攻击
9.3.1 小缓冲区的本地溢出攻击
9.3.2 大缓冲区的本地溢出攻击
• 9.4 Linux IA32 远程攻击
Linux溢出攻击 3
9.1 Linux IA32 中的系统调用
• Linux系统中的每一个函数最终都是由系统调用
实现的,观察例程1 (exit.c) 的执行过程就可以验
证这一点。
• 例程1:exit.c
#include
#include
void main()
{
exit(0x 12);
}
Linux shellcode 4
编译、运行、跟踪程序
• 编辑该程序并执行:
/bin$ gcc -o e ../src/exit.c
/bin$ ./e
/bin$ echo $?
18
• 为了观察程序的内部运行过程,用gdb跟踪其执
行过程。
/bin$ gdb e
GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-
2012.04
Linux shellcode 5
• (gdb) disas main
Dump of assembler code for function main:
0x080483d4 : push %ebp
0x080483d5 : mov %esp,%ebp
0x080483d7 : and $0xfffffff0,%esp
0x080483da : sub $0x 10,%esp
0x080483dd : movl $0x 12,(%esp)
0x080483e4 : call 0x8048300
End of assembler dump.
Linux shellcode 6
• exit最终会调用_e