码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ARM pwn 入门 (2)


    上一篇文章中笔者对ARM架构的寄存器和指令集做了简单的介绍,本文就来首杀ARM pwn题。

    buuoj 第139题 jarvisoj_typo

    这一题是静态编译的程序,对于ARM可执行文件,在x86架构的虚拟机上可以使用qemu-arm ...来执行。

    我们首先来执行看一下这个程序有什么输出。

    在程序一开始输出了一段字符串,我们可以在IDA中用Shift+F12来查看elf文件中所有硬编码的字符串:

    然后根据交叉引用找到该字符串被引用的位置:

    根据程序的输入,我们可以猜测出其中一部分库函数,如这里的write、getchar等。看上去这是一个正常的输入程序,一个typing test,如果输入的内容和程序输出相同就会继续输出一个单词等待用户输入,否则输出error。

    这里可以推测sub_8D24是关键输入函数。

    这里的input应该就是输入的缓冲区,我们需要进行调试确定到底是哪一步执行了读取用户输入的操作:qemu-arm后加-g选项指定端口,就可以通过gdb-multiarch进行调试。经过调试发现上图中的read函数就是读取的函数,且最大读取大小为512字节,这明显就造成了栈溢出。

    从上图可知,覆盖返回地址需要先输入0x70字节。在elf文件中可以发现字符串/bin/sh:

    引用字符串/bin/sh的函数就是system函数。因此我们可以找到system函数的地址为0x10BA8。需要注意ARM架构函数的调用约定:前4个参数保存在R0~R3,之后的参数从右至左压栈。因此要想执行system("/bin/sh"),就需要将寄存器R0的值修改为字符串'/bin/sh'的地址,返回地址可以通过栈溢出直接修改。考虑到这是一个静态编译的文件,很容易就可以想到使用一个简单的ROP来实现寄存器修改操作。

    找到合适的ROP地址为0x20904,可以在修改寄存器R0的值之后修改PC的值。现在可以编写exp了。

    from pwn import *
    context.arch='arm'
    context.log_level='debug'
    
    io = process(['qemu-arm-static', './typo'])
    io.sendafter(b'quit\n', b'\n')
    io.send(cyclic(0x70) + p32(0x20904) + p32(0x6c384) + p32(0) + p32(0x10ba8))
    
    io.interactive()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    成功getshell。这题看来不难,只是一个简单的不能再简单的ROP。

  • 相关阅读:
    MySQL | 行锁——记录锁、间隙锁 、临键锁、插入意向锁
    图像处理之空域内的滤波复原[均值滤波、顺序统计滤波和自适应滤波复原]
    边缘混合计算智慧矿山视频智能综合管理方案:矿山安全生产智能转型升级之路
    双指针解决数组问题(python)
    Go Context 原理详解
    html_语义化标签
    SaaS 营销怎么做?几点思考
    Linux-操作1(替换文本内容)
    医学影像图像去噪:滤波器方法、频域方法、小波变换、非局部均值去噪、深度学习与稀疏表示和字典学习
    基于STM32F103的HAL库手动配置FreeRTOS
  • 原文地址:https://blog.csdn.net/qq_54218833/article/details/127658611
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号