这个整数溢出是可利用的吗?如果答案是肯定的,我如何利用它?
char buffer[20];
int len = atoi(argv[1]);
if(len < 20)
memcpy(buffer,argv[2],len);如果我将len设置为-1,则应用程序会崩溃,因为要复制的字节数太长,并且存在分段错误。但是,是否有一种方法或方法来利用该漏洞?
发布于 2016-07-17 21:48:19
您不需要使用-1,任何大于20的值都将允许您溢出缓冲区。
它将取决于下一个指令和编译器设置的缓解,但从现在开始,您可能可以重写返回地址并执行作为第二个参数提供的shell代码。
发布于 2016-08-17 13:58:37
似乎没有人考虑到argv 1不是一个数字的可能性。如果您只是输入"this“作为第一个参数,则atoi返回0,并且您还可以溢出缓冲区,因为0< 20。在许多方面,atoi不是一个好的选择。最好使用strtol,它允许您检测输入错误。
发布于 2023-03-01 12:11:43
首先你有个窃听器。如果argv1 < 0,则将运行memcpy,并将该值作为一个巨大的size_t值传递给memcpy。
现在,您将检查如何处理该bug。您可以使用它从20亿到40亿字节之间的memcpy,这可能会使您的应用程序崩溃,而不会有任何损坏的机会。但是,您必须检查应用程序到底要做什么。
但崩盘可能会发生得更早。当字符串argv2耗尽数据时,可能会发生这种情况。如果该字符串的长度为28字节,则memcpy在复制28个字节后可能会崩溃。它可能覆盖main()、S返回地址和main()返回到攻击者选择的地址。
https://security.stackexchange.com/questions/130326
复制相似问题