pwnable.kr-bof
。Nana told me that buffer overflow is one of the most common software vulnerability.
Is that true?
Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c
Running at : nc pwnable.kr 9000
将 bof 文件下载下来,用 file 命令查看一下,可以看到是一个32位的 ELF 可执行文件,拖到 Ubuntu 中进行调试。
简单运行发现程序需要我们输入一些字符串,根据提示可以知道此题需要进行溢出。直接抄起 gdb 调试之。尝试直接使用 b main 在主函数处设置断点。
r 开始运行,程序断在了主函数入口处,使用 n 进行单步跟踪,当走到 0x8000069a 处时,程序 call 0x8000062c 调用了 0x8000062c 处的函数,直接 s 单步进入继续跟。
当走到 0x8000064c 程序将寄存器 eax 的值 0xbffff55c 压入栈,随后进行 call 0xb7e78cd0 <_IO_gets>,此处为 c 语言中的 gets() 函数调用,最终 0xbffff55c 会指向用户输入的字符串。这里使用peda中的 pattern create 64 创建一个64字节的测试 payload 将其输入到程序中,方便后续调试。
输入完字符串后,程序停在了 0x80000654 进行了一个简单的比较操作 cmp DWORD PTR [ebp+0x8],0xcafebabe,比较 DWORD PTR [ebp+0x8] 处的值是否等于 0xcafebabe,而此时的 DWORD PTR [ebp+0x8] 地址为 0xbffff590,回顾一下刚刚指向用户输入字符串的地址 0xbffff55c。输入的字符串地址处在一个低地址上,如果输入足够长的字符串,就能够覆盖到后面 0xbffff590 处的值。
当比较成功时,程序不会发生跳转,调用 call 0xb7e54190 <__libc_system>,而其参数为 /bin/sh,如下图。
理清过程后,剩下的就只需要找到输入字符串指针距离 0xbffff590 的偏移即可。由于之前使用了特殊的 payload,这时候我们查看一下输入字符串周围的堆栈情况。
可以看到刚才输入的 payload 已经覆盖到了 0xbffff590 处的值,但是并不是程序需要的 0xcafebabe,使用 pattern offset 来计算偏移。
可以看到,0xbffff590 距离字符串开头的偏移为52个字节,因此为了成功地使程序跳转执行system(“/bin/sh”),我们构造的输入字符串就应该为:
"A" * 52 + "\xbe\xba\xfe\xca"
此时,直接使用命令行远程打 payload:
(python -c 'print "A" * 52 + "\xbe\xba\xfe\xca"'; cat -) | nc pwnable.kr 9000
pwnable.kr-bof的更多相关文章
- pwnable.kr bof之write up
这一题与前两题不同,用到了静态调试工具ida 首先题中给出了源码: #include <stdio.h> #include <string.h> #include <st ...
- 【pwnable.kr】bof
pwnable从入门到放弃,第三题. Download : http://pwnable.kr/bin/bofDownload : http://pwnable.kr/bin/bof.c Runnin ...
- pwnable.kr之bof
打开题目: 先下载题目给我们的两个文件,查看文件信息: 发现没有执行的权限,所以先增加文件bof的执行权限,执行: 没发现啥,然后查看代码, #include <stdio.h> #inc ...
- pwnable.kr第三题bof
Running at : nc pwnable.kr 9000 IDA查看 1 unsigned int __cdecl func(int a1) 2 { 3 char s; // [esp+1Ch] ...
- pwnable.kr第二天
3.bof 这题就是简单的数组越界覆盖,直接用gdb 调试出偏移就ok from pwn import * context.log_level='debug' payload='A'*52+p32(0 ...
- pwnable.kr的passcode
前段时间找到一个练习pwn的网站,pwnable.kr 这里记录其中的passcode的做题过程,给自己加深印象. 废话不多说了,看一下题目, 看到题目,就ssh连接进去,就看到三个文件如下 看了一下 ...
- pwnable.kr col之write up
Daddy told me about cool MD5 hash collision today. I wanna do something like that too! ssh col@pwnab ...
- pwnable.kr brainfuck之write up
I made a simple brain-fuck language emulation program written in C. The [ ] commands are not impleme ...
- pwnable.kr login之write up
main函数如下: auth函数如下: 程序的流程如下: 输入Authenticate值,并base64解码,将解码的值代入md5_auth函数中 mad5_auth()生成其MD5值并与f87cd6 ...
- pwnable.kr详细通关秘籍(二)
i春秋作家:W1ngs 原文来自:pwnable.kr详细通关秘籍(二) 0x00 input 首先看一下代码: 可以看到程序总共有五步,全部都满足了才可以得到flag,那我们就一步一步来看 这道题考 ...
随机推荐
- window.event对象详尽解析
event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等. event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有意义.比如,fromEleme ...
- Unity随机随学
1.什么是渲染管道? 是指在显示器上为了显示出图像而经过的一系列必要操作.渲染管道中的步骤很多,都要将几何物体从一个坐标系中变换到另一个坐标系中去. 主要步骤有: 本地坐标->视图坐标-> ...
- php中curl模拟浏览器来传输数据
cURL可以使用URL的语法模拟浏览器来传输数据, 因为它是模拟浏览器,因此它同样支持多种协议,FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以 ...
- Mac下安装LNMP(Nginx+PHP5.6)环境
[转自:http://avnpc.com/pages/install-lnmp-on-osx] 安装Homebrew 最近工作环境切换到Mac,所以以OS X Yosemite(10.10.1)为例, ...
- php实现回复图文,图片,文字
[代码]php代码: <?php /** 微信公众平台 开发者模式 默认用户输入任何文字,均返回同一个图文信息,链接地址为手机站; 可以根据变量$keyword,即用户输入的信息,进行判断, ...
- CentOS更新软件
列出所有可更新的软件清单命令:yum check-update 安装所有更新软件命令:yum update 仅安装指定的软件命令:yum install <package_name> 仅更 ...
- 轻量级IOC框架SwiftSuspenders
该框架的1.6版本位于https://github.com/tschneidereit/SwiftSuspenders/blob/the-past/,现在已经出了重新架构的2.0版本,所以我决定先研究 ...
- [问题2015S08] 复旦高等代数 II(14级)每周一题(第九教学周)
[问题2015S08] 设 \(A\) 为 \(n\) 阶复方阵, 证明: \(A\overline{A}\) 与 \(\overline{A}A\) 相似, 其中 \(\overline{A}\) ...
- JS部分代码分享
2015-10-12 : 1.search()表达式:搜索索引 <!DOCTYPE html><html><body> <p>搜索字符串 "w ...
- BZOJ 3229: [Sdoi2008]石子合并
3229: [Sdoi2008]石子合并 时间限制: 3 Sec 内存限制: 128 MB提交: 497 解决: 240[提交][][] 题目描述 在一个操场上摆放着一排N堆石子.现要将石子有次序 ...