Hanoi As A Service
50 Points
Check out our shiny new HaaS platform!
nc haas.polictf.it 80
This is a code injection challenge on Prolog.
#!/usr/bin/env python2 | |
import binascii | |
import re | |
import socket | |
import struct | |
import subprocess | |
import sys | |
import telnetlib | |
import time |
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
# Shojin! | |
*filter | |
:INPUT ACCEPT [0:0] | |
:FORWARD ACCEPT [0:0] | |
:OUTPUT ACCEPT [0:0] | |
# twitter.com. | |
-A INPUT -s 199.59.148.10 -p tcp -i eth0 -j REJECT | |
-A INPUT -s 199.59.148.82 -p tcp -i eth0 -j REJECT | |
-A INPUT -s 199.59.149.198 -p tcp -i eth0 -j REJECT | |
-A INPUT -s 199.59.149.230 -p tcp -i eth0 -j REJECT |
#!/usr/bin/env python2 | |
import binascii | |
import re | |
import struct | |
import sys | |
uh = lambda x: binascii.unhexlify(x) | |
hx = lambda x: binascii.hexlify(x) | |
p = lambda x: struct.pack("<I", x) |
// output_buffer: 0xb7fef000 | |
// jit_struct: 0xb7fed000 | |
int sub_8049668(char *arg_0, char *arg_4, int arg_8) | |
{ | |
if(arg_8 != 0 && arg_8-2 > '"' /* 0x22 */) { // unsigned | |
return 0; | |
} | |
char *val_0 = arg_0; | |
int val_1; |
#!/usr/bin/env python2 | |
import binascii | |
import re | |
import socket | |
import struct | |
import subprocess | |
import sys | |
import telnetlib | |
import time |
/* | |
bash | |
just another super-puper secure shell | |
nc bash.2015.volgactf.ru 7777 | |
tiny_bash[http://files.2015.volgactf.ru/bash/tiny_bash] | |
*/ | |
char *bss_602140h[] = {"flag", "bash", "python", "netcat", "perl", "args", "pico", "echo", "grep", "find", "sudo", "system", "exec", "regexp", "tail", "head", "less", "more"}; |
struct hoge { | |
char *offset_00h; | |
int offset_04h; // max length. | |
int offset_08h; // counter. | |
} | |
void sub_804889d(char *arg_0) | |
{ | |
puts(arg_0); | |
exit(EXIT_FAILURE); |