一个面试题 当时看的时候,第一时间有点懵 可能思考到底有没有涉及逆向

前置知识

  • ASLR

Address space layout randomization是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。

故需要先检查程序是否开启了ASLR https://github.com/NetSPI/PESecurity

image.png

流程

  • 在代码区段中创建新的节头,或在内存中找到合适的位置植入我们的Shell代码
  • 在程序执行开始时从堆栈中复制操作码。
  • 将这些指令替换为我们自己的操作码,以将应用程序的执行流劫持到内存中的所需位置。
  • 将shellcode添加到该内存位置。
  • 将寄存器设置回第一步中复制的堆栈,以正常执行流程。

具体实现参考

shellcode注入exe.pdf

总结

  1. 检测程序是否开启ASLR保护机制
  2. 在代码区段中创建新的节头
  3. 劫持原程序的执行流程,指向放置shellcode的代码的新增.demo部分,JMP过去
  4. 然后跳转回原程序执行位置

工具技术利用

https://www.t00ls.cc/viewthread.php?tid=57068&highlight=%E6%8F%92%E4%BB%B6

https://github.com/m0ngo0se/Peinject_dll