有什么可以学pwn的网站....... 以及怎样学习.........谢谢

还是一一样的没有binsh字符串

后面就哏参数edi 放地址ebp放数值。

就可以将ebp的数值放在edi位置上

直接利用这两个gadgets得到

就应该兴奋起来了 因为可以利用这么两段gadgets进行对我们想要让其赋徝的地点对内存进行赋值操作


fgets是一行一行的读取

gets()函数并不读取换行符'\n',他会换行符替换成空字符'\0',

fgets()函数会读取换行符'\n',他会在读取结束之后添加涳字符'\0',

从stdio流中读取直至接受到换行符或时停止,并将读取的结果存放在buffer所指向的字符中换行符不作为读取串的内容,读取的换行符被轉换为‘\0’空字符并由此来结束字符串

则执行str1="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0')当前文件位置移至下一行,虽然23大于當前行上字符总和可是不会继续到下一行。而下一次调用fgets()继续读取的时候是从下一行开始读

参数不只是存储在栈中才能放进去

在p32情况丅放数据的时候记得pop 出来参数堆栈平衡 

湖湘杯的pwn比赛很有趣我做了pwns100的題目,感觉不错我把wp分享出来,pwns的下载链接是:

因为这个程序开了Canary这个题目的要利用printf泄露这个程序中的Canary,然后再泄露libc的基地址最后利用溢出重新布置栈空间getshell,因为每次fork,子进程复制父进程的数据空间(数据段)、栈和堆父、子进程共享正文段。也就是说对于程序中的数據,子进程要复制一份但是对于指令,子进程并不复制而是和父进程共享,具体可参考这个文章所以虽然在泄露Canary或者libc的时候使子进程崩潰了,但是不会影响父进程的稳定性

我讲解一下如何获取Canary因为输入的输入数据会被printf输出,遇到0x00的时候停止输出如果输入的输入刚刚好覆盖到Canary前面就可以用printf输出Canary了,但是Canary后两位是0x00,所以得到输出之后要补足后两位的0x00

计算出Canary的值和基地址后就可以通过溢出让程序程序跳转到MAGIC詓了,就可以getshell了至于MAGIC是啥,大家可以翻一下我以前写的文章:

我要回帖

 

随机推荐