https://ift.tt/2IAZYd2 练习目的 准备工作 开始 固件提取和架构确认 使用binwalk提取固件 确认程序语言架构 查找漏洞 拷贝qemu 二进制文件 使用qemu 创建远程模拟环境 运行gdb,设置语言框架和远程调试端口 设置框架语言 链接到远程调试端口 使用pattern ,创建300个字符串用于查找溢出点 重启qemu,以生成的字符串作为参数运行 打开gdb,运行,查找溢出点 使用pattern search 确认溢出点的位置 确认dat_shell函数的地址 pwn! 练习目的 练习提取智能硬件的固件 熟悉mips汇编 复习简单的漏洞利用 准备工作 下载练手固件 确认安装好qemu 扩展gdb gef或者peda,pwndbg都行 开始 固件提取和架构确认 使用binwalk提取固件 确认程序语言架构 查找漏洞 通过阅读源码我们发现,这只是一个非常简答的缓冲区溢出 我们要做的就是溢出ra地址,覆盖返回地址为dat_shell函数的地址 拷贝qemu 二进制文件 cp $(which qemu-mipsel-static) . 使用qemu 创建远程模拟环境 sudo chroot . ./qemu-mipsel-static -g 1234 ./pwnable/Intro/stack_bof_01 运行gdb,设置语言框架和远程调试端口 设置框架语言 set architecture mips 链接到远程调试端口 target remote 127.0.0.1:1234 使用pattern ,创建300个字符串用于查找溢出点 重启qemu,以生成的字符串作为参数运行 打开gdb,运行,查找溢出点 通过上图可以得知,在ra处的返回地址发生了错误 使用pattern search 确认溢出点的位置 从上图可以看出,在204个字节的地方发生了溢出,也就是说可以从204个字节后填充要跳转的地址,接下就就是确认要跳转的函数的地址 确认dat_shell函数的地址 上图可以看到,前3条指令都有全局变量有关,而我们并不想动gp相关的指令,因此使用 0x0040905c 作为跳转地址 pw...