txsql.py je open-source nástroj pro bezpečnostní testery zaměřený na odhalování a zneužití SQL injection zranitelností ve webových aplikacích.
Nástroj funguje v textovém režimu (CLI) a kombinuje skener SQLI zranitelností s exploitačními funkcemi. Umožňuje jak detekci SQL injekce (různé typy útoků: boolean-based, time-based, error-based, UNION apod.), tak i extrakci dat z postižených databází. Důraz je kladen také na anonymitu testera – veškerý provoz lze směrovat skrz síť Tor, aby bylo zajištěno soukromí a sníženo riziko odhalení identity testera.
Před spuštěním txsql.py se ujistěte, že máte k dispozici následující prostředí a nástroje:
Operační systém: Kali Linux.
Python: Verze 3.x nainstalovaná v systému.
Další požadavky: Nástroj vyžaduje externí Python moduly mimo standardní knihovny ty najdete v requirements.txt
Nástroj proxychains4: Pro směrování provozu skrz proxy/Tor (Kali Linux jej obsahuje standardně ale né verzi 4).
Služba Tor: Nainstalovaná a spuštěná (pro vytvoření anonymního proxy řetězce).
Připojení k internetu: Nutné pro testování vzdálených webových aplikací.
Oprávnění: Ujistěte se, že máte povolení k testování cílové aplikace.
Instalace a nastavení prostředí
Instalace externích knihoven: pip install -r requirements.txt
Instalace Tor: Na Kali Linuxu nainstalujte Tor příkazem: sudo apt-get update && sudo apt-get install tor.
Po instalaci službu Tor spusťte (sudo service tor start). Tor by měl běžet jako daemon a naslouchat na sock5 proxy portu 127.0.0.1:9050 (výchozí nastavení).
Kontrola proxychains4: Ověřte konfiguraci v souboru /etc/proxychains4.conf. Doporučuje se povolit dynamic_chain (dynamický řetězec proxy) pro plynulé použití Toru.
Ujistěte se, že na konci souboru je řádek pro Tor proxy:
socks5 127.0.0.1 9050
Tento řádek zajistí, že veškerý provoz přes proxychains bude směrován do lokálního Tor klienta.
Test nastavení: Pro ověření, že je vše správně nastaveno, můžete například spustit jednoduchý test přes proxychains, například:
proxychains4 curl -I https://httpbin.org/ip
Tento příkaz by měl vrátit IP adresu výstupního Tor nodu, což potvrdí, že proxychains+Tor funguje.
Příklad spuštění txsql.py (přes proxychains + Tor)
Nástroj spustíte z terminálu příkazem například takto:
proxychains4 python txsql.py
Tím zajistíte, že txsql.py poběží a veškeré jeho síťové požadavky budou směrovány přes síť Tor (díky proxychains). Po spuštění uvidíte uvítací obrazovku s menu (viz výše) a výzvu k výběru akce. Typický postup práce s nástrojem:
Výběr akce: Zadejte číslo požadované funkce z menu (1–7).
Zadání cíle: Nástroj se následně zeptá na URL nebo doménu cílové webové aplikace. Zadejte buď celou URL (např. http://vulnerable-app.test/page.php?id=1) nebo pouze doménu (hackthissite.org), podle zvolené akce.
Probíhající test/exploit: Nástroj začne provádět testy nebo útoky dle zvolené možnosti. Během běhu vypisuje průběžné informace o požadavcích, nalezených zranitelnostech či získaných datech.
Výsledky: Po dokončení akce (nebo i průběžně) nástroj zobrazí výsledky – nalezené potenciální zranitelnosti nebo vypsaná data z databáze.
Příklad: Pokud spustíte nástroj s volbou 1 (Test SQLi v URL parametrech) a zadáte http://testphp.vulnweb.com/artists.php?artist=1, txsql.py vyzkouší řadu SQLi payloadů na parametr artist a ohlásí, zda je zranitelný.
Možnosti a funkce nástroje Nástroj txsql.py (TX-CORE SQLI Scanner & Exploiter) nabízí v hlavním menu následující funkce:
1. Test SQL Injection v URL parametrech: Provede testování zadané URL adresy a jejích parametrů na SQL injection.
Uživatel specifikuje URL (nebo doménu) s parametrem a skript automaticky vkládá stovky až tisíce různých SQLi payloadů.
Sleduje odpovědi serveru (HTTP kódy, obsah, chyby) a detekuje možnou zranitelnost. Dokáže rozpoznat například generické SQL chyby, indikace boolean-based útoku (podmínka OR 1=1 apod.), nebo zpoždění u time-based injection.
Pokud je nalezena známka zranitelnosti, zobrazí se upozornění či typ nalezené SQLi (např. "Error-Based SQLi detected").
2. Fuzzování HTTP hlaviček na SQLi: Otestuje, zda webová aplikace není zranitelná na SQL injection prostřednictvím HTTP hlaviček.
Nástroj postupně vkládá škodlivé SQL řetězce do hlaviček typu User-Agent, Cookie, Referer aj. a sleduje reakci serveru.
Pokud server chybuje nebo reaguje neobvykle (např. interní chyba při specifické hlavičce), může to indikovat SQL injection zranitelnost v zpracování hlaviček na straně serveru.
3. "Payload" útok na běžné názvy parametrů: Pokouší se objevit SQLI zranitelnost tzv. slepým útokem na URL, i když neznáte konkrétní parametr.
Skript vezme zadanou URL nebo doménu a bude zkoušet přidávat běžné parametry s maliciózními hodnotami (např. ?id=1' OR '1'='1, ?page=1' OR '1'='1, atd.) na různé známé názvy (id, page, cat, product apod.).
Cílem je odhalit zranitelnost i tam, kde URL explicitně neobsahuje parametr – skript fuzzuje běžné parametry a monitoruje odezvu aplikace pro náznaky injekce.
4. Získat názvy tabulek z databáze (exploitation): Pokud byla potvrzena SQL injection zranitelnost (např. pomocí předchozích funkcí) a je možné pomocí ní získat data, tato volba umožní enumerovat strukturu databáze.
Konkrétně se skript pokusí vypsat všechny názvy tabulek v databázi, ke které má aplikace přístup.
Typicky využívá dotaz do information_schema.tables (platí pro MySQL a podobné systémy) přes nalezenou injekci.
Uživatel zadá základní cílovou URL a platný injekční vstup, a nástroj vypíše seznam tabulek, což pomůže testerovi identifikovat zajímavé části databáze (např. tabulky users, orders atd.).
5. Získat názvy sloupců z konkrétní tabulky: Po zjištění názvů tabulek může tester chtít vědět, jaká data tabulka obsahuje.
Tato funkce umožní vypsat názvy všech sloupců v zadané tabulce.
Uživatel specifikuje název tabulky (zjištěný předchozím krokem) a skript prostřednictvím SQL injection dotazu do information_schema.columns získá seznam sloupců pro danou tabulku.
Díky tomu lze zjistit například, jaké sloupce má tabulka users (např. id, username, password, email, ...).
6. Dumpnout data z tabulky (ručně): Umožňuje extrakci dat z vybrané tabulky databáze.
Tato volba je interaktivní – po výběru funkce nástroj pravděpodobně vyzve uživatele k zadání jména tabulky a případně specifikaci sloupců nebo podmínek.
Následně se pokusí pomocí SQL injection získat záznamy (řádky) z dané tabulky. Výstupem mohou být citlivé údaje, například seznam uživatelů a hashů hesel apod.
(Samozřejmě pouze v rámci legálního testu zabezpečení!)
7. Smart SQLI Dump přes UNION SELECT: Tato pokročilá funkce se pokusí automatizovaně extrahovat data z databáze využitím techniky UNION SELECT.
Skript inteligentně zkombinuje kroky 4, 5 a 6 – snaží se odhalit schéma databáze a získat data, aniž by uživatel musel každý krok provádět manuálně.
Například může automaticky zjistit počet sloupců pro platný UNION dotaz, vyčíst názvy tabulek a následně z každé tabulky zkusit získat několik záznamů.
Smart dump je užitečný pro rychlé ověření, co vše lze z kompromitované databáze vytáhnout jedním příkazem.
Je však třeba opatrnosti – velké množství dat může generovat mnoho dotazů a trvat velmi dlouho (zvláště přes pomalé připojení Tor).
Ukázky výstupů z txsql.py
Pro ilustraci, jak txsql.py pracuje, uvádím několik ukázek výstupu z terminálu při detekci a exploitaci SQLi. (Pozn.: Příklady jsou demonstrované na veřejných testovacích stránkách a mohou být zkrácené pro přehlednost.)

Detekce SQL injection: Následující ukázka z konzole demonstruje, jak nástroj testuje parametry pomocí různých payloadů a vyhodnocuje odpovědi. Můžeme vidět označení jako [GENERIC ERROR] nebo [TIME-BASED], což signalizuje, že aplikace reagovala chybovým hlášením nebo prodlevou na daný vstup – to naznačuje zranitelnost typu error-based, resp. time-based SQLi. Nástroj prochází rozsáhlý slovník payloadů (v řádu tisíců kombinací) – v ukázce vidíme průběh (335/8512 testů dokončeno). Pokud je zjištěna zranitelnost, bude zvýrazněna v konzoli:
Ukázka detekční fáze: nástroj zkouší různé injekční řetězce na cílovou URL (hackthissite.org) a označuje reakce serveru. Všimněte si záznamů [GENERIC ERROR] a [TIME-BASED], které indikují potenciální úspěšné injekce. Na konci řádku je také vidět rychlost testování (~2 požadavky/s) a počet vyzkoušených payloadů.
Extrakce názvů tabulek (UNION útok): Další screenshot ukazuje, jak txsql.py při exploitaci dokáže vypsat názvy tabulek z databáze po úspěšném útoku. V tomto příkladu byla použita funkce pro chytrý dump (UNION SELECT) na cílovou aplikaci HackThisSite. Nástroj postupně zkouší různé cesty/parametry (včetně onion domény, testovacích URL a stránek jako /advertise?id=...) a posílá injekční dotazy UNION SELECT na information_schema.tables. Jakmile je dotaz úspěšný (... OK), zobrazí se seznam “Možné tabulky”. Vidíme například tabulky pojmenované Forensic, Login, Steganography, Challenges, News atd., což odpovídá modulům webu HackThisSite:
Ukázka exploitace: výpis tabulek z databáze cílové aplikace pomocí UNION SQL injection. Nástroj hlásí úspěšné pokusy (OK) a vypisuje nalezené názvy tabulek (např. Forensic, IRC, Blogs, Articles, Store, Donate, atd.). Tyto informace umožňují testerovi pokračovat k výpisu sloupců a dat z konkrétních tabulek v dalších krocích.

(Pozn.: Screenshoty byly pořízeny přes proxychains+Tor, proto každý HTTP požadavek v ukázce obsahuje řetězec [proxychains] s informací o směrování přes Tor nod 127.0.0.1:9050.)
Rychlost vs. anonymita: Při použití proxychains a Tor musíte počítat s výrazně pomalejším průběhem testů.
Síť Tor obvykle zpracuje jen několik požadavků za sekundu a má vyšší latenci. V důsledku může kompletní fuzzing (tisíce payloadů) trvat i desítky minut až hodiny.
To je daň za anonymitu – vaše skutečná IP adresa je skrytá, ale rychlost skenování je nižší.
Doporučení: Pokud testujete vlastní aplikaci v lokální síti (kde anonymita není nutná), můžete pro rychlost vynechat Tor/proxychains a spustit skript přímo.
Naopak při testování cizích systémů bez explicitního povolení vždy trvejte na anonymizaci (Tor/VPN) a počítejte s delším časem.
False positives/negatives: Stejně jako jiné skenery se i txsql.py může potýkat s občasnými falešnými poplachy nebo naopak přehlédnutými zranitelnostmi.
Snažil jsem se zahrnout širokou paletu payloadů a detekčních technik, ale je dobré nalezené výsledky manuálně ověřit.
Například aplikace může vracet vlastní chybové stránky, které nástroj vyhodnotí jako známku SQLi, i když jde o obecnou chybu. Buďte proto opatrní při interpretaci výsledků.
Cílové databáze: Txsql.py je navržen primárně pro typické SQL databáze jako MySQL/MariaDB, PostgreSQL, MS SQL, Oracle apod.
Payloady v něm obsažené cílí na tyto systémy. U méně běžných DB nebo atypických injekčních bodů může být třeba payloady upravit ručně.
Nástroj však pokrývá nejrozšířenější varianty SQL injection útoků, včetně specifik syntaxí pro různé databáze.
Odpovědnost a etické použití
Nástroj txsql.py je určen výhradně pro legální penetrační testování a vzdělávací účely. Autor nenese žádnou zodpovědnost za škody způsobené neoprávněným či neetickým použitím tohoto programu. Před jakýmkoli testováním skutečných webových stránek si vždy vyžádejte písemný souhlas majitele či správce systému.
Dodržujte platné zákony – pokusy o průnik do cizích systémů bez povolení jsou nezákonné. Pamatujte, že cílem etického hackingu je zlepšovat zabezpečení, nikoli způsobit škodu. Nástroj txsql.py by měl sloužit jako pomůcka pro experty hledající a opravující zranitelnosti, případně jako tréninkový nástroj na vlastních cílech (lokální aplikace, testovací servery, CTF soutěže).
Autorem nástroje je člen české bezpečnostní komunity vystupující pod aliasem TX-CORE. Svou práci poskytl komunitě s vírou, že txsql.py pomůže odhalit a opravit mnoho zranitelností a bude přínosem pro všechny etické hackery. Používejte jej moudře a zodpovědně. Happy hacking! 🔒👨💻

