pwnable 笔记 Toddler's Bottle - passcode

简单的got覆写

题目

这里写图片描述

用ssh连接一下

这里写图片描述

运行一下passcode

这里写图片描述

竟然发现错误。。
可以发现需要输入 name passcode1 passcode2

再查看一下源代码

这里写图片描述

这个题一共有两个函数welcome()和login()
welcome中输入了name,并且字符串大小是100
login中输入了pass code1 和passcode2
在passcode1=338150(0x528E6)并且passcode2=13371337(0xCC07C9)的时候返回shell,得到flag。

从源代码中可以看出,使用scanf()函数时没有加地址符号&

通过代码可以看到在执行了welcome函数后立即执行了login函数,中间没有压栈弹栈操作,也没有开alsr等保护,因此二者的ebp是相同的。

先看一下函数

main函数

直接看汇编看不懂 用下peda

在welcome函数下一个断电 分析一下main函数

welcome函数

在这个地址中输入得%100s 明显是name 大小100

所以下面的edx就是name的地址了 ebp-0x70

继续进入login函数

login函数

由这也发现login和welcome函数的ebp是一样的

这里写图片描述

又到了scanf函数

那么ebp--0x10 就是passcode1的地址

继续运行
程序崩溃了
scanf没有加地址符号说明passcode1指向了一个不可写的地址

通过计算可以知道,name 与 passcode1 的地址相差 96 个字节(0x70 - 0x10 = 96,而我们可以控制的 name 刚好能够到 100 个字节,也就是说,我们刚好能够控制 passcode1 的值

看一下login函数调用了哪些函数

这里写图片描述

我们们可以把 name 的最后四个字节写成 plt 中 printf fflush exit函数的地址,然后在输入 passcode1 时输入调用 system 函数的地址,即 0x080485e3
注意函数调用前还有给参数赋值等初始化操作

又因为scanf的时候用的%d所以要把system的地址转换成十进制

1
payload = a’*96 +‘\x00\xa0\x04\x08’+’134514147\n
1
python -c "print 'A' * 96 + '\x00\xa0\x04\x08' + '134514147\n'" | ./passcode

FLAG: Sorry mom.. I got confused about scanf usage :(


科普
0x01.GOT和PLT表简介

GOT表:
概念:每一个外部定义的符号在全局偏移表(Global offset Table )中有相应的条目,GOT位于ELF的数据段中,叫做GOT段。
作用:把位置无关的地址计算重定位到一个绝对地址。程序首次调用某个库函数时,运行时连接编辑器(rtld)找到相应的符号,并将它重定位到GOT之后每次调用这个函数都会将控制权直接转向那个位置,而不再调用rtld。

PLT:过程连接表,一个PLT条目对应一个GOT条目
当main函数开始,会请求plt中这个函数的对应GOT地址,如果第一次调用那么GOT会重定位到plt,并向栈中压入一个偏移,程序的执行回到_init()函数,rtld得以调用就可以定位printf的符号地址,第二次运行程序再次调用这个函数时程序跳入plt,对应的GOT入口点就是真实的函数入口地址。
动态连接器并不会把动态库函数在编译的时候就包含到ELF文件中,仅仅是在这个ELF被加载的时候,才会把那些动态函库数代码加载进来,之前系统只会在ELF文件中的GOT中保留一个调用地址。
http://www.programlife.net/linux-got-plt.html
http://blog.csdn.net/lmh12506/article/details/6801630
这里面有详细的介绍linux的got和plt

0x02.gdb常用调试指令

https://deepzz.com/post/gdb-debug.html

参考:
http://www.cnblogs.com/p4nda/p/7122094.html
https://blog.csdn.net/qq_20307987/article/details/51303824
https://chybeta.github.io/2017/04/08/Pwnable-kr-passcode/
https://www.jianshu.com/p/886a7b8c2ad5
https://www.google.com/search?q=got%E8%A1%A8%E8%A6%86%E5%86%99+ctf&oq=got%E8%A1%A8%E8%A6%86%E5%86%99+ctf&aqs=chrome..69i57.14403j0j7&sourceid=chrome&ie=UTF-8

×

纯属好玩

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

文章目录
,