欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jarvisoj pwn level系列

程序员文章站 2022-07-15 15:38:01
...

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

jarvisoj pwn level系列
拿到程序后先file可知为64位程序和动态链接
cheksec一下检查保护机制
jarvisoj pwn level系列
我们能看到这个玩意,可以看到是一个只开启了NX的64位linux程序。
Stack:栈保护
RELRO:让程序到处跑,不固定
stack:栈上面的保护
NX那里是不让你改栈上面的东西
PIE不让你知道程序在哪
当然,这是便于理解的说辞
下面是标准解读(直接贴图了)
jarvisoj pwn level系列
接下来,拖进IDA里面去看看
(这里有些小白可能会错愕,为啥自己的IDA里面没有那一堆堆的数据,右键 test view 就有了)
看看main函数
jarvisoj pwn level系列
这个vulnerable_function看上去很可疑啊,我们点进去看看
jarvisoj pwn level系列
可以看到vulnerable_function中调用了read(0,buf,0x200),其中buf的位置是rbp-0x80,从标准输入(fd=0)读取的字符长度为0x200,这样就造成了栈溢出。
将简单就是200位的东西写到了80里面多出来了就溢出了
所以我们看看这个buf
jarvisoj pwn level系列
jarvisoj pwn level系列
1-80 ,16进制
然后shift F12可以找一下比较关键的/bin/sh
(这里有同学可能一直按但都是调光亮,这是esc+fn,解除fn的锁定就可以使用了)
jarvisoj pwn level系列
然后点开他,
jarvisoj pwn level系列
callsystem,有没有想到刀剑(笑)
jarvisoj pwn level系列
这一行对应的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()

jarvisoj pwn level系列这样就OK了

相关标签: ctfnew