SeedLab:Web XSS
SeedLab:TCP/IP Attack
seedLab:returnToLibc
声明
该教程是根据Seed Lab: return-to-libc的实验要求所写的,该教程只是演示了一下return-to-libc的一些基本的攻击原理,由于关了编译器及系统的一些保护措施,所以并不能在实际的情况下实现攻击(′▽`〃)
一:背景介绍
DEP数据执行保护
溢出攻击的根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠向前兼容的修补来减少溢出带来的损害,DEP(数据执行保护,Data Execution Prevention)就是用来弥补计算机对数据和代码混淆这一天然缺陷的。DEP的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。DEP 的主要作用是阻止数据页(如默认的堆页、各种堆栈页以及内存池页)执行代码。所以一般的将shellcode存放到栈中并将shellcode执行的方式在这种机制中是不可行的。
在Linux中,通常在编译的时候添加 -fno-stack-protector -z noexecstack 编译选项就会开启该模式,在该模式下,不能像以前的攻击将恶意代码overflow进栈中,并将return地址指向恶意代码开始处,在这种情况下应该借用系统库的调用从而达到提权等目的。
Bomb
x86上的二进制炸弹对于反汇编的练习来说还是比较经典的,由于网上有很多该程序的讲解,所以在此我打算写一下arm平台上的二进制拆炸弹这个游戏。
环境的搭建
由于是arm平台的环境,所以需要在linux环境下安装一个模拟器,在此我选择了qemu该模拟器,具体操作如下(该操作对Ubuntu环境有效,其他linux版本可自行查找方法)
sudo apt-get install qemu-user
运行ARM指令集模拟器并运行开启gdbserver和运行bomb_1程序
qemu-arm -g 8009 bomb_1
其中,-g参数是为了添加调试信息,为了使远程gdb调试能够起作用,8009为自定义的端口号。
另外启动一个终端,通过命令远程开启gdb调试器并加载待调试程序。
arm-linux-gdb bomb_1
输命令来连接模拟器中的gdbserver
target remote localhost:8009
辅助工具IDA pro。IDA pro是一款静态分析的反汇编工具,利用它可以查看数据段的具体数据,用起来十分方便。