叠个甲
若出现描述错误,理论错误,或题解错误等欢迎指正
栈溢出原理
栈溢出是指在有限栈空间内存入过大的数据,导致溢出的数据可能会覆盖掉栈空间以外的数据,导致代码执行出错,或泄露受保护的信息等。对于输入时若不进行输入检查,则极易容易造成栈溢出,常见的栈溢出可能发生在gets()
read()
等输入函数。因此做题时注意这些函数的出现。
实操
题目来源:[buuctf](BUUCTF在线评测 (buuoj.cn))
1.test_your_nc
下载后拖入ida中
nc后直接得到shell
2.rip
拖入ida后查看main 发现gets(s,argv)
控制在此处的输入发生栈溢出。
检查数组s
大小为0XF字节,再加上8个字节的偏移量控制返回,之后在检查后门函数。
发现后门函数,只要控制函数在0X40118A处返回即可得到shell
exp:
1 | from pwn import* |
3.warmup_csaw_2016
老规矩,拖入ida
发现gets(v5)
检查v5大小
0x40个字节,算上8个控制返回值的偏移量,在检查有无后门函数
发现后门函数,控制函数返回到0x400611即可,与上题不同的是,本题跑通直接得到flag
exp:
1 | from pwn import* |
总结
1.找到可能会引发栈溢出的函数
2.计算偏移量
3.找到后门函数地址,以便得到shell or flag
4.控制函数返回到后门函数的位置