講師:堇姬 @ Izcc-ctf
2023.11.10
網際網路基礎
成電二年級/幽夜工作室繪師/台灣好厲駭學員
DC : naup_sumire_hime
只是個喜歡資安的鶴,涉獵Crypto、Web、OSINT,最近有打算學reverse,我是Web狗
喜歡看輕小說、動畫、Vtuber、打音遊、畫畫,就是一個長年混跡ACG的宅女。
水銀燈我老婆
Ubuntu娘
Debian娘
Manjaro娘
Unix娘
Fedora娘
openSUSE娘
NixOS娘
ArchLabs娘
LFS娘
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
ckcscCTF http://ctf.ckcsc.net/
picoCTF https://picoctf.org/
hacker101 https://ctf.hacker101.com/
LoTuXCTF https://lotuxctf.com/
像是可以給ddd看蘿莉油圖的pixiv
或是讓kaiichen電爛我們的ckcsc CTF
URL
?password=123&user=naup
參數
Protocol
HTTP -> 訪問和瀏覽網頁
SMTP -> 電子郵件
TCP/IP -> 網路通訊
FTP -> 文件傳輸
ICMP -> 傳達連線能力和網路狀態
用哪種方式溝通
對應到主機位置
例如:購買可愛的WIN11娘掛軸
(Internet Protocol)
(domain name server)
DNS主機
start line
CRLF
start line
CRLF
request
response
方法 (method)、
請求目標 (request-target)、
HTTP 版本 (HTTP-version)
Ex : HTTP/1.1、HTTP/1.0
HTTP 版本 (HTTP-version)、
狀態碼 (status-code)、
原因短語 (reason-phrase)
1xx – 連接正在進行中
2xx – 請求成功完成,伺服器給了瀏覽器預期的響應
3xx –這個請求被收到了,但是需要重新定向
4xx –客戶端看起來可能發生了錯誤,妨礙了伺服器的處理
5xx – 客戶端的請求是有效的,但伺服器未能完成請求
可以想像是包裹外貼的那張紙
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
後續要讀取消息的長度
(carriage return followed by line feed)
Windows -> CRLF
Unix/Linux -> LF
1.在瀏覽器上輸入網址
2.DNS域名解析
3.用解析出來的IP連上對應的主機
4.server處理請求(MVC...)
5.回傳頁面
MVC
使
用
者
瀏
覽
器
我已滿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)
基於64個可列印字元來表示
6Ji/6I6J5o6n
蘿莉控
WIN11娘
V0lOMTHlqJg=
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
雜湊像果汁機一樣
神秘物質
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)