Skip to content

Instantly share code, notes, and snippets.

@hhc0null
hhc0null / exploit_gotcha_go.py
Last active June 23, 2025 16:09
[IERAE CTF 2025] Pwn: Gotcha-Go (240pt)
import secrets
from typing import Callable
from pwn import *
context.binary = binary = ELF("distfiles/ctf")
L_LIST_BASE_ADDRESS = 0x56bfc0
FIXED_GAP_TO_RETURN_ADDRESS = 0x190
DRIVER_INDEX = 1

Your First Format String Attacks.

1. What's the `Format String Bugs'?

 Format String Bugs(以降, FSBとする)とは, sprintf()fprintf()などのprintf関数群やsyslog()などのFormat Strings(以降, 書式指定子とする)を扱える関数において, ユーザが自由に書式指定子を配置できるバグである. これを利用した攻撃手法をFormat String Attacksと呼び, この攻撃によりターゲットとなるプロセスがアクセス可能な任意のメモリの読み書きが行えるようになる. また, それを利用しプログラムの制御を乗っ取ることも可能である.
 実際のプログラムに多く存在するとは到底言えないような脆弱性ではあるが稀に見つかることはある. CVE-2012-0809[1]ではsudoのデバッグ機能にFSBが見つかり, 実際にlocal exploitが公開されたりもした. 前述の通り珍しいものではあるが, 任意のメモリの書き換えができるなど非常に強力なものであることからCTFではよく題材にされる.
 この記事ではFSBの検証に以下の環境を使用した.

sh-4.3$ uname -a
Linux Arch_Laptop 4.0.4-1-ARCH #1 SMP PREEMPT Mon May 18 06:43:19 CEST 2015 x86_64 GNU/Linux
@hhc0null
hhc0null / old_bata_collections.md
Last active September 8, 2020 13:22
bata's CTF problem collections

--- rev ---

MIDDLE

[PoliCTF 2012] Non-Section 500
[NuitDuHack 2013] Crackme300
[NuitDuHack 2013] Crackme500
DIFFICULT

[Hack.lu CTF 2012] #12 Donn Beach - 500

@hhc0null
hhc0null / 20150415-libseccomp_pseudo_syscall.md
Last active February 26, 2020 21:52
[メモ書き] libsecompのpseudo syscallについて

libsecompのpseudo syscallについて

 PlaidCTF 2014のjackshitを読む際に, libseccompのseccomp_rule_addでsyscallに負数を渡していることが気になったのでメモ書きとして残しておく.


1. Seccomp

 Secure Computing(Seccomp)は, プロセスのサンドボックス化のためのLinuxカーネルの機構である. read/write/exit/sigreturn以外を制限するMode 1はLinuxの2.6.12でマージされた機能である[1].
 Linux 3.5ではMode 2が追加され, 任意のシステムコールの制限が可能となり, 記述もBSD Packet Filter(BPF)を利用することとなった[2].

1.2 libseccomp

 libseccomp[3]は, Seccompを使う上で生じるアーキテクチャ毎の差異などの吸収を行うライブラリである. 現在, x86, ARM, MIPSがサポートされている[4].

@hhc0null
hhc0null / poc.js
Created July 29, 2019 15:04
Code Execution PoC for CVE-2019-9791
/*
Code Execution PoC of CVE-2019-9791 for practice of exploiting SpiderMonkey.
- Bug Finder: @saelo
- Target: 67fc2c30797036217de91cdb4b6d77a876bed7db^
- Reference: https://doar-e.github.io/blog/2018/11/19/introduction-to-spidermonkey-exploitation/
% build-release/bin/js67 --version
JavaScript-C67.0a1
% build-release/bin/js67 work/exploit-js67.js
[+] Successfully got the primitives!
@hhc0null
hhc0null / iroiro.sh
Last active February 10, 2019 13:57
memo
function peco-history-selection() {
BUFFER=$(history 1 | sort -k1,1nr | perl -ne 'BEGIN { my @lines = (); } s/^\s*\d+\*?\s*//; $in=$_; if (!(grep {$in eq $_} @lines)) { push(@lines, $in); print $in; }' | peco --query "$LBUFFER")
CURSOR=${#BUFFER}
zle reset-prompt
}
zle -N peco-history-selection
bindkey -M vicmd "^R" peco-history-selection
function select_pid() {
@hhc0null
hhc0null / exploit.py
Created December 29, 2017 20:58
34C3: pwn-300
#!/usr/bin/env python
from pathlib import PurePath, Path
from tempfile import NamedTemporaryFile
from itertools import islice, cycle
from hexdump import hexdump as hd
import binascii
import hashlib
import re
import os
@hhc0null
hhc0null / superman_brainfuck.c
Last active May 26, 2017 16:25
[NDH2k15 Crackme_Reverse-Superman-500pts] The superman is a brain fucker.
// get origin address.
// 08077008 E81C060000 call dword 0x8077629
// 0807700D 83EE05 sub esi,byte +0x5 // esi - 5: 0x8077008
origin = (void *)0x8077008;
int sub_08077010()
{
ebp_c04h = sub_080775B2(origin, 0x621);
if(getuid() != 0) {
sub_08077259(origin+0x628, ebp_c04h);