本文作者:萌新

0x01前言

这一系列文章为pwnable.krToddlr’s Bottle的全部题解,其中有三道题目相对而言稍难或者说比较经典,单独成篇,其他题目的题解放在一起发出来。

0x02fd

Ssh连接

看一下目录

我们需要执行flag,或者查看flag的内容

看题目的提示就知道这题和文件描述符有关

看看源码

在代码中我们可以看到要通过strcmp()比较后会输出

查看strcmp的用法

可知,strcmp()中,若参数s1和s2字符串相同则返回0,s1大于s2则返回大于0的值,s1小于s2则返回小于0的值。

代码中要cat flag执行的话if语句应满足strcmp返回0,即buf的内容应为LETMEWIN

那么buf的值哪来的呢

man read可知

buffer的值由read控制,从fd读入count个字节内容

fd在代码中的值为atoi(argv[1])-0x1234

atoi()用于把字符串转换为整数

由linux下文件描述符可知(源码在/usr/include/unistd.h)

即文件描述符0表示标准输入,也就是我们可以从命令行中控制的。

Atoi接收的参数我们可以控制,只要令argv[1]为0x1234(argv[0]为程序名称,argv[1]为输入参数),0x1234十进制为4660,经过运算最后赋值给fd的就是0,然后再传入read(),由于fd为0,所以我们在命令行中输入什么,则在buffer中写入的就是什么,只要输入LETMEWIN就可以了

分析完毕,接下来测试一下

通过,logout关闭ssh连接

0x03collision

看题目描述应和哈希碰撞相关

看看源代码

在main()中看到传入的argv[1]需要满足条件:

长度为20字节,传给check_password后的返回值为硬编码的0x21dd09ec

那么我们需要来看一下check_password的逻辑

可以看到传参为char型指针,在逻辑中被强制类型转换为int型指针

从大小的角度来看即1字节转换为4字节,一共20字节,20/4=5,刚好对应for循环里的5次,for循环是做了个累加的操作,即累加和等于0x21DD09EC即可

emmm简单理解,就是说输入20字节,每4字节一组,共5组,5组相加后等于0x21dd09ec即可。

这就很简单了

我设16个字节为0x1,那么另外的4字节应为差值0x1dd905e8,又因为小端序,所以写的时候倒过来写即可,如下所示

  0x04bof

根据题目描述这是一道缓冲区溢出的题目

下载bof及其代码

看看源码

看到main中调用了func,传参为0xdeadbeef

而func()中可以看到需要传参为0xcafebabe才可以getshell

我们注意到func中我们可以通过gets控制输入,gets像本题的这种用法是非常危险的,容易造成缓冲区溢出攻击,这次我们就来pwn掉它

我们尝试输入写字符看看

那么基本的思路有了,就是找到确定的偏移,然后使用0xcafebabe覆盖0xdeadbeef。

偏移是多少呢

配合gdb来看看

在main下断点

输入r启动

在断点处停下了

我们反汇编func看看比较key和0xcafebabe指令在哪儿

看到上图的红框中的cmp指令了,这就是关键

可以看到地址是0x56555654

在这里下个断点

按c继续执行

命中第二个断点后,我们来看看栈的布局

可以看到0xdeadbeef在0xffffd330,而我们输入的A是从0xffffd2fc开始

emmm,数一下,从最开始的0x41到0xdeadbeef之前查了13*4=52个字节,在53-56处写入0xcafebabe覆盖掉原有的0xdeadbeef即可

编写pwntools脚本

from pwn import *

payload = 'A' * 52 + '\xbe\xba\xfe\xca'

shell = remote('pwnable.kr',9000)

shell.send(payload)

shell.interactive()

测试如图,打回了一个shell

未完待续!

实践操作——《缓冲区溢出基础与实践》:主要介绍了缓冲区溢出基础与实例,通过本实验的学习,你能够了解缓冲区溢出的原理与危害,掌握防范缓冲区溢出的基本方法,学会进行常见的缓冲区溢出攻击。

实验地址:http://www.hetianlab.com/expc.do?ec=9613f998-8cd2-4981-9bc5-9900c97371de

萌新带你开车上p站(一)的更多相关文章

  1. 萌新带你开车上p站(二)

    本文作者:萌新 前情提要:萌新带你开车上p站(一) 0x04flag  看题目描述似乎是一个和脱壳相关的逆向题目 按照给出的地址先下载过来 file看看 是个可执行文件 执行之 emm什么都看不出来, ...

  2. 萌新带你开车上p站(Ⅳ)

    本文作者:萌新 前情回顾: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 萌新带你开车上P站(三) 回顾一下前篇,我们开始新的内容吧 0x12 登录后看源码 通读程序,逻辑是这样子的: 输入6个 ...

  3. 萌新带你开车上p站(三)

    本文作者:萌新 前情回顾: 萌新带你开车上p站(一) 萌新带你开车上p站(二) 0x08 题目给的提示是和运算符优先级有关 登录后直接看源码 mistake@pwnable:~$ ls flag mi ...

  4. 萌新带你开车上p站(番外篇)

    本文由“合天智汇”公众号首发,作者:萌新 前言 这道题目应该是pwnable.kr上Toddler's Bottle最难的题目了,涉及到相对比较难的堆利用的问题,所以拿出来分析. 登录 看看源程序 程 ...

  5. 萌新带你开车上p站(终极番外)

    本文由“合天智汇”公众号首发,作者:萌新 0x01前言 这关其实和pwn关系不大,主要考察的都是linux下一些函数的操作,考察linux的基本功.涉及到的知识点包括一些经典的函数原型.IO重定向.文 ...

  6. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  7. 萌新笔记——C++里创建 Trie字典树(中文词典)(二)(插入、查找、导入、导出)

    萌新做词典第二篇,做得不好,还请指正,谢谢大佬! 做好了插入与遍历功能之后,我发现最基本的查找功能没有实现,同时还希望能够把内存的数据存入文件保存下来,并可以从文件中导入词典.此外,数据的路径是存在配 ...

  8. 留学萌新Essay写作须知

    Essay是留学生们接触比较多的一项留学生作业,但尽管如此,依旧有部分同学对于essay写作是没有足够的把握的.随着开学季的到来,很多萌新初次接触Essay写作,难免会有很多不懂得地方.所以今天小编就 ...

  9. 从Webpack源码探究打包流程,萌新也能看懂~

    简介 上一篇讲述了如何理解tapable这个钩子机制,因为这个是webpack程序的灵魂.虽然钩子机制很灵活,而然却变成了我们读懂webpack道路上的阻碍.每当webpack运行起来的时候,我的心态 ...

随机推荐

  1. flask连接数据库的URI书写格式

    1. MySQL mysql://username:password@hostname/database 2. PostgreSQL postgresql://username:password@ho ...

  2. 2020年Java基础高频面试题汇总(1.4W字详细解析)

    1. Java语言有哪些特点 (1)简单易学.有丰富的类库 (2)面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) (3)与平台无关性(JVM是Java跨平台使用的根本) (4)可靠安全 ...

  3. NeurIPS 2019 | 基于Co-Attention和Co-Excitation的少样本目标检测

    论文提出CoAE少样本目标检测算法,该算法使用non-local block来提取目标图片与查询图片间的对应特征,使得RPN网络能够准确的获取对应类别对象的位置,另外使用类似SE block的sque ...

  4. GBDT梯度提升树算法及官方案例

    梯度提升树是一种决策树的集成算法.它通过反复迭代训练决策树来最小化损失函数.决策树类似,梯度提升树具有可处理类别特征.易扩展到多分类问题.不需特征缩放等性质.Spark.ml通过使用现有decisio ...

  5. CF 631C report

    Each month Blake gets the report containing main economic indicators of the company "Blake Tech ...

  6. 线程安全,syncronized 用法

    1,为什么有线程安全问题? 当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题.但是做读操作是不会发生数据冲突问题. public class Tra ...

  7. 史上最详细的Docker安装手册

    概述: 这个安装手册我已经使用了将近2年的时间,一直在进行完善(可以用于生产级别).使用了Centos 7系统. 一.Docker简单介绍 Docker是一个容器,使用的是Linux现有的技术,准确来 ...

  8. 浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别

    最近一次的面试中,被面试官问到varchar和nvarchar的区别,脑海里记得是定长和可变长度的区别,但却没能说出来.后来,在网上找了下网友总结的区别.在这里做个备忘录: 一,SQL Server中 ...

  9. 一文搞懂 ThreadLocal 原理

    当多线程访问共享可变数据时,涉及到线程间同步的问题,并不是所有时候,都要用到共享数据,所以就需要线程封闭出场了. 数据都被封闭在各自的线程之中,就不需要同步,这种通过将数据封闭在线程中而避免使用同步的 ...

  10. spring中BeanPostProcessor之一:InstantiationAwareBeanPostProcessor(01)

    在spring中beanPostProcessor绝对是开天辟地的产物,给了程序员很多自主权,beanPostProcessor即常说的bean后置处理器. 一.概览 先来说下Instantiatio ...