SECCON 2015 Online CTF でちょっと解いた話

こんにちは.SECCON WARS解く担当の @3846masa です.

(SECCON WARSしか解けないとも言う)

そんなわけで,SECCON 2015 Online CTF に参加しました.

Nakano Computer Club(NCC)ってことで参加しました.

ほとんど問題解けなかったですが...(時間は溶けた)

去年も似たようなもんですね.

成長してないようです.(セキュリティの人じゃないからな...)

以下,ちょっとだけWriteup.

[SECCON 2015] Start SECCON CTF

ex1
Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO
Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ{}

ex2
Cipher:EV}ZZD{DWZRA}FFDNFGQO
Plain: {HELLOWORLDSECCONCTF}

quiz
Cipher:A}FFDNEVPFSGV}KZPN}GO
Plain: ?????????????????????

簡単なプログラムを組めばOKですね.

var key = 'PXFR}QIVTMSZCNDKUWAGJB{LHYEO'.split('');
var val = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ{}'.split('');
var obj = {};
for (var i = 0; i < key.length; i++) obj[key[i]] = val[i];
var q = 'A}FFDNEVPFSGV}KZPN}GO'.split('');
var a = q.map((k) => obj[k]).join('');
console.log(a);

(「let使え」おじさんに怒られる...)

[SECCON 2015] SECCON WARS 2015

まず動画を何らかの方法で入手します.

あとは,ffmpegImagemagickにかかれば楽勝ですね.

ffmpeg -i videoplayback -f image2 %06d.jpg
# 目視でQRコードにSECCONが被っている部分を削除する
convert *.jpg -background none -compose lighten -flatten export.png

ほらこの通り!

QRCode

[SECCON 2015] Command Line Quiz

telnet caitsith.pwn.seccon.jp
User:root
Password:seccon
すべての *.txt ファイルを読め
What command do you use when you want to read only top lines of a text file?

Set your answer to environment variable named stage1 and execute a shell.

  $ stage1=$your_answer_here sh

If your answer is what I meant, you will be able to access stage2.txt file.

英語読めないですよね.なので,シェル書きましょう.

for n in $(ls -1 /sbin /bin /usr/bin /usr/sbin); do stage1=$n sh -c "cat stag
e2.txt 2>/dev/null && echo && echo $n"; done

あとは,上のstageNとstageMを書き換えていけば,最終段階まで行けます.

ちなみに答えは,stage1='head' stage2='tail' stage3='grep' stage4='awk'

すると,

OK. You reached the final stage. The flag word is in flags.txt file.

flags.txt can be read by only one specific program which is available
in this server. The program for reading flags.txt is one of commands
you can use for processing a text file. Please find it. Good luck. ;-)

よくわからないですね.... なんかしらのコマンドに突っ込むらしいです.

ls /bin /sbin /usr/bin /usr/sbin

次のリストから,テキスト加工できそうなコマンドを試していきました.

(勘のいい人はsedが思いつくんでしょうね,きっと...)

/bin:
addgroup       dumpkmap       iproute        mt             sh
adduser        echo           iprule         mv             sleep
ash            ed             iptunnel       netstat        stat
cat            egrep          kill           nice           stty
catv           false          linux32        pidof          su
chattr         fdflush        linux64        ping           sync
chgrp          fgrep          ln             ping6          tar
chmod          fsync          login          pipe_progress  touch
chown          getopt         loginshell     printenv       true
cp             grep           ls             ps             umount
cpio           gunzip         lsattr         pwd            uname
cttyhack       gzip           makemime       reformime      uncompress
date           hostname       mkdir          rm             usleep
dd             hush           mknod          rmdir          vi
delgroup       ionice         mktemp         rpm            watch
deluser        ip             more           run-parts      zcat
df             ipaddr         mount          scriptreplay
dmesg          ipcalc         mountpoint     sed
dnsdomainname  iplink         msh            setarch

/sbin:
acpid              hwclock            mkdosfs            start-stop-daemon
adjtimex           ifconfig           mkfs.minix         sulogin
arp                ifdown             mkfs.vfat          swapoff
blkid              ifenslave          mkswap             swapon
depmod             ifup               modprobe           switch_root
devmem             init               nameif             sysctl
fbsplash           insmod             pivot_root         syslogd
fdisk              klogd              poweroff           tunctl
findfs             loadkmap           raidautorun        udhcpc
freeramdisk        logread            reboot             vconfig
fsck               losetup            rmmod              watchdog
fsck.minix         lsmod              route              zcip
getty              makedevs           runlevel
halt               man                setconsole
hdparm             mdev               slattach

/usr/bin:
[            diff         ifplugd      od           sha1sum      ttysize
[[           dirname      install      openvt       sha256sum    udpsvd
ar           dos2unix     ipcrm        passwd       sha512sum    unexpand
arping       du           ipcs         patch        showkey      uniq
awk          dumpleases   kbd_mode     pgrep        softlimit    unix2dos
basename     eject        killall      pkill        sort         unlzma
beep         env          killall5     printf       split        unxz
bunzip2      envdir       last         pscan        strings      unzip
bzcat        envuidgid    length       readahead    sum          uptime
bzip2        ether-wake   less         readlink     sv           uudecode
cal          expand       logger       realpath     tac          uuencode
chat         expr         logname      renice       tail         vlock
chpst        fdformat     lpq          reset        tcpsvd       volname
chrt         find         lpr          resize       tee          wc
chvt         fold         lzmacat      rpm2cpio     telnet       wget
cksum        free         md5sum       rtcwake      test         which
clear        ftpget       mesg         runsv        tftp         who
cmp          ftpput       microcom     runsvdir     tftpd        whoami
comm         fuser        mkfifo       rx           time         xargs
crontab      hd           mkpasswd     script       timeout      xzcat
cryptpw      head         nc           seq          top          yes
cut          hexdump      nmeter       setkeycodes  tr
dc           hostid       nohup        setsid       traceroute
deallocvt    id           nslookup     setuidgid    tty

/usr/sbin:
brctl        dhcprelay    ftpd         lpd          readprofile  svlogd
chpasswd     dnsd         httpd        popmaildir   sendmail     telnetd
chroot       fakeidentd   inetd        rdate        setfont      udhcpd
crond        fbset        loadfont     rdev         setlogcons

そんなわけで,sed -e 's/^//g' flags.txtしたらフラグが出ます.


おわりに

楽しかったので来年も参加します.

食わず嫌いしないでバイナリとかも勉強しましょう.

(Webにバイナリの波が押し寄せているからな... orz)

ちなみに,HTTP2問はHTTP2であることまでしかわかりませんでした.バイナリこわい