buuctf pwn jarvisoj_level0题解

📅 2026/7/29 5:16:34
buuctf pwn jarvisoj_level0题解
本人也是在自学过程主要目的也是记录学习过程有些地方做的不太好都是按照自己理解进行讲解的不专业欢迎大家指出问题我在此处将文件命名为了pwn1先 file pwn1 一下可以看到为64-bitchecksec pwn1看一下保护机制可以看到stackNxPIE都没有开启将文件拖进ida64在左侧function name处找到main函数按F5将汇编代码转换成c语言代码此处可以看到vulnerable_function()受害者函数双击进入可以看到明显的漏洞char buf并且可以看到离栈底指针0x80也就是16*8128个字节不放心也可以进行一下动态调试不想看的宝子可以跳过)回到虚拟机gdb ./pwn1然后断点b main运行r此处指针指在0x4005ce处一直n回车直到指针指在vulnerable_function处输入s进入内部一直n回车直到此处的0x4005bf再n回车此时可以输入内容我在此处输入的AAAAAAAA然后回车输入stack 24现在就可以看到我们输入A的位置和栈底指针rbp的位置用虚拟机的python3可以计算得到128个字节输入q退出回到ida64在左侧我们可以明显看到callsystem函数双击进入这是一个 后门函数我们可以更改返回地址为这个后门函数ida64页面左下角有它的地址0x400596回到虚拟机nano exp.py开始写脚本大概框架其实就是这样在这里只介绍一下payload里的内容ba*128就是我们要填充的垃圾数据直到栈底指针处由于64-bit栈底指针是8个字节所以得再添加8个垃圾数据这两个可以合并成ba*136后面的p64(0x400596)就是我们刚刚得到的后门函数的地址将返回地址改为后门函数地址之后通过io.sendline(payload)发送攻击脚本最后io.interactive()完成交互保存退出python3 exp.py得到shellls可以看到一个flag.txt的文件cat flag.txt得到flag此题完