Skip to content

Instantly share code, notes, and snippets.

@akiym
akiym / 000.md
Last active March 31, 2025 04:54

debugalyzer

フラグを2文字取ってきて計算する処理があるので、gdbで動かして取ってきて脳死z3で解ける。

import gdb

e = lambda c: gdb.execute(c, to_string=True)
p = lambda x: gdb.parse_and_eval(x)
@akiym
akiym / 000.md
Last active March 23, 2025 13:21
AlpacaHack Round 10 (Pwn) writeup - Oyster, Kangaroo, Takahashi

Oyster

なんとなくstrcmpしているのでnull文字を詰め込んでどうにかするものだろうと予想して、脳死でpasswordをすべてnull文字で送ってみたところそのままいけました。

from pwn import *

context.update(os='linux', arch='amd64', log_level='info')
p, u = pack, unpack
@akiym
akiym / 000.md
Created December 30, 2024 10:45
AlpacaHack Round 8 (Rev) writeup

masking tape

デコンパイル結果を持ってきてブルートフォース。

enc1 = [0x08, 0x23, 0x03, 0x03, 0x13, 0x03, 0x13, 0x03, 0x01, 0x23, 0x31, 0x13, 0x11, 0xC8, 0x03, 0xC8, 0x03, 0x13, 0x01, 0xC8, 0x13, 0x13, 0x03, 0x13, 0x13, 0x11, 0x13, 0x23, 0x00, 0x00, 0x00, 0x00]
enc2 = [0x02, 0x40, 0x80, 0x08, 0x08, 0x08, 0xC8, 0xC8, 0x80, 0x88, 0x08, 0x80, 0x88, 0x32, 0x08, 0x32, 0x80, 0x80, 0x80, 0x32, 0x08, 0x80, 0x08, 0x08, 0x48, 0x88, 0x80, 0xC8, 0x00]

flag = ''
for i in range(100):
@akiym
akiym / 000.md
Last active May 19, 2024 05:53
TSG LIVE! 12 CTF writeup

wolf

WOLF RPGエディターで作られたゲーム。起動するとゲームが始まって、配置されている宝箱に触るとflag?と聞いてくる。 Data/MapData/SampleMapA.mpsの中にflag?という文字列があり、おそらくここがflagチェック処理が含まれているバイナリであるがどういったものかは不明。{}QWERTYUIOPASDFGHJKLZXCVBNM_TKTNT}RRUAPRHDSH{SXMREISUAH}RE}PUYPUQYDBQTLKXWCJXTYの文字列が見えるが、適当にxorしてもflagにはならないのでguessは諦める。

https://silversecond.com/WolfRPGEditor/ のエディタでそのまま開けるようだったので処理を読む。\v[0]のような文章を追加するとV0の変数を表示できるのでデバッグが楽。

image

あとは1文字ずつブルートフォースして求めた。

@akiym
akiym / Dockerfile
Last active November 22, 2018 03:18
Reproduction code segmentation fault with --py-autoreload (uwsgi 2.0.17, Python 3.7)
FROM python:3.7-stretch
WORKDIR /app
RUN pip install uwsgi==2.0.17
COPY foobar.py .
COPY __init__.py foo/bar/__init__.py
CMD ["uwsgi", "--http", ":9090", "--wsgi-file", "foobar.py", "--py-autoreload", "1"]
@akiym
akiym / solve.py
Created September 7, 2016 08:30
Cello Rule - Tokyo Westerns / MMA CTF 2nd 2016
# -*- coding: utf-8 -*-
from z3 import *
s = Solver()
seed1 = [BitVec('s1_%d' % i, 64) for i in range(64+1)]
seed2 = [BitVec('s2_%d' % i, 64) for i in range(64+1)]
r1 = BitVec('r1', 64)
r2 = BitVec('r2', 64)
@akiym
akiym / exploit.py
Created September 7, 2016 08:23
shadow - Tokyo Westerns / MMA CTF 2nd 2016
# -*- coding: utf-8 -*-
import os
import sys
import time
import re
import struct
import socket
p = lambda x: struct.pack('<I', x)
u = lambda x: struct.unpack('<I', x)[0]
@akiym
akiym / exploit.py
Created September 7, 2016 08:22
diary - Tokyo Westerns / MMA CTF 2nd 2016
# -*- coding: utf-8 -*-
import os
import sys
import time
import re
import struct
import socket
from pwn import *
context.update(arch='amd64', os='linux')
@akiym
akiym / exploit.py
Created September 7, 2016 08:22
Interpreter - Tokyo Westerns / MMA CTF 2nd 2016
# -*- coding: utf-8 -*-
import os
import sys
import time
import re
import struct
import socket
p = lambda x: struct.pack('<Q', x)
u = lambda x: struct.unpack('<Q', x)[0]
@akiym
akiym / exploit.py
Created September 7, 2016 08:21
greeting - Tokyo Westerns / MMA CTF 2nd 2016
# -*- coding: utf-8 -*-
import os
import sys
import time
import re
import struct
import socket
from libformatstr import FormatStr
p = lambda x: struct.pack('<I', x)