文章预览
1. attachment(2字节shellcode) mmap分配0x1000的可读可写可执行的buf地址,然后read写入2个字节,执行buf。 gdb里看一眼。 可以看到call rcx,而rcx上就是buf,里面有我们写的AA。 进入buf之后是AA\x00\x00\x00\x00\x00\x00,所以这个题本质上就是2字节的shellcode。AA到底应该填什么呢?IDA上已经提示的很明显了。 显然是call read,但call read没法2个字节,所以答案是系统调用syscall,看下此时的寄存器对不对。 rax = 0 x0; read的系统调用号 rdi = 0 x0; 第一个参数 rsi = buf; 第二个参数 rdx = 0 x500; 第三个参数 很完美,此时已进入buf执行,第二次read重写buf,然后继续执行syscall后面的shellcode。所以第二次read的时候要注意下shellcode填充几个NOP就行。以及用send()不能用seadline() #!/usr/bin/env python from pwn import * context.log_level = 'debug' con
………………………………