CTF

2024 CKEFGISC Winter Camp

Lecturer:水獺

目錄(可點)

Reverse Engineering & PWN

MISC

  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark
  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

CTF簡介

這是什麼?

  • CTF,Capture The Flag的縮寫
  • 資安領域中的一個競賽活動。
  • 出題方會把所謂的「Flag」以各種方式藏在圖片、編碼等資訊,或是有漏洞的網站、程式等…之中
  • 參賽者則要嘗試破解或攻擊題目給的資訊/網站、程式來獲取Flag以得分

Why CTF?

  • CTF的優點?
    • 能夠學習與練習基礎資安概念和技巧
    • 兼顧有趣、輕鬆
  • 這堂課會在概念教學、工具介紹之間穿插題目的練習,讓大家能在學習的同時能體驗解題的樂趣!

類型介紹

CTF題目大概可以分成六種類型,分別為:
  • Web(網頁)
  • Forensic & Stego(鑑識&檔案隱寫)
  • MISC(各式各樣、大雜燴)
  • Cryptography(密碼學)
  • Reverse Engineering(逆向工程)
  • PWN(「攻破」或「控制」)

類型介紹---Web

題目型態: 網頁

         特性: 利用網頁的各個組成部件,如前端程式檔案、

                        Cookie、robot.txt、Database等,有的時候也

                        會利用程式語言的特性

類型介紹---Forensic & Stego

題目型態: 圖片、PPT、Docx、封包等

         特性: 以檔案隱寫、巨集執行等方式將Flag 包含於

      題目所給的圖片、文件或封包等等檔案中,

                       通常要用到各種分析工具才能找到Flag。

           P.S: 這是我覺得最有趣的一個分類

名字來源: Miscellaneous(各式各樣、大雜燴)的前四個字母

題目型態: 無法分類、奇奇怪怪的題目

         特性: 包含Recon(訊息收集)、Encode(編碼轉換),

                        有些資料也會將Forensics & Stego包含在內。

類型介紹---MISC

題目型態: 加密過的檔案、有問題的加密演算法

         特性: 簡單的題目可以直接用加解密工具,但大多數題

                       目需要比較多的計算或者比較難的數學。包含密

                       文解密、加密演算法漏洞等,有的時候題目會自

                       己發明演算法要你找問題。

類型介紹---Cryptography

題目型態: 用各種不同語言寫好的程式或執行檔

         特性: 分析意思或讀懂組合語言之後才可能取得Flag,

                       若知道執行檔的撰寫語言也可能可以使用反組譯

                       工具。

類型介紹---Reverse Engineering

題目型態: 有問題的程式碼、遠端主機、

                       RCE---遠端程式碼執行(Remote Code Execution)

         特性: 以輸入造成程式或環境的崩壞並取得Flag,通常

                       會牽涉到記憶體與組合語言的特性,也有

                       privilege escalation(特權提升)、sandbox escape

                       等等類型。

         P.S.: 題目通常都變態難,應該是最困難的分類

類型介紹---PWN

今天我們大部份會在這個網站上做題目的練習

大家可以先看講義上的說明創建帳號

記得要改18歲以上不然他好像會要你爸媽同意還是什麼的

創建PicoCTF帳號

創好之後就可以登進去逛逛,裡面有:

Web Exploitation 、 Cryptography 、 Reverse Engineering、Forensics 、 General Skills 、 Binary Exploitation(很像PWN)

等六個分類

BUUCTF:中國的CTF網站,上面的題目多元但難度較高,今天有幾題練習是從上面出來的(答案格式是「Flag{這裡放你找到的flag}」)

 

番外:其他網站

也可以註冊一下~

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark
  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

安裝各種東西

Windows-Wireshark

  1. 搜尋欄打「Wireshark」
  2. 進入官網之後下載適合電腦作業系統的安裝檔
  3. 打開安裝檔後除非要更改安裝路徑否則就一直按到底
  4. 視情況重開機

選擇性(不一定要裝,今天應該不會用,不過非常好工具)

WSL-Python

  • 安裝
    1. 在Ubuntu中輸入以下指令並視情況輸入密碼
  • 使用
    1. 在Ubuntu中輸入以下指令以執行程式碼
sudo apt install python3
python3 filename

WSL-Binwalk

  • 安裝
    1. 在Ubuntu中輸入以下指令並視情況輸入密碼
  • 使用的部分我們後面再說因為有點複雜
sudo apt install binwalk

WSL-Ruby & zsteg

  • 安裝
    1. 先安裝Ruby(你們應該裝完了,裝完就跳下一步)
      1. 輸入以下指令並視情況輸入密碼
           
    2. 再安裝zsteg
      1. 輸入以下指令並視情況輸入密碼
  • 使用的部分一樣後面說
sudo apt install ruby
sudo gem install zsteg

WSL-Java & Stegsolve

  • 安裝Java
    1. 輸入以下指令並視情況輸入密碼
  • 使用的部分一樣後面說
wget http://www.caesum.com/handbook/Stegsolve.jar -O stegsolve.jar
chmod +x stegsolve.jar
mkdir stegsolve
mv stegsolve.jar stegsolve/
  • 安裝Stegsolve(比較複雜,需要用Github下載)
    1. 依序輸入以下指令
sudo apt install default-jre

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark
  • man
  • net cat/nc
  • pipe( | )
  • string

指令&符號補充

  • 跟help一樣效果
  • 輸入​:

man

man commandName

來取得某個指令的使用方式與參數意義,如:

man cat
  • 可以在網路上接收/傳送封包以達成連線到伺服器並掃描特定port的功能
  • 輸入​:

net cat/nc

netcat/nc url port

即可連線並取得port回傳之資料,如:

netcat/nc  mercury.picoctf.net 22342
  • 組合技,啟動!!!
  • 可以將「|」左方的指令回傳之資料當成右邊函數的輸入,如:

pipe( | )

cat file.txt | grep picoCTF
  1. 輸入
  2. 「cat」指令原本會輸出「file.txt」的內容                      --> 「grep」會接收此輸出並嘗試從中找出含有「picoCTF」關鍵字的部分
  3. 最後會輸出的是「file.txt」內容裡含有「picoCTF」的前後文
  • 可以在文件中尋找字串(4個或以上可被輸出的字元)並輸出
  • 輸入​:

strings

strings fileName

也可以與grep連用,如:

strings file1.txt | grep picoCTF

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

基本介紹

  • Front-End (前端)
    • 顯示在使用者面前
    • 由HTML、CSS(美編)、JS(互動)三種程式語言組合而成
    • 負責網頁的美觀與基本使用者介面
  • Back-End (後端)
    • 不顯示在使用者面前
    • PHP、Ruby、Python、SQL
    • 負責網頁的安全、順利運行及資料儲存等

網頁運作

HTTP

  • Hypertext Transfer Protocol,超文本傳輸協定
  • HTTP未加密,HTTPS有加密
  • HTTP狀態代碼
狀態代碼 1XX 2XX 3XX 4XX 5XX
狀態 資訊(暫時狀態) 成功 重新導向 用戶端錯誤 伺服器端錯誤

傳輸方式:Get or Post

兩種伺服器傳送資料的方式:

  • Get:資料會直接顯示於網址上,可以更改
    • 有些網頁會直接把該網頁的資料寫在後面,就是使用Get
  • Post:資料會被加密並以封包傳送
www.url.com?user=admin

user(使用者)

https://play.picoctf.org/practice?category=4

practice的category編號

前端三本柱

  • HTML:超文本標記語言,主要用處是建立網頁的文字與架構
  • CSS:階層式樣式表,用處為幫網頁做美編
  • JS:JavaScript,主要用處為讓網頁能與使用者及後端互動

開發人員工具F12

在網頁裡按下F12或右鍵點「檢查」:

  • 檢視前端網頁的HTML原始碼
  • 檢視與編輯Cookie
  • 改request header
  • 小恐龍作弊跑到1000000分

HTML架構

  • 大部分內容的左右側都會有標籤,左側為 <sth>,右側為 </sth>
  • 部分內容只有一個標籤 <sth>
  • <html></html> 中包的為HTML內容
  • <head></head> 有點像include或import等標頭檔,裡面放的是網頁初始化的設定,如:編碼、分頁名稱、引入CSS、JS,使用者不會看到
  • <body></body> 則是使用者能看到或用到的
  • <script></script> 包的是JS的程式碼
  • 註解為 <!-- 註解 -->

curl

  • 用終端機對網頁做各種動作或請求,如POST、GET、下載檔案等
  • 以防807沒有講我放幾個常用的option
Option -X -I --data -G -H
用途 傳送指定指令 傳送head請求 GET(或POST) 傳送資料(搭配GET & POST) 改Request Header
伺服器回應 視傳送的指令而定 head http訊息(回傳respones header) 無(需搭配get或post) 對應資料 無(更改Request Header)
實例 -X POST 傳送POST指令 PicoCTF -
GET aHead
--data “資料名稱&值”
(key1=value1 & key2=value2)
PicoCTF - Picobrowser PicoCTF - Picobrowser
  • 輸入
curl *options url
curl -G --data "user=admin&passwd=a12345678" http://goodCTF.com:27493/

範例:-G(get),--data後面接要用於get方法的資料名稱和值,最後放網址

curl -I http://www.example.com/data.php

範例:-I(請求respones header),後放網址

curl

  • 輸入
curl -X POST --data "email=sample@example.com&press=%20SEND%20" http://www.example.com/data.php

範例:-X POST,--data後面接要用POST方法的資料名稱和值,其中因為POST預設使用的格式為「application/x-www-form-urlencoded」,這個格式使用的是百分比編碼(Percent encoding),此編碼中的空格為保留字元,以「%20」表示,所以用於POST的值需要先人工編碼(空格 to %20)

 <form method="POST" action="data.php"> <!-- 建立一個HTML表單,並且表單資料會被以http post的傳輸方式傳到data.php這個遠端程式中 -->
    <input type=text name="email">
    <input type=submit name= value=" SEND "> <!-- 這裡是 *空格*SEND*空格* -->
 </form>

這是一個HTML FORM的範扣

curl -H "path:/api/challenges/9/" https://play.picoctf.org/

範例:-H(request header),可以更改指定的request header後發出請求,最後放網址

番外:Request/Response Header

當發送 GET/POST 請求後,除了資料內容之外,還需附上表頭來紀錄各種資料/設定

  • HTTP Header Wiki
  • 一定放在http body(內容)前面
  • 皆包含:
    • Status Code:狀態碼
    • Date:瀏覽器/伺服器當前時間
  • request header包含:
    • Authority:請求對象
    • Cookie
    • User-Agent:瀏覽器版本與名稱
  • respones header包含:
    • 內容格式 (圖檔、文字)
    • 內容大小 可用來推估下載要耗多久時間

番外:Request/Response Header

怎麼看呢?

https://play.picoctf.org/為例

按下F12打開開發者工具後

進入「網路(Network)」標籤

這時候你會發現這裡一片空

別緊張

按下隨便一題之後

就會看到一堆東西彈出來了

點進去「標頭(Header)」標籤

就可以看到上面是Respones Header(回應標頭)

下面則是Request Header(要求標頭)

curl:補充參數

Option --user-agent --cookie -o/-O -C -i
用途 單獨改user-agent(多個header參數還是要用-H) 單獨攜帶 cookie(多個header參數還是要用-H) 下載檔案(跟wget很像) 網路中斷後繼續下載 傳送head+網頁原始碼請求
伺服器回應 依不同user-agent而定 依不同cookie而定 網址導向的檔案 網址導向的檔案 head http訊息(回傳respones header)+網頁原始碼
實例 PicoCTF - Picobrowser PicoCTF -
GET aHead
curl -H "user-agent:Chrome/116.0.0.0 Safari/537.36" https://play.picoctf.org/
#等價於
curl --user-agent Chrome/116.0.0.0 Safari/537.36 https://play.picoctf.org/
curl -o fileName fileURL #-o(小寫)代表重新命名下載的檔案
curl -O fileURL #-O(大寫)代表直接使用原本的檔案命名
curl -C -o fileName fileURL #-C -o代表繼續下載因網路中斷而未下載完的檔案並命名為fileName

curl

Cookie

  • 瀏覽網站時,網路伺服器建立並由瀏覽器存放在使用者電腦或其他裝置的文字檔案
  • 用來暫時儲存如登入等等資訊
  • F12或(右鍵 --> 檢查) -->

      

應用程式(Application) --> Cookies,

可以看到瀏覽當下網頁使用的Cookie

Cookie

robots.txt

  • 一個文字檔,用來告訴網路爬蟲等非惡意機器人這個網站的哪些部分不該被其取得,以避免伺服器過超過負荷或安全問題。
  • 可以在網址後面輸入「/robots.txt」來檢視一個網站的robots.txt檔案

robots.txt

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

這是什麼

  • Forensic:鑑識,目的是藉由修復/分析文件、封包等方式獲得Flag
  • Stego:隱寫,題目會用一些把訊息隱藏在檔案內的技術(隱寫術)將Flag藏起來,解題則要利用各種工具輔助分析來找出Flag

Hexed.it

  • 一個線上十六進位編輯器
  • 會試著把上傳的檔案轉為十六進位後顯示,常用於確認檔案開頭與結尾,也可進行編輯

檔案頭尾

  • 假設現在我們拿到一個無法確定類型的檔案
  • 直接打開可能會有安全的疑慮
  • 那該怎麼初步確認檔案類型?

十六進位下的檔案開頭結尾!

  1. 把未知的檔案丟進Hexed.it
  2. 對照常見的檔案頭尾便能大概得知檔案類型

檔案頭尾

常見的檔案開頭結尾(可能有少部分例外)

檔案類型 檔案開頭 檔案結尾
.jpg(JPEG圖片) FFD8FF FFD9
.png(PNG圖片) 89054E47 AE426082
.zip(壓縮檔) 504B0304 504B
.gif(動圖) 47494638或GIF89A 003B
.pdf(PDF) 255044462D312E 不一定

Stegsolve

  • 一個分析圖片的工具
  • 有GUI
  • 自帶圖檔資訊檢視、數據提取、圖檔處理、單幀播放與圖片組合器等等功能

這是什麼?

開啟方式

  1. 用cd指令回到當初用wget下載stegsolve的路徑
  2. 輸入
java -jar stegsolve.jar

Stegsolve

  • 打開之後放大,介面長這樣:

Stegsolve

  • 看到左上角:

開啟圖片

另存目前結果

退出

圖檔資訊檢視

數據提取

輪廓分離

單幀播放

圖片組合器

圖檔資訊檢視:依據圖片格式不同可能有多有少

數據提取:看最低有效位

輪廓分離:可以自己試試看,不常用

單幀播放:適用於GIF檔,可以一幀一幀分析儲存

圖片組合器:再輸入一張圖片後利用OR、AND、XOR、

                           ADD等等模式組合兩張圖後顯示

Binwalk

  • 一個很強大的檔案分析工具,各種檔案皆可用。
  • 基礎功能有檔案掃描、檔案類型分析、文件分離等,還有一大坨很複雜的額外功能,甚至還可以裝插件擴充
  • 輸入                          可以檢視這個檔案的資訊(有些你覺得是一個檔案但它其實有很多檔案隱藏在裡面)
  • 輸入                               可以將一個「看似是一個檔案」的檔案分離出好幾個子檔案(-M的來源是CTF裡一個很經典的題目---Matryoshka dolls) (可以用tree顯示分離路徑)
binwalk fileName
binwalk -Me fileName

Binwalk

最低有效位概念

  • 大家應該知道RGB的顏色是個三個數字的組合,也就是(0-255,0-255,0-255),而人的眼睛在我們將這三個數字「±3以下」時大多無法分辨不同,所以就可以用這個方式隱藏資料
  • 至於為什麼叫最低有效位是因為 ±3 用二進位儲存時會在最低的兩個位數,因此命名。

最低有效位概念

  • 分析方式1:在wsl中輸入                                     
zsteg pictureName -a

若該圖片有使用LSB儲存資料則可以取得其資訊

最低有效位概念

分析方式2:

  1. 以stegsolve開啟圖檔
  2. 按左上方的Data Extract
  3. 將Bit Planes的最低位打勾
  4. 按下方Preview就可以看到

以最低位儲存的資訊了

最低有效位概念

封包

  • 這是什麼?
    • 較大量資料的一個段落,透過網路傳送後由接收端電腦/裝置重新分析組合後呈現完整資訊
  • 為何不直接傳資訊?
    • 因為傳送完整資料需要連續不間斷的傳送位元組,當資料過大,過長的位元組便會阻塞連線
    • 而封包交換則是將資料切成多段,這些資料便不用全部由一樣的連線傳送,而可以在經由不同連線傳輸後「殊途同歸」並再次排列、組合後獲得完整資訊,速度會快很多

Wireshark

  • 這是什麼?
    • 一個泛用且強大的網路封包分析工具
    • 可以做到網路封包的即時擷取,也能達成相容多種網路協定且非常詳細的封包檢視及分析
  • 但今天的課程不會深入講解封包分析,因為繼續說下去會講到TCP、UDP等等的網路協定還有各種封包的種類與資訊分析,絕對上不完w只是跟你們說有這個工具
  • 如果有興趣可以研究看看資料

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

名稱來源?

  • 這裡的題目的解題方式通常很難被歸類到其他類別中
  • 用「Miscellaneous」,也就是雜項、大雜燴的意思來分類這些題目
  • MISC即是取這個單字的前四個字母

包含什麼?

  • Recon(訊息收集)
    • 由題目所給的資訊找到線索並獲取Flag
    • 使用瀏覽器搜尋、書籍查詢、地圖查詢等獲取需要的資料
    • 聽起來很簡單但大有學問
    • 題目不多但都不簡單
  • Encode(編碼轉換)
    • 因為編碼錯誤,大多題目都會找到一段看不懂的文字或符號
    • 需要找到正確編碼並轉換後才會得到flag
  • Forensics & Stego(爭議)

練習

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • OTP
  • RSA
  • Visual Cryptography

Caesar cipher

  • 加密:給定一個偏移量n,將明文的所有字母依照字母表順序向上或向下偏移n個字母後得到密文
  • 解密:反著向下或向上推移n個字母即得明文,即:

 

  • 因為最多只有26種可能,很容易被破解

凱薩大帝:「如果需要保密,信中便用暗號,也即是改變字母順序,使局外人無法組成一個單詞。 如果想要讀懂和理解它們的意思,得用第4個字母置換第一個字母,即以D代A,余此類推。」

「替代字母序 = (原字母序 + n) \% 26」

Caesar cipher

各種ROT

加後 > 最大值改用減

減後 < 最小值改用加

種類 加密對象 加密方式 例子
ROT5 數字 替代數字序 = 原數字序 ± 5 123 --> 678
ROT13 字母 替代字母序 = 原字母序 ± 13 cat --> png
ROT18 數字&字母 替代數字序 = 原數字序 ± 5
替代字母序 = 原字母序 ± 13
mhy1031 --> zul6586
ROT47 數字&字母&符號 ASCII code中
替代字元序 = 原字元序 ± 47
2024CKEFGISC! --> a_acrztuvx$rP

各種ROT

RSA

當A要把明文 m 加密傳給B
1. B取得密鑰,一公一私
(1). 取兩個很大的質數 \, p\, 及\, q\, ,計算乘積\, n = p \times q
(2). 計算 r = φ(n) = (p-1) \times (q-1) (φ(n)為歐拉函數)
(3). 銷毀 \,p\, 及\, q\,
(4). 選擇一整數 \,e\, 為公鑰,滿足 e < r 且「 (e\,,\,r) = 1 」
(5). 尋找一個私鑰 \,d\, , 滿足 e \times d \,\,\%\,\, r = 1
2. A由明文 \,m\, 及公鑰 \,e\, 取得密文 \,c\,
(1).\,\, c = m^e \,\,\%\,\,n
3. B由密文 \,c\, 以私鑰 \,d\, 解出明文 \,m (唯一解)
(1). \,\,m = c^d \,\,\%\,\,n

RSA ---例子

1. B取得密鑰,一公一私
(1). 取兩個質數 \, p =「5」\, 及\, q =「11」\, ,計算乘積\, n = p \times q\, = 「55」
(2). 計算 r = φ(n) = (p-1) \times (q-1)\, = 「40」 (φ(n)為歐拉函數)
(3). 銷毀 \,p\, 及\, q\,
(4). 選擇一整數 \,e = 「9」\, 為公鑰,滿足 e < r 且「 (e\,,\,r) = 1 」
(5). 尋找一個私鑰 \,d = 「9」\, , 滿足 e \times d \,\,\%\,\, r = 1
2. A由明文 \,m = 2\, 及公鑰 \,e\, 取得密文 \,c\,
(1).\,\, c = m^e \,\,\%\,\,n = 2^9 \,\,\%\,\, 55 = 512 \,\,\%\,\, 55 = 17
3. B由密文 \,c\, 以私鑰 \,d\, 解出明文 \,m (唯一解)
(1). \,\,m = c^d \,\,\%\,\,n = 17^9 \,\,\%\,\, 55 = 118587876497 \,\,\%\,\, 55 = 2

太大的數字不好算 這裡我用小的數字舉例

RSA 

  • 特性:
要求:0 < m < n,若\,\,m\,\,太長則將其分段

  • 實例:
假設\,\,m_0\,=\, 807,\,\,n\,= 95,\,\,r\,=72,\,\,e\,=5,\,\,d\,=29

則需切成\,\,m_1\,=\, 80;\,\,\,\,\,\,m_2\, = \, 7
c_1 = 80 ^ 5 \,\,\% \,\, 95\,=\, 55;\,\,\,\,\,\,c_2 = 7^5 \,\,\% \,\, 95 \,=\, 87

解密後的\,\,m_1\,=\, 55^{29} \,\,\%\,\, 95 \,=\, 80;\,\,\,\,\,\,m_2\,=\, 87^{29} \,\,\%\,\, 95\,=\, 7

如果直接加密807,\,\,c\,=\, 807^5 \,\,\%\,\, 95 \,=\, 92

解密後的\,\,m\,=\, 92^{29} \,\,\%\,\, 95\,=\, 47,結果不正確
深入分析可以發現,807 \equiv 47\,\,\,(mod\,\, 95)
所以加密過程中必須符合0 < m < n的原則才不會出錯

RSA 

  • 為何安全?
因為整個加解密過程中只有外流 \,n \,、 \,e\, 及 \,c\, ,但外人需要知道
私鑰 \,d\, 才可由 \,c\, 解出 \,m\,

而要知道 \,d\, , 首先要知道 \,r\,

要知道 \,r\, 則要先知道 \,p\, 與 \,q\,

要知道 \,p\, 與 \,q\, 便要先對 \,n\, 做質因數分解

但前面有說到 \,p\, 與 \,q\, 要很大(目前要求乘積 \,n\, 以二進制表示時

要大於等於2048位元較不易被分解)所以安全
  • 為何成立?
  • 可用數學證明但我覺得繼續寫可能我會炸掉、你們會炸掉、簡報篇幅也會炸掉,所以有興趣自己查囉!

RSA 

  • 為何安全?
因為整個加解密過程中只有外流 \,n \,、 \,e\, 及 \,c\, ,但外人需要知道
私鑰 \,d\, 才可由 \,c\, 解出 \,m\,

而要知道 \,d\, , 首先要知道 \,r\,

要知道 \,r\, 則要先知道 \,p\, 與 \,q\,

要知道 \,p\, 與 \,q\, 便要先對 \,n\, 做質因數分解

但前面有說到 \,p\, 與 \,q\, 要很大(目前要求乘積 \,n\, 以二進制表示時

要大於等於2048位元較不易被分解)所以安全
  • 為何成立?
  • 可用數學證明但我覺得繼續寫可能我會炸掉、你們會炸掉、簡報篇幅也會炸掉,所以有興趣自己查囉!

807叫我把證明過程講一遍┌( ಠ_ಠ)┘

RSA:證明

先備知識1:歐拉函數φ(n),n ∈ N

  • 定義:小於n的自然數中與其互質的自然數個數
    • 基礎例子:
  • 計算方式:
  • 特性:
    • 當n ∈ 質數,
      • ​例子:
    • 當n ⊥ m,
      • 例子:
φ(6)\,\,= \,\, 2 \,\,\,(1、5)
φ(n)\,\,=\,\,n-1
φ(mn)\,\,=\,\,(m-1)\,*\,(n-1)
φ(3)\,\,=\,\, 2 \,\,\,(1、2)
φ(15)\,\,=\,\, φ(3) \,\, * \,\,φ(5)\,\,= \,\,(3-1)\,\,*\,\,(5-1)\,\,=\,\, 2\,\,*\,\, 4 \,\,
= \,\, 8\,\,\,(1、2、4、7、8、11、13、14)
令n = f1 \times f2 \times f3 \times ...\,\,,\,\,\phi(n) = n \times \frac{f1-1}{f1} \times \frac{f2-1}{f2} \times \frac{f3-1}{f3}

RSA:證明

先備知識2:費馬小定理

  • 定義: a ∈ Z , p ∈ 質數,則:
a^{p-1} \,\equiv 1\,(mod\,\,p)

 

  • 證明:
  • 原始型態:a ∈ Z , p ∈ 質數,則:
a^p \,-\,a\,=\,k \times p,k\,\in\,Z
⇒ \,\frac{a^p}{p} \,-\,\frac{a}{p}\,=\,k,k\,\in\,Z

代表什麼?

\,\,\,\,\,\,\,\,\,a^p \,和\,a\,除以\,p\,的餘數相同
⇒\,a^p \equiv a\,(mod \,\,p)
(讀作a^p同餘a\,\,mod\,\,p)

RSA:證明

可以提出\,\,a\,\,成\,a\,(a^{p-1} \,-\, 1) = k\,\times\,p
而\,a^p \,-\,a\,=\,k\times p,k\,\in\,Z
⇒ \,\frac{a^{p-1}}{p} \,-\,\frac{1}{p}\,=\,k,k\,\in\,Z

代表什麼?

⇒\,a^{p-1} \,和\,1\,除以\,p\,的餘數相同
⇒\,a^{p-1}\equiv 1\,(mod \,\,p)
因為\,\,a\,\,不一定為\,\,p\,\,的倍數但\,\,\,a(a^{p-1} \,-\, 1)\,\,\,一定是
可以知道\,\,\,(a^{p-1} \,-\, 1)\,\,\,一定是\,\,p\,\,的倍數

RSA:證明

先備知識3:費馬-歐拉定理

a^{\phi(n)} \,-\, 1\,=\,k\times n,k\,\in\,Z
  • 定義:
  • 為何出現?

因為歐拉在證明費馬小定理時發現他是正確的,但沒辦法一般化(他想把「p ∈ 質數」的限制放開

⇒ \,\frac{a^{\phi(n)}}{n} \,-\,\frac{1}{n}\,=\,k,k\,\in\,Z

代表什麼?

⇒\,a^{\phi(n)} \,和\,1\,除以\,n\,的餘數相同
⇒\,a^{\phi(n)}\equiv 1\,(mod \,\,n)

歐拉定理原型:a , n ∈ Z , 當a ⊥ n時,則:

RSA:證明

我們令X = \{x_1\,,\,x_2\,,\,...\,,\,x_{\phi(n)}\}\,\,,這個集合的元素有三個特性:
  • 證明歐拉定理:
a , n \in Z , 當a \perp n,
1. < n
2. \perp n\,(與n互質)
3.值不相同(範圍限定於 < n內,最多只會有0\sim n-1這幾個數,不會重複)
  • 實例:
a\,=\, 2\,,\,n\,=\, 9\,,\,X = \{ 1\,,\, 2\,,\, 4\,,\, 5\,,\, 7\,,\, 8\}
也就是其內所有元素符合歐拉函數\phi(n)的條件

RSA:證明

接著令AX = \{a \times x_1\,\,,\,\,a \times x_2\,\,,\,\,...\,\,,\,\,a \times x_{\phi(n)}\}\,\,
  • 實例:
AX = \{ 2\,,\, 4\,,\, 8\,,\, 10\,,\, 14\,,\, 16\}
再來令a \times x\,\,\,\%\,\,\,n = y \,\,\,\Rightarrow\,\,\,a \times x_i \equiv y_i \,\,(mod\,\,\,n)\,\,\,\,(\, 0 < i <= \phi(n)\,)
Y = \{y_1\,,\,y_2\,,\,...\,,\,y_{\phi(n)}\}
Y = \{ 2\,,\, 4\,,\, 8\,,\, 1\,,\, 5\,,\, 7\}

你發現什麼?

⇒在實例中Y與X集合中的數字完全一樣
為何?

RSA:證明

前面有說到,X集合中的元素有三個特性:

1. < n
2. \perp n\,(與n互質)
3.值不相同

基本上我們只要證明Y集合中的所有元素都符合這三個條件,就能推出Y集合 = X集合這件事(對單一個    是唯一解)

n

RSA:證明

1. < n ❌
2. \perp n\,(與n互質)❌
3.值不相同 ❌

RSA:證明

1. < n ❌
2. \perp n\,(與n互質)❌
3.值不相同 ❌

RSA:證明

  • 證明第三個條件---值不相同
採用反證法,令\,y_i\,\,=\,\,y_j\,\,,
前面有說\,\,y \equiv a\times x,所以\,\,a\times x_i \,\,\equiv\,\,a\times x_j \,\,(mod \,\,n)
\equiv (同餘符號)是適用+、-、\times、指數與任意多項式函數的等量公理的
但除法的等量公理,如\,\,ka \equiv kb\,\,(mod \,\,\,m)\,\,需要\,\,k \perp m\,\,時才適用
不過這裡因為先備條件是\,\,a \perp n\,\,,所以適用,可以直接把兩邊的\,\,a\,\,消掉
變成\,\,x_i \,\,\equiv\,\,x_j \,\,(mod \,\,n)

你發現什麼?

\Rightarrow這不符合X集合的第三個先備條件
\Rightarrow得證:Y集合中所有的元素值皆不相同

RSA:證明

1. < n ❌
2. \perp n\,(與n互質)❌
3.值不相同 ✅

RSA:證明

1. < n ❌
2. \perp n\,(與n互質)❌
3.值不相同 ✅

RSA:證明

  • 證明第二個條件---與    互質
前面有說到\,\,y_i\equiv a\times x_i\,\,(mod\,\,\,n)
先備條件告訴我們,同餘式右邊的\,\,a\,\,和\,\,x_i\,\,都與\,\,n\,\,互質
也就是說\,\,a\,\,和\,\,x_i\,\,裡都沒有\,\,n\,\,的因數
顯然兩個數字乘起來也不會有
得證:Y集合中的所有元素皆與\,\,n\,\,互質
n

RSA:證明

1. < n ❌
2. \perp n\,(與n互質)✅
3.值不相同 ✅

RSA:證明

1. < n ❌
2. \perp n\,(與n互質)✅
3.值不相同 ✅

RSA:證明

  • 證明第一個條件---小於
簡單來說
除法(或取模、取餘數)最原始的計算就是把被除數\,\,a\,\,一直減除數\,\,b\,\,
減了\,\,n\,\,次之後讓\,\,a < b\,\,
結果就是\,\,n\,\,,\,\,取餘數則是取\,\,a\,\,
n
得證:Y集合中的所有元素必小於\,\,n
前面已經令y\,\,=\,\,a \times x\,\,\,\%\,\,\,n

RSA:證明

1. < n ✅
2. \perp n\,(與n互質)✅
3.值不相同 ✅
得證:X集合\,\,=\,\,Y集合

RSA:證明

現在我們已經知道X集合=Y集合

剩下最後一步了!

求X集合中所有元素的乘積,會是:
x_1\times x_2\times ...\times x_{\phi(n)}
而且會等於Y集合中的所有元素乘積:
y_1\times y_2\times ...\times y_{\phi(n)}
所以:
x_1\times x_2\times ...\times x_{\phi(n)} = y_1\times y_2\times ...\times y_{\phi(n)}

RSA:證明

x_1\times x_2\times ...\times x_{\phi(n)}\,\,(\times 1) \equiv a\times x_1 \times a\times x_2\times ...\times a\times x_{\phi(n)} \,\,\,(mod \,\,n)
又回到\,\,y_i\,\,\equiv\,\,a \times x_i\,\,\,(mod\,\,n),代換可得:
先備條件為\,\,x_i \perp n
所以顯然\,\,x_1\times x_2\times ...\times x_{\phi(n)} \perp n
符合同餘等量除法所需的條件
所以接下來是快樂消消時間
\sout{x_1\times x_2\times ...\times x_{\phi(n)}\,\,}(\times 1) \equiv a\sout{\times x_1} \times a\sout{\times x_2}\times ...\times a\sout{\times x_{\phi(n)}} \,\,\,(mod \,\,n)
可得:
1 \equiv a \times a \times...\times a \,\,\,(mod \,\,n)

RSA:證明

1 \equiv a \times a \times...\times a \,\,\,(mod \,\,n)
\phi(n)個!!
得證:a^{\phi(n)} \equiv 1\,\,\,(mod\,\,n)

這裡有幾個a?

RSA:證明

而當n \in 質數,\phi(n) = \,n\,-\, 1
歐拉定理:a^{\phi(n)} \equiv 1\,\,\,(mod\,\,n)
費馬小定理:a^{n-1} \equiv 1\,\,\,(mod\,\,n)

RSA:證明

:證了這麼多,RSA到底為甚麼成立?

我們從加密過程開始看起:

加密式:\,c = m^e \,\,\%\,\,n \Rightarrow m^e = c + k\times n\,,\,k\in Z
我們把左右兩邊都各做d次方,變成\,\,c^d = (m^e + k'\times n)^d
右邊在d次之後會除了\,\,m^{ed}\,\,之外會有一坨數字
但他們都包含\,\,n\,\,,所以還是可以理解成\,\,n\,\,的倍數\,\,
\Rightarrow c^d = m^{ed} + k''\times n
\Rightarrow c = m^e + k\times n\,,\,k'\in Z

RSA:證明

所以\,\,c^d = m^{ed} + k''\times n\,\,可以代換成\,\,c^d = m^{k_1\times r+1} + k''\times n\,\,
看回加密的過程,我們要利用\,\,e \times d \,\,\%\,\, r = 1\,\,
也就是\,\,ed \equiv 1\,\,\,(mod \,\,r)\,\,或「\,\,ed\,-\, 1\,=\,k\times r,k \in Z」的方式找出私鑰\,\,d
由「\,\,ed\,-\, 1\,=\,k\times r,k \in Z」可知,\,\,ed\,\,可以代換成\,\,k\times r\,+\, 1
提出\,\,m\,\,\Rightarrow\,\,c^d = m\,(m^{k_1\times r}) + k''\times n\,\,
從加密過程可以知道,r = \phi(n)
\Rightarrow\,\,c^d = m\,(m^{k_1\times \phi(n)}) + k''\times n\,\,

RSA:證明

\,\,c^d = m\,(m^{\phi(n)})^{k_1} + k''\times n\,\, = \,\,m(1+k_2\times n)^{k_1} + k''\times n\,\,
由歐拉定理又可知,「\,\,m^{\phi(n)}\,\,=\,\, 1\,\,+\,\,k\times n,k\in Z」
所以\,\,c^d = m\,(m^{k_1\times \phi(n)}) + k''\times n\,\,又可以換成:
跟前面一樣,k_2次方後會有一個1和一坨有\,\,n\,\,的數字,可以看成\,\,n\,\,的倍數
\Rightarrow\,\,c^d = m \,+\, k'''\times n\,\,
\Rightarrow\,\,m = c^d\,-\,k'''\times n\,\,
由0 < m < n的原則\Rightarrow\,\,m = c^d \,\,\%\,\, n
這啥?解密式!! \Rightarrow 得證

RSA 

  • 一些人為疏失造成的弱點與攻擊方式:
    • p、q值太小,可能已經被分解過    FactorDB
    • 當                   或                     Wiener's Attack
    •  
\Rightarrow
q < p < 2q
d < \frac{1}{3}n^{\frac{1}{4}} \Rightarrow
當\,\,e\,\,過小導致\,\,c\,\,= m ^ e \,\,\%\,\, n = m ^ e\,\,時,
直接對\,\,c\,\,開\,\,e\,\,次方即得明文

等等...

RSA 

  • 例外狀況---量子電腦:
    • 可以做非常快的計算,一般電腦約需10年才可計算的大數質因數分解它可能只要算一個禮拜,所以可以很快破解RSA加密
  • Hint: 平時可以偷用解密工具,但如果要參加比賽就要全部搞懂,至少要會寫解密程式和一些攻擊的方式

RSA 

OTP

  • One-Time pad,一次性密碼
  • 金鑰為一個「與明文等長」且「與明文不同」的字串
  • 加密方式為將「明文」與金鑰全部換成八位元的ASCII code後做一次XOR
  • 解密方式為將「密文」與金鑰全部換成八位元的ASCII code後做一次XOR
  • 唯二的弱點為攔截以及「金鑰與明文等長」

OTP---例子

假設現在我要加密的是Otter這個單字

並且我選用Eagle來做為金鑰

明文
Ascii code
O
01001111
t
01110100
t
01110100
e
01100101
r
01110010
金鑰
Ascii code
E
01000101
a
01100001
g
01100111
l
01101100
e
01100101
Xor(密文) 00001010 00010101 00010011 00001001 00010111

OTP---例子

我有了Xor的結果(密文)

接著我要解密則需要把密文和金鑰做一次Xor就行

Xor(密文) 00001010 00010101 00010011 00001001 00010111
金鑰
Ascii code
E
01000101
a
01100001
g
01100111
l
01101100
e
01100101
Ascii code
明文
01001111
O
​01110100
t
01110100
t
01100101
e
01110010
r

OTP

Visual Cryptography

  • 視覺密碼
  • 加密:以原圖及金鑰圖像疊合的方式配合AND、XOR等運算得出加密圖像
  • 解密:反向運算後即可得出原圖
  • 優點:如果沒有密鑰圖則幾乎無法分析
  • 缺點:容易外流

Visual Cryptography---分析

利用Stegsolve

將第一張圖片開啟之後

按下Image Combiner

再開啟另一張圖片

Visual Cryptography---分析

之後就會出現右圖畫面

左上角的Xor是預設的分析模式

按鍵盤左右箭頭或下方左右按鈕可以切換模式

Save按鈕則可保存目前圖片

Visual Cryptography---分析

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

本次課程內容

CTF簡介

  • 這是什麼?
  • Why CTF?
  • 類型介紹
  • 創建PicoCTF帳號

安裝各種東西

  • Windows
  • Wireshark
  • WSL
  • Python
  • Binwalk
  • Ruby&zsteg
  • Stegsolve

指令&符號補充

  • man
  • net cat / nc
  • pipe( | )
  • strings

Web

  • 基本介紹
  • 網頁運作
  • HTTP
  • 傳輸方式
  • 開發人員工具
  • HTML架構
  • curl
  • Cookie
  • 前端
  • robot.txt

Reverse Engineering & PWN

  • 為何不教?

Cryptography

  • 加密方式有哪些?
  • Caesar cipher
  • 各種ROT
  • RSA
  • OTP
  • Visual Cryptography

MISC

  • 名稱來源?
  • 包含什麼?
  • Recon(訊息收集)
  • Encode(編碼轉換)
  • Forensics & Stego(爭議)

Forensic & Stego

  • 這是什麼
  • 檔案頭尾
  • Hexed.it
  • Stegsolve
  • Binwalk
  • 最低有效位
  • 封包
  • Wireshark

Reverse Engineering & PWN

  • 為何不教?

為何不教?

  • 因為這兩個東西比較難,要深入講解時間遠遠不夠,比如:
    • Reverse Engineering牽涉到機器碼、組合語言、資訊交換分析等等
    • PWN則需要對記憶體和程式執行流程的高度瞭解
  • 我也只會一點點基礎的東西

 

p.s.如果你想深入研究PWN,我推薦一個網站

Q&A&DO

2024 Winter Camp CTF

By MH Yang

2024 Winter Camp CTF

  • 101