iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
Security

駭客新手指南:從程式小白轉職成初級駭客系列 第 4

Day4 HTTP request & API 程式間溝通的開端

  • 分享至 

  • xImage
  •  

上一篇講了一下常見的協定,而今天我們要更深入的探討HTTP Request怎麼應用,這些request不只能用於正常的數據交流,更是駭客攻擊的一種手段。

HTTP Request

結構

  • Request Line(請求行): 包含請求方法(如 GET、POST)、請求的 URL 和 HTTP 版本。請求方法指示了我們要對伺服器執行的操作,例如 GET 用於獲取資料,POST 用於發送資料。

  • Headers(標頭): 提供額外的資訊,比如客戶端的瀏覽器類型、主機名稱、支持的內容類型等。這些標頭有助於伺服器理解請求的上下文。
    常見的標頭包括:

    • Host: 指明目標伺服器的主機名(例如 www.example.com)。
    • User-Agent: 描述發出請求的客戶端的類型和版本。
    • Authorization: 包含身份驗證信息,常用於 API 請求或需要登入的網站。
    • Accept: 告訴伺服器客戶端可以處理的內容類型,如 text/html 或 application/json。
  • Body(主體): 在某些請求方法(如 POST 和 PUT)中,Body 包含要發送的數據,如表單數據或 JSON 格式的資料。

API(Application Programming Interfaces)

API是一組定義了應用程式、服務或平台之間如何互相溝通的規則和工具。
通過 API,開發者可以與應用程式或服務進行通信,無需了解其內部運作細節。API 通常使用 HTTP 協定進行通訊,允許客戶端向伺服器發送 HTTP Request 並接收回應。

數據格式

  • JSON
  • XML

應用

  1. 網頁應用程式: 使用 API 與後端伺服器進行通訊,例如用戶登錄、獲取數據或提交表單。
  2. 手機應用程式: 通過 API 與伺服器或其他應用程式交互,獲取或提交數據。
  3. 第三方服務: 允許應用程式整合其他服務,如支付處理、社交媒體分享或地圖服務。

駭客如何利用?

  1. 若API沒有正確的身分驗證及授權(如API Token),便可以直接使用cURL獲取一些隱私資料
  2. SQL Injection:加入一些SQL語法調出資料庫的資料(如http://example.com/api/users?id=1' OR '1'='1)

實戰演練

環境架設:自己電腦安裝python,或使用google colab
記得 pip install requests

HTTP GET

import requests

response = requests.get('https://jsonplaceholder.typicode.com/posts/1')

if response.status_code == 200:
    data = response.json()
    print("Post ID:", data['id'])
    print("Title:", data['title'])
    print("Body:", data['body'])
else:
    print("請求失敗,狀態碼:", response.status_code)

結果範例

Post ID: 1
Title: sunt aut facere repellat provident occaecati excepturi optio reprehenderit
Body: quia et suscipit
suscipit recusandae consequuntur expedita et cum
reprehenderit molestiae ut ut quas totam
nostrum rerum est autem sunt rem eveniet architecto

HTTP POST

import requests

payload = {
    'title': 'http post',
    'body': 'test',
    'userId': 1
}

response = requests.post('https://jsonplaceholder.typicode.com/posts', json=payload)

print("Status Code:", response.status_code)
print("Response Body:", response.json())

結果範例

Status Code: 201
Response Body: {'title': 'http post', 'body': 'test', 'userId': 1, 'id': 101}

Status Code: 201為表示成功的狀態碼


上一篇
Day3 每天用但是不知道的TCP、UDP、HTTP & HTTPS
下一篇
Day5 淺談加解密與雜湊
系列文
駭客新手指南:從程式小白轉職成初級駭客30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言