PWN to MIPS by the ROP

一个MIPS架构大端小程序,先checksec,没发现有金丝雀保护机制,可以用来栈溢出,用IDA分析一下,首先需要猜解一些字符串,限时三秒全部猜对后才会来到漏洞利用点:

sub_401070函数就是用来计算猜解时间差的,而sub_400B38函数就是造成栈溢出漏洞的地方:

进入sub_400B38函数,由于需要把1024个字节内容存放到v12代表的栈空间里:

这里由于v12只能合理存放28个字节内容,对于1024个字节来说是超过了存放空间,所以会造成栈溢出:

继续翻看汇编代码,发现存在system调用,参数还是/bin/sh,一般来说通过栈溢出把ra寄存器覆盖为0x400a98就可以直接利用成功,但是sub_400B38函数里遇到0a会停止读取,而0x400a98就包含0a,所以不可以直接利用,需要用到ROP技术来曲折调用:

在__libc_csu_init函数里就存在一块完美的构造ROP利用点的地方,一般先跳到蓝线圈起来的地方,再跳到红线圈起来的地方,32位mips函数调用传参前三个a0,a1,a2都可以完全控制,想调用的函数也可以自己设置,在jalr $t9调用完成后可以再次进入蓝圈,这又可以重复上面的步骤:

这里由于ELF文件的延迟绑定机制,在system函数没有被调用过的时候,GOT表中就不会写入system函数的实际地址,所以这里构造ROP先调用alarm函数,这个函数调用过程中对其他参数影响很小,在执行流再次进入蓝圈的时候调用plt中的system就可以成功利用了:

PWN成功后如下:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在这里给自己做个记录。今日在学习栈溢出,训练营给我们出了一道题让我们练习。 题目 解题记录 1. 分析文件 ile...
    飞熊先生阅读 1,246评论 0 0
  • 一个月的约定快要到了,疯狂补栈溢出知识,偷看大佬们博客,希望学到点什么。 栈溢出学习网站 CTF Wiki 栈溢出...
    杰_74阅读 557评论 0 1
  • pwntools简单语法 作为最好用的pwn工具,简单记一下用法: 连接:本地process()、远程remote...
    SueLyon阅读 24,571评论 3 37
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,610评论 28 53
  • 信任包括信任自己和信任他人 很多时候,很多事情,失败、遗憾、错过,源于不自信,不信任他人 觉得自己做不成,别人做不...
    吴氵晃阅读 6,232评论 4 8