iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
佛心分享-刷題不只是刷題

CTF 刷題系列 第 24

CTF Day 24 Web(SQLiLite)

  • 分享至 

  • xImage
  •  

題目 SQLiLite

這是個簡單的sqli的問題
https://ithelp.ithome.com.tw/upload/images/20241008/20155574W6SUQtgjpS.png

輸入 : ' or 2=2--
https://ithelp.ithome.com.tw/upload/images/20241008/20155574hYvhx7urSd.png

這像是把--後面都註解
https://ithelp.ithome.com.tw/upload/images/20241008/20155574TNjaRuO0X1.png
https://ithelp.ithome.com.tw/upload/images/20241008/201555748rKkr3PnCt.png

預防方法#1:Query Parameterization(查詢參數化)

SQL查詢和用戶提供的參數分開
資料庫會將參數作為純數據處理,而不是查詢語句的一部分

// 準備查詢語句,使用 :username 和 :password 作為佔位符
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");

// 綁定參數,然後執行查詢
$stmt->execute(['username' => $username, 'password' => $password]);

// 獲取結果
$result = $stmt->fetchAll();


使用 :username 和 :password 作為佔位符,而不是直接插入變數值。
execute 函數會將 ['username' => $username, 'password' => $password] 中的值綁定到佔位符中。
即使 password 輸入了類似 ' OR '1'='1 的值,數據庫也會將其視為純文本,而不會將其作為 SQL 語句執行。

上一篇
CTF Day 23 Web(findme)
下一篇
CTF Day 25 Web(Irish-Name-Repo 2)
系列文
CTF 刷題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言