it-swarm-eu.dev

SQL injekce s AND 1 = 1

Vysvětlete prosím význam slova „AND 1 = 1 "při SQL injekčním útoku. Je to z cvičení na mé univerzitě.

select * from user where id = 'smith'' AND 1=1;--  and birthdate = 1970;

nebo

select * from user where id = 'smith' and birthdate = 1970 AND 1=1;--;
20
Alex

Specifickou otázkou je injekce SQL s AND 1 = 1 a nikoli OR 1 = 1. Existuje zde velký rozdíl v tom, na co se OP ptá. Kdybych byl vaším učitelem a vy jste mi poskytli odpověď JonathanMueller, dostali byste mizernou třídu, protože této otázce nerozumíte.

AND 1 = 1 se obvykle používá v slepé SQL injekce . To je, když musíte určit mezi skutečným nebo falešným stavem z výsledku aplikace, abyste zjistili, jaký je skutečný výsledek. Ve výsledku nejsou uvedena data, jediná vrácená věc je stav změny.

Pokud se pokusíte využít Blind SQL injection s OR 1 = 1, nezdaříte, protože primární použití OR 1 = 1 je vytvořit vždy true pro získání co nejvíce dat z databáze nebo pro vynucení pravdivého příkazu v případě zneužití přihlašovacího skriptu.

Příklad praktického naslepo používajícího SQL:

Používáme náš příklad: http://www.site.com/news.php?id=7 Zkusme to: http://www.site.com/news.php ? id = 7 a 1 = 1 <--- to je vždy pravda a stránka se načítá normálně, to je v pořádku.

http://www.site.com/news.php?id=7 a 1 = 2 <--- je to nepravdivé, takže pokud na vrácené stránce chybí nějaký text, obrázek nebo nějaký obsah pak je tento web citlivý na slepou sql injekci.

Další příklad, kde se pokusíte přijít na verzi MySQL:

http://www.site.com/news.php?id=7 a podřetězec (@@ verze, 1,1) = 4 Toto by mělo vrátit PRAVDA, pokud je verze MySQL 4. Nahradit 4 s 5, a pokud dotaz vrátí PRAVDA, pak je verze 5.

Příklady převzaty z: http://www.exploit-db.com/download_pdf/14475

34
Chris Dale

Normálně byste viděli frázi „NEBO 1 = 1“ “. Důvodem je, že pokud programátor nezpracovává správně parametry (jako je ID uživatele), mohl by útočník použít OR 1=1 pro vrácení všech dat v tabulce.

Řekněme například, že chceme získat podrobnosti o uživateli jménem smith. Dotaz může být select * from user where id = '?', kde se otazník nahradí parametrem ze vstupu uživatele. Pokud útočník prošel smith' OR 1=1--, výsledný SQL bude select * from user where id = 'smith' OR 1=1--'. V tomto případě je přeskočena druhá jednoduchá nabídka z původního dotazu, protože je součástí komentáře a dotaz vrátí všechna data v uživatelské tabulce.

15
JonathanMueller

Chcete-li uvést (poněkud triviální, mimo horní část hlavy) příklad injekce sql, představte si tento dotaz někde v kódu aplikace ...

select 1 from user where name='[NAME]' and password='[PASS]'

poté, co Malicious Guy nastaví výše uvedené parametry podle svého výběru, získáte:

select 1 from user where name='admin' --' and password='[PASS]'
 pomocí následujících vybraných neanitizovaných hodnot: 
 [NAME] = '-' a heslo = '[PASS]' 
 hodnota proměnné [PASS] není důležitá 

Tedy za předpokladu, že dotaz má vrátit 1 pro úspěch a prázdnou sadu pro neplatného uživatele nebo průchod, číslo 1 by bylo chybně vráceno, což by tomuto zlému uživateli umožnilo přihlásit se jako „administrátorský“ účet.

0
Garrett