這不是真正的生產代碼!這是在 Google CTF 中介紹的,用于查找和了解應用程式漏洞以及如何防范這些漏洞
我試圖理解我在 Google CTF 上看到的一種奇怪的 SQL 語法。假設我們設定了一個這樣的表:
create table users (
username varchar(20),
password varchar(20) );
insert into users (username, password)
values ('admin', 'supersecretrandompassword');
現在,如果我們運行以下查詢:
select *
from users
where username = 'admin'
and password = username = '';
它將檢索用戶的用戶名和密碼admin!password = username = 9但是,在執行(或任何其他數字)時,它不起作用。
所以我的問題是,最后一個子句如何評估,為什么它適用于字串而不適用于數字?
謝謝!
uj5u.com熱心網友回復:
布爾運算式password = username = ''從左到右計算,如:
(password = username) = ''
所以:
- if
password = usernameistrue運算式等價于1 = '' - if
password = usernameisfalse運算式等價于0 = ''
在這兩種情況下''都隱式轉換為比較之前的數字0。
在您的情況下,我懷疑password = username是false,因此該WHERE子句等效于:
where username = 'admin' and 0 = 0;
或更簡單:
where username = 'admin';
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/438527.html
