NULL-Free-Shellcode
题目简介
这道题说了,会将输入的内容当作代码来执行,但是会对输入的内容做一些限制
漏洞点分析与利用
这道题给了源码,也没有什么easy和hard区分,因此主要记录一个trick,即如何清除shellcode里的0x00字节
漏洞点简单介绍一下,看源代码中,留了4096个字节读取我们的输入,然后执行过滤逻辑,遇到0x00就会退出
那么如何清除0字节?根据0字节的来源有2种方法:
1 对寄存器赋值0时会产生0字节,因此避免直接使用mov指令将寄存器清零,而应该使用xor指令
2 对寄存器赋值一个较小的数字会产生0字节,因此对寄存器赋值时,如果目标值很小,需要采用先把操作数push进栈,再pop出栈到寄存器的方法<br
有了上面的理论,就很好构造shellcode了:
1 | |
解释一下第一行传flag字符串参数为什么要这么写,首先/flag只有5个字节,会产生0字节,所以用斜线(即2f)填充,但这样会导致打开文件失败,所以当复制完成后,通过右移指令把多余的2f移丢即可
NULL-Free-Shellcode
http://0x4a-210.github.io/2025/07/19/pwn.college/Intro-to-Cybersecurity/Pwn/NULL-Free-Shellcode/