32位程序执行64位shellcode

32位程序可利用段跳转执行64位shellcode
(win32也可执行win64位的shellcode cs:eip cs在x32下为0x23,在64位下为0x33)

1、shellcode如下

段跳转-1.png

执行6140863,修改CS为0x33,随后返回。

段跳转-2.png

返回以后,代码变成了64位代码


段跳转-3.png

随后执行NtCreateThreadEx, 参数分布如下:根据 fastcall 调用约定,前四个参数由寄存器传递( RCX、RDX、R8、R9),其他参数由 RSP+0x20 开始压栈,所以可以看出线程函数地址为020f0000

NTSTATUS NtCreateThreadEx(
  PHANDLE               ThreadHandle,
  ACCESS_MASK           DesiredAccess,
  POBJECT_ATTRIBUTES    ObjectAttributes,
  HANDLE                ProcessHandle,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID                lpParameter,
  BOOL                  CreateSuspended,
  SIZE_T                StackZeroBits,
  SIZE_T                SizeOfStackCommit,
  SIZE_T                SizeOfStackReserve,
  LPVOID                lpBytesBuffer
);
段跳转-4.png

找到对应的进程ID,线程函数为020f0000,windbg 调试即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容