
1.c与c++不检查输入的长度和类型
应用程序在获取输入的数据时,本来要获取10个,结果获取成12个,就发生溢出
如果输入的变量与程序返回值挨得很近,直接覆盖成我们要执行的a代码
2.什么是pwn
向目标发送特定的数据,使其执行我们发送的恶意代码
Web安全也是一样,比如xss,通过我们输入的xss代码获取用户信息
实际上就是程序没有对用户的输入信息进行严格的校验
3.pwn的基础知识
Ax:储存我们的计算结果和函数返回值
Bx:基址寄存器,存放访问内存的地址
Cx:计数寄存器,比如你要循环5次,你的cx里面就是5
Dx:数据寄存器,存放ro端的一个内存地址
SI:
DI:
Move a,b 从si赋值到di,存的是数据地址
状态标志:标志结果,比如是正数还是负数,还是错误
Cs:放代码
Ds:比如放全局变量
Ss:函数的局部变量
Es:其他段寄存器用光用它,用得比较少


地址从下往上看从高到底
保存寄存器现场:比如你在调用test函数时,可能这几个寄存器已经有值了,test函数也要用寄存器,于是先保存这些值
入栈都是往右入栈,参数321,接着

本文介绍了栈溢出的概念,指出C/C++语言在处理输入时未进行长度检查可能导致的安全问题。讨论了Pwn(利用溢出执行恶意代码)的原理,并列举了保护措施,如Relro、Stack、NX和Pie。还提到了如何使用gdb和objdump分析程序,并给出了pwntools在构造payload中的应用。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



