【发布时间】:2021-10-14 01:43:30
【问题描述】:
void deal_msg(unsigned char * buf, int len)
{
unsigned char msg[1024];
strcpy(msg,buf);
//memcpy(msg, buf, len);
puts(msg);
}
void main()
{
// network operation
sock = create_server(port);
len = receive_data(sock, buf);
deal_msg(buf, len);
}
如上伪代码所示,编译环境为vc6,运行环境为windows xp sp3 en。没有应用其他保护机制,即堆栈可以执行,没有 ASLR。
发送数据为'A' * 1024 + addr_of_jmp_esp + shellcode。
我的问题是:
-
如果使用
strcpy,则shellcode由msfvenom生成,msfvenom -p windows/exec cmd=calc.exe -a x86 -b "\x00" -f python, msfvenom 尝试使用 x86/shikata_ga_nai 的 1 次迭代对有效负载进行编码 发送数据后,没有弹出计算,exploit 将无法工作。 但是如果使用memcpy,则msfvenom -p windows/exec cmd=calc.exe -a x86 -f python生成的shellcode没有编码就可以了。 -
calc弹出后如何避免原程序崩溃,如何保持栈平衡避免崩溃?
【问题讨论】:
标签: stack memcpy buffer-overflow exploit