在群里看到大佬分享一篇文章《ret2pwn》,文章链接:Process Injection without Write/Execute Permission | Ret2Pwn (xret2pwn.github.io)
作者利用VirtualAlloc函数和WriteProcessMemory函数及VirtualProtect函数,介绍了ret2pwn进程注入的方法.
VirtualAlloc
WriteProcessMemory
VirtualProtect
ret2pwn
首先是用VirtualAlloc函数申请一块可读可执行但不可写的内存空间,然后利用WriteProcessMemory函数进行写入,而关于WriteProcessMemory函数,对于当前进程的可访问区域,只要该区域不被占用,那么就可以利用此函数进行内存写操作(参考MSDN: WriteProcessMemory function (memoryapi.h) - Win32 apps | Microsoft Docs),所以这种方法成功。
然后是用VirtualProtect函数将申请空间改为只读权限,此过程要求关闭DEP,所以也成功了。
根据以上思路,结合傀儡进程技术思想和代码自修改SMC技术思想 实现了在当前进程空间,使用VS2019默认编译选项(保护全开)进行编译,将shellcode写入程序代码段,期间不需要任何页面保护属性的修改,且执行成功。
具体实现步骤如下:
首先用msf生成shellcode
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课