初見Web娘

講師:堇姬 @ Izcc-ctf

2023.11.10

網際網路基礎

堇姬Naup(網管/美宣)

成電二年級/幽夜工作室繪師/台灣好厲駭學員

CKCSC36

DC : naup_sumire_hime

只是個喜歡資安的鶴,涉獵Crypto、Web、OSINT,最近有打算學reverse,我是Web狗

喜歡看輕小說、動畫、Vtuber、打音遊、畫畫,就是一個長年混跡ACG的宅女。

水銀燈我老婆

Linux娘圖鑑

Ubuntu娘

Arch Linux 娘

Debian娘

Manjaro娘

Unix娘

Fedora娘

openSUSE娘

NixOS娘

ArchLabs娘

LFS娘

Windows娘圖鑑

WIN10

WIN11

WIN95

WIN8

WIN7

Windows Me

Windows 2000

Windows XP

Windows XP HOME

Windows Vista

 Windows CE

Windows Server 2003

Windows NT4.0

WINDOWS 3.1

WEB是啥

WEB就是WEB(?

WEB就是網路安全,簡單來說,通靈+非常雜

需要的知識

  • WEB開發知識

  • 編寫腳本技能

  • Linux

  • 網路知識

  • 足夠的靈力
    ......

  • 英文不要看到就討厭,很多文章都是英文不過你可以用翻譯
  • google!!!資安是可以查資料的!!!WEB很多東西很雜,不會的東西就去查
  • 可以試著寫writeup
  • 找到能夠跟你一起打的隊友
  • 可以去多混社群
  • 可以多打比賽跟題目
  • 不要直接貼上flag!!!
  • 可以去玩galgame給美少女幸福,這樣比賽時比較能夠通靈出來

打WEB可以注意

練習網站

網站

簡單還說就是你可以用你的瀏覽器找到的一個頁面,每個頁面有不同功能

像是可以給ddd看蘿莉油圖的pixiv

或是讓kaiichen電爛我們的ckcsc CTF

全球資源定位器

URL

相當於一個門牌,可以用來找到對應的資源,如網頁、圖片等...

?password=123&user=naup

參數

  • 協定:用甚麼協定溝通

  • 域名:資源所在的主機名稱

  • 路徑:主機上資源所在的位置

  • 參數:GET請求時傳遞給server的資料

  • 子網域:由你註冊網域延伸出來,在同個網域創建不同的子網域可以用來區分更多的服務或是不同的網站

協定

Protocol

協定就是一個「標準」。協定是為了讓彼此溝通而建立的規範,制定標準以統一格式

HTTP -> 訪問和瀏覽網頁

SMTP -> 電子郵件

TCP/IP -> 網路通訊

FTP -> 文件傳輸

ICMP -> 傳達連線能力和網路狀態

HTTP

HyperText Transfer Protocol

超文本傳輸協定

電腦間的一種溝通方式

為甚麼電腦間需要溝通?

用哪種方式溝通

對應到主機位置

訪問網站

在網站做的許多操作都有可能使用到這個溝通

例如:購買可愛的WIN11娘掛軸

HTTPS

超文字安全傳輸通訊協定 (HTTPS) 是 HTTP的安全版本,HTTPS 經過加密,以提高資料傳輸的安全性。

HTTP 不安全的理由

1. HTTP 的數據是明文傳遞

2. HTTP 沒有身份驗證的功能

3. HTTP 沒有可靠的驗證內容的方法

IP

(Internet Protocol)

就像身分證一樣,能夠找到你這個人,這個裝置一樣

公有IP

全球唯一,在公網可以被識別以及連結

私有IP

用於內部網路的地址,可於同一個網路底下互相溝通,但不可以在公網上被識別或連結

固定IP

設備或裝置上連上網後一直都不會變動的IP,常常用於要求要穩定的,因為是固定IP,別人要連上你就不需要一直改連上你的IP

浮動IP

每次連上網路時都會被重新分配一個IP,這樣能夠有效的運用IP資源

請問你家電腦是用固定還是浮動IP?

浮動IP!!!

  • 節省IP資源

  • 使用浮動IP能夠根據狀況,適應不同環境

  • 固定IP需手動配置,對一般家庭來說很麻煩又複雜

伺服器是用固定還是浮動IP?

固定IP!!!

  • 伺服器需要持續運營、穩定提供服務,用固定才能確保客戶能一直找到該服務

  • 管理上通常需要遠程維護,所以用固定IP能夠方便連上他

  • 需要綁域名的話,固定IP也比較穩定

  • 其他設置方便

DNS

(domain name server)

提供域名和 IP address 互相轉換

DNS主機

人名->域名

電話號碼->IP

request & response

這段下面的事之後的課程!!!

Request格式

start line

header

CRLF

Body

Response格式

start line

header

CRLF

Body

request

response

start-line

因應請求、回應,分別稱為

請求行 request-line
狀態行 status-line

request-line

方法 (method)、
請求目標 (request-target)、
HTTP 版本 (HTTP-version)

HTTP Method

  • GET:向指定的資源發出「顯示」請求。
  • POST:向指定資源提交資料,並且Body中可帶傳輸的資料。
  • PUT:上傳或取代指定的資源。
  • PATCH : 覆蓋資料
  • DELETE:刪除指定的資源。
  • HEAD:與GET相似,但只會取得標頭與HTTP狀態。
  • OPTIONS:回傳這個伺服器支援的所有HTTP Method。
  • TRACE:回傳收到的請求內容。

 

HTTP-version

HTTP 版本

Ex : HTTP/1.1、HTTP/1.0

status-line

HTTP 版本 (HTTP-version)、
狀態碼 (status-code)、
原因短語 (reason-phrase)

status-code

  • 1xx – 連接正在進行中

  • 2xx – 請求成功完成,伺服器給了瀏覽器預期的響應

  • 3xx –這個請求被收到了,但是需要重新定向

  • 4xx –客戶端看起來可能發生了錯誤,妨礙了伺服器的處理

  • 5xx – 客戶端的請求是有效的,但伺服器未能完成請求

  • 200 -> 一切都正常

  • 301 -> 永久性轉址

  • 302 -> 暫時性轉址

  • 404 -> 該網頁找不到

  • 500 -> 內部服務器錯誤

header

紀錄各種資料/設定,等基本信息

可以想像是包裹外貼的那張紙

Host: echo.paw.cloud
Content-Type: application/json; charset=utf-8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:53.0) Gecko/20100101 Firefox/53.0
Connection: close
Content-Length: 136

Host

要訪問的目標主機的域名或IP

Content-Type

指示請求中攜帶的數據類型(上方的是JSON格式、UTF-8編碼)

User-Agent

發送請求的客戶端應用或瀏覽器信息("Mozilla Firefox"瀏覽器發送,版本是53.0,在Macintosh操作系统上)

Connection

暗示連結類型(close表示請求完後連結會關閉)

Content-Length

後續要讀取消息的長度

 

Macintosh 128K

CRLF

(carriage return followed by line feed)

網際網路嚴謹的換行標準

\r\n

CR = 回車 (Carriage Return)

LF = 換行 (Line Feed)

  • 許多語言表示為: \n
  • Unicode 中為 0x0A (十進制的 10)
  • 許多語言表示為: \r
  •  Unicode 中為 0x0D (十進制的 13)

雖然多數語言 \n 就能做到換行,規範上,仍以 \r\n 為主。

CR跟LF差異

  • 在不同作業系統中,CR 和 LF 的組合方式不同

Windows -> CRLF

Unix/Linux -> LF

  • CR通常表示將游標移動到當前行的起始位置,但不會移動到下一行
  • LF符號通常表示移動游標到下一行的起始位置,實現文本的換行

body

訊息主體,像包裹的箱子,是訊息中乘載資料的地方。

從發出請求到連上網站

1.在瀏覽器上輸入網址

2.DNS域名解析

3.用解析出來的IP連上對應的主機

4.server處理請求(MVC...)

5.回傳頁面

MVC

 

cookie

Cookie是指某些網站為了辨別使用者的身分而在用戶端瀏覽器上存儲的一些小型文本檔案

使

我已滿18歲

GET / HTTP/1.1
HTTP/1.1 200 OK
Set-Cookie: over18=1

設定cookie到瀏覽器

使

再次訪問

GET / HTTP/1.1
HTTP/1.1 200 OK
Set-Cookie: over18=1

設定cookie到瀏覽器

編碼 & 加密 & 雜湊

jg7LzS3fpcH15kKScqUMdg==(加密->ECB)

TmF1cEpqaW4= (編碼->base64)

9bb2508637df52b17523e4a4a9f727fca1923134a8ace76f09220a3b908e03d2(雜湊->sha256)

感覺都是亂碼,沒什麼差

編碼(encode)

編碼並不會修改資料、也沒有任何加密的效果,單純就是換個方式來呈現

base64

基於64個可列印字元來表示

6Ji/6I6J5o6n

蘿莉控

WIN11娘

V0lOMTHlqJg=

加密(encrypt)

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64

def encrypt_ecb(key, plaintext):
    cipher = AES.new(key, AES.MODE_ECB)
    padded_plaintext = pad(plaintext.encode('utf-8'), AES.block_size)
    encrypted = cipher.encrypt(padded_plaintext)
    return base64.b64encode(encrypted).decode('utf-8')

def decrypt_ecb(key, ciphertext):
    cipher = AES.new(key, AES.MODE_ECB)
    encrypted_bytes = base64.b64decode(ciphertext.encode('utf-8'))
    decrypted = cipher.decrypt(encrypted_bytes)
    return unpad(decrypted, AES.block_size).decode('utf-8')

if __name__ == "__main__":
   
    key = b'YourSecretKey123' 
    plaintext = "NaupJjin"
    
    encrypted = encrypt_ecb(key, plaintext)
    print("加密後:", encrypted)

    decrypted = decrypt_ecb(key, encrypted)
    print("解密後:", decrypted)

加密後: jg7LzS3fpcH15kKScqUMdg==
解密後: NaupJjin

密鑰:YourSecretKey123

雜湊(hash)

  • 由雜湊值是無法反推出原來的訊息

  • 雜湊值必須隨明文改變而改變

  • 明文相同出來的雜湊值相同

雜湊像果汁機一樣

訊息

神秘物質

import hashlib

def calculate_sha256_hash(input_string):
    # 建立一個SHA-256雜湊物件
    sha256_hash = hashlib.sha256()
    
    # 將輸入的字串轉換為位元組,並更新雜湊物件
    sha256_hash.update(input_string.encode('utf-8'))
    
    # 取得計算後的雜湊值(以16進位表示)
    hash_value = sha256_hash.hexdigest()
    
    return hash_value

# 要計算雜湊的輸入字串
input_string = "NaupJjin"

# 計算SHA-256雜湊值並輸出
sha256_hash = calculate_sha256_hash(input_string)
print("Input:", input_string)
print("SHA-256 Hash:", sha256_hash)

用sha256雜湊函式雜湊信息

sha256

LAND attack

封包中來源和目的端的IP是同一個

無限循環發送請求

DNS cache pollution

刻意製造出來錯誤的紀錄

DNS Reflection Attack

CTF-Web先備知識

By naup96321

CTF-Web先備知識

  • 98