pwn学习:pwnable.kr flag

Day 4: Study pwn via pwnable.kr——collision


写在前面: 记录自己的学习过程,从零开始。。。第 100b 天!!!

首先分析文件

pwn学习:pwnable.kr flag

在这里呢我们发现文件是ELF格式的,依次可以判断文件是被压缩的了。这里使用upx -d指定对文件进行解压,之后进行调试。

使用gdb调试程序

pwn学习:pwnable.kr flag
pwn学习:pwnable.kr flag

这里我们可以看出在main + 13的这条指令使用了一个puts命令,我们可以先运行到这一行查看程序到底打印了什么有用信息。

pwn学习:pwnable.kr flag

我们使用next 3,到达偏移为3的指令所在行。可以看出这里打印了一条信息。依据信息可以推断出flag将会存储在程序中,由malloc方法进行分配内存。之后flag将会被拷贝到到该内存处。

pwn学习:pwnable.kr flag

接着,查看汇编代码,定位malloc和copy函数。可以看出程序使用了两次call指令,第二条就是copy指令。由传递的参数可以推断出rsi中存储的就是flag对应的字符串地址。

pwn学习:pwnable.kr flag
pwn学习:pwnable.kr flag

运行到此处,然后查看内存。得到flag

mark!