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,那我们就一步一步来看 这道题考 ...
随机推荐
- java名词解释
依赖注入 DI 面向切面编程 AOP 简单java对象 POJO -- JavaBean(spring称呼) 企业级javabean EJB
- c3p0数据库连接池使用
- wex5 教程 之 图文讲解 后台管理界面设计与技巧
视频教程地址:http://v.youku.com/v_show/id_XMTgwOTAyMTkyMA==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0 ...
- java.lang.OutOfMemoryError: PermGen space
Exception in thread ""http-bio-8080"-exec-1" java.lang.OutOfMemoryError: PermGen ...
- IOS调试lldb命令常用,po,
lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在"(lldb)"提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面 ...
- 8 个最棒的 .NET 开发相关工具
本文向你介绍 8 款跟 .NET 开发相关的一些工具. 1) Open Source – Sharp Develop SharpDevelop是一个用于开发C#或者VB.NET项目而设计的一个编辑器, ...
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- 【Linux命令与工具】ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- 提高mysql插入性能
参考地址:http://blog.jobbole.com/29432/ 参数优化: 1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_p ...
- 在Tomat7上使用Redis保存Session
源博客http://my.oschina.net/gccr/blog/321083 当用户量大.应用服务器使用集群来布署时,使用Tomcat默认自带的Session就不能满足需求了.当然解决方法有很多 ...