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 调试即可。
网友评论