bjdctf r2t3 onegadget
没错,这就是一篇很水的随笔。... 两道很简单的题,先来看第一道。r2t3,保护检查了一下是只开启了堆栈不可执行。 简单看一下ida的伪代码。 main函数让你输入一个name,然后会执行一个name_check的函数,可以看到v3是int8类型的。这里可以进行整数溢出。 Int8, 等于Byte, 占1个字节. Int16, 等于short, 占2个字节. -32768 32767 Int32, 等于int, 占4个字节. -2147483648 2147483647 Int64, 等于long, 占8个字节. -9223372036854775808 9223372036854775807 这样, 看起来比short,int,long更加直观些! 另外, 还有一个Byte, 它等于byte, 0 - 255. 所以说这里的v3是占一个字节的,一个字节是由8位二进制决定的。 例如:0000 0000 就是一个字节,代表0,1111 1111 也是一个字节,代表255. 如果1111 1111再加1呢?结果就是0000 0000了,但是这只是显示了一个字节,其实再计算机里面会溢出,前面会进行进位操作,可以看到这里有个判断就是判断v3的长度,必须是在(3,8]这个区间内,满足这个容易,但是就溢出不到返回地址,要想溢出到返回地址