)
本人也是在自学过程主要目的也是记录学习过程有些地方做的不太好都是按照自己理解进行讲解的不专业欢迎大家指出问题今天学到整数溢出了所以就来练练这种题但是不知道今天为啥buuctf里没办法下载文件了所以就在BugkuCTF找了一道题来做此处我将文件命名为easy_intchecksec easy_int 查看一下保护机制可以看到这是一个64-bit的文件只有NX保护开启了将文件拖入ida64按F5将汇编代码转换成c语言代码得到我们可以看到此处让我们输入一个数NUM如果NUM0并且NUM取相反数后仍然小于0就可以进入vuln()函数。NUM是一个int型取值[-2**31,2**31-1]所以如果我们让NUM -2147483648那NUM -NUM → -(-2147483648) 发生溢出32位int无法表达 2147483648溢出后结果依然是 -2147483648这样我们就可以进入vuln()可以看到vuln()里存在明显的 read(0LL, v2, 256LL)栈溢出我们利用这个将返回地址覆盖成我们的ROP链回到虚拟机ROPgadget --binary easy_int --only pop|ret得到pop_rdi_ret 0x401343ret_addr 0x40101agdb easy_intb *0x4011e4在read处下断点r-2147483648nAAAAAAAAstack 24可以看到我们输入的数据距离rbp0x30-0x10)0x20字节再加上0x8字节至return addressqnano exp.pybin_sh是在ida里得到的按shiftF12双击/bin/sh得到第一次send发生整数溢出第二次send发生栈溢出构造ROP链保存退出python3 exp.pycat flag得到flagflag{3f4fa6b09422e4be88ebc33ac9e3500b}此题完