【发布时间】:2021-02-28 14:45:32
【问题描述】:
对于大学的安全课程,我需要通过仅数据漏洞执行 shell。
c 代码包含一个 strcpy() 语句,所以我可以用某个缓冲区的内存地址覆盖一个结构。假设这个缓冲区分配在0xbfffecfc
我需要通过命令行在这个缓冲区地址输入值 1 (0x00000001)。这通过 strcpy() 函数直接写入0xbfffecfc
我已经试过了
python -c 'print "\x01\x00\x00\x00"
但这不起作用,因为\x00 字节终止了输入。
如何将这个值 1 放入缓冲区?
【问题讨论】:
-
你不能使用
strcpy,它用于NUL终止的字符串。你可能需要memcpy虽然我不太确定你在问什么;也许你应该展示你提到的那段代码。 -
不,
strcpy()永远不会写入超过一个值为0的单个字节。从不。 -
是的,我明白了,但是是否有另一种方法可以通过 strcpy() 在该内存地址中获取 0x00000001?也许要添加除 \x00 之外的另一个值,这不会将 1 的值更改为地址?
-
你不能通过一次调用
strcpy()来完成,但你可以多次调用,每次写入最终缓冲区的一部分。 -
strcpy(0xbfffecfc, ""); strcpy(0xbfffecfd, ""); strcpy(0xbfffecfe, ""); strcpy(0xbfffecff, "");
标签: c shell security command-line