Akékoľvek hľadanie slabých miest na webových zdrojoch začína zhromažďovaním spravodajských informácií a informácií.
Inteligencia môže byť buď aktívna – hrubou silou na súbory a adresáre lokality, spúšťanie skenerov zraniteľnosti, manuálne prehliadanie lokality a pasívna – vyhľadávanie informácií v rôznych vyhľadávačoch. Niekedy sa stáva, že sa o zraniteľnosti dozvie ešte pred otvorením prvej stránky webu.
Ako je to možné?
Vyhľadávacie roboty, ktoré sa nonstop potulujú po internete, okrem informácií užitočných pre bežného používateľa často zaznamenávajú aj to, čo môžu kyberzločinci použiť pri útoku na webový zdroj. Napríklad chyby skriptov a súbory s citlivými informáciami (od konfiguračných súborov a protokolov až po súbory s autentifikačnými údajmi a zálohami databáz).
Z pohľadu vyhľadávacieho robota je chybové hlásenie o vykonaní sql dotazu obyčajný text, neoddeliteľný napríklad od popisu produktov na stránke. Ak zrazu vyhľadávací robot narazí na súbor s príponou .sql, ktorý z nejakého dôvodu skončil v pracovnom priečinku stránky, bude vnímaný ako súčasť obsahu stránky a bude tiež indexovaný (vrátane napr. heslá v ňom uvedené).
Takéto informácie možno nájsť poznaním silných, často jedinečných kľúčových slov, ktoré pomáhajú oddeliť „zraniteľné stránky“ od stránok, ktoré neobsahujú zraniteľné miesta.
Na exploit-db.com existuje obrovská databáza špeciálnych dopytov pomocou kľúčových slov (tzv. dorks) a je známa ako Google Hack Database.
Prečo google?
Dvere sú primárne zamerané na google z dvoch dôvodov:
- najflexibilnejšia syntax pre kľúčové slová (uvedené v tabuľke 1) a špeciálne znaky (uvedené v tabuľke 2);
- index Google je ešte úplnejší ako index iných vyhľadávačov;
Tabuľka 1 – Hlavné kľúčové slová Google
Kľúčové slovo |
Význam |
Príklad |
stránky |
Hľadajte iba na zadanej stránke. Zohľadňuje iba adresu URL |
site: somesite.ru - nájde všetky stránky pre danú doménu a subdomény |
inurl |
Hľadajte podľa slov prítomných v uri. Na rozdiel od kl. slová "stránka", hľadá zhody za názvom stránky |
inurl: novinky - nájde všetky stránky, kde sa dané slovo nachádza v uri |
intext |
Hľadajte v tele stránky |
intext: "zástrčky" - úplne analogické s obvyklým dotazom "zástrčky" |
titulok |
Hľadajte v názve stránky. Text uzavretý medzi značkami |
intitle: ”index of” - nájde všetky stránky so zoznamom adresárov |
ext |
Vyhľadajte stránky so zadanou príponou |
ext: pdf – nájde všetky súbory pdf |
typ súboru |
V súčasnosti je úplne analogický s kl. slovo "ext" |
typ súboru: pdf - podobný |
súvisiace |
Vyhľadajte stránky s podobnou tematikou |
súvisiace: google.ru - zobrazí jeho analógy |
odkaz |
Vyhľadajte stránky, ktoré na to odkazujú |
odkaz: somesite.ru - nájde všetky stránky, ktoré majú na to odkaz |
definovať |
Zobraziť definíciu slova |
definovať: 0deň - definícia pojmu |
cache |
Zobraziť obsah stránky vo vyrovnávacej pamäti (ak je k dispozícii) |
cache: google.com – otvorí stránku z cache |
Tabuľka 2 – Špeciálne znaky pre dopyty Google
Symbol |
Význam |
Príklad |
“ |
Presná fráza |
intitle: "Konfiguračná stránka smerovača RouterOS" - vyhľadajte smerovače |
* |
Akýkoľvek text |
inurl: "bitrix * mcart" - vyhľadávanie stránok na bitrixe so zraniteľným modulom mcart |
. |
Akýkoľvek charakter |
Index.of – podobný indexu žiadosti o |
- |
Vylúčiť slovo |
error -warning - zobrazí všetky stránky s chybou, ale bez upozornenia |
.. |
Rozsah |
cve 2006..2016 - zobraziť zraniteľnosti podľa rokov od roku 2006 |
| |
boolovské "alebo" |
linux | okná - zobrazujú stránky, na ktorých sa vyskytuje prvé alebo druhé slovo |
Malo by byť zrejmé, že každá požiadavka na vyhľadávač je vyhľadávanie iba podľa slov.
Je zbytočné hľadať na stránke metaznaky (úvodzovky, zátvorky, interpunkčné znamienka a pod.). Dokonca aj vyhľadávanie presnej frázy uvedenej v úvodzovkách je vyhľadávanie slov, po ktorom nasleduje hľadanie presnej zhody už vo výsledkoch.
Všetky dorky z databázy Google Hack sú logicky rozdelené do 14 kategórií a sú uvedené v tabuľke 3.
Tabuľka 3 – Kategórie databázy Google Hack
Kategória |
Čo vám umožňuje nájsť |
Príklad |
Opory |
Webové shelly, verejní správcovia súborov |
Nájdite všetky napadnuté stránky, na ktoré sú nahrané uvedené webové shelly: (intitle: “phpshell” ALEBO intitle: “c99shell” ALEBO intitle: “r57shell” ALEBO intitle: “PHP Shell” ALEBO intitle: “phpRemoteView”) `rwx`“ uname ” |
Súbory obsahujúce používateľské mená |
Súbory registra, konfiguračné súbory, protokoly, súbory obsahujúce históriu zadaných príkazov |
Nájdite všetky súbory databázy Registry obsahujúce informácie o účte: typ súboru: reg reg + intext: "správca internetových účtov" |
Citlivé adresáre |
Adresáre s rôznymi informáciami (osobné dokumenty, konfigurácie vpn, skryté úložiská atď.) |
Nájdite všetky zoznamy adresárov obsahujúcich súbory súvisiace s vpn: "Config" intitle: "Index" intext: vpn Stránky obsahujúce git repozitáre: (intext: "index súboru /.git") ("nadradený adresár") |
Detekcia webového servera |
Verzia a ďalšie informácie o webovom serveri |
Nájdite administratívne konzoly servera JBoss: inurl: "/ web-console /" intitle: "Administrátorská konzola" |
Zraniteľné súbory |
Skripty obsahujúce známe zraniteľnosti |
Nájdite stránky, ktoré používajú skript, ktorý vám umožňuje stiahnuť ľubovoľný súbor zo servera: allinurl: forcedownload.php? súbor = |
Zraniteľné servery |
Inštalačné skripty, webové shelly, otvorené administratívne konzoly atď. |
Nájdite otvorené konzoly PHPMyAdmin spustené ako root: intitle: phpMyAdmin "Vitajte v phpMyAdmin ***" "beží na * ako root @ *" |
Chybové hlásenia |
Rôzne chyby a upozornenia často odhalia dôležité informácie – od verzie CMS až po heslá |
Stránky s chybami pri vykonávaní dotazov SQL do databázy: "Upozornenie: mysql_query ()" "neplatný dotaz" |
Súbory obsahujúce šťavnaté informácie |
Certifikáty, zálohy, e-maily, denníky, skripty SQL atď. |
Nájdite inicializačné skripty SQL: filetype: sql a "insert into" -site: github.com |
Súbory obsahujúce heslá |
Všetko, čo môže obsahovať heslá – logy, sql skripty atď. |
Protokoly s heslami: typ súboru:logintext:heslo |prejsť |pw sql skripty obsahujúce heslá: ext:sqlintext:užívateľské menointext:heslo |
Citlivé informácie o online nakupovaní |
Informácie súvisiace s online nakupovaním |
Nájsť PIN kódy: dcid =bn =špendlíkkód = |
Údaje o sieti alebo zraniteľnosti |
Informácie, ktoré priamo nesúvisia s webovým zdrojom, ale ovplyvňujú sieť alebo iné newebové služby |
Vyhľadajte skripty na automatickú konfiguráciu servera proxy obsahujúce informácie o internej sieti: inurl: proxy | inurl: wpad ext: pac | ext: dat findproxyforurl |
Stránky obsahujúce prihlasovacie portály |
Stránky obsahujúce prihlasovacie formuláre |
Webové stránky Saplogon: intext: "2016 SAP AG. Všetky práva vyhradené. " intitle: "Prihlásenie" |
Rôzne online zariadenia |
Tlačiarne, smerovače, monitorovacie systémy atď. |
Nájdite konfiguračný panel tlačiarne: intitle: "hplaserjet"inurl:SSI /Auth /set_config_info o zariadení.htm |
Rady a slabé miesta |
Webové stránky na zraniteľných verziách CMS |
Nájdite zraniteľné doplnky, prostredníctvom ktorých môžete na server nahrať ľubovoľný súbor: inurl: fckeditor -intext: "ConfigIsEnabled = False" intext: ConfigIsEnabled |
Dvere sú častejšie zamerané na vyhľadávanie všetkých stránok na internete. Nič vám však nebráni obmedziť oblasť vyhľadávania na akejkoľvek stránke alebo stránkach.
Každá požiadavka google môže byť zameraná na konkrétnu stránku pridaním kľúčového slova „site: somesite.com“ do požiadavky. Toto kľúčové slovo je možné pridať do ľubovoľného dorka.
Automatizácia vyhľadávania zraniteľností
A tak sa zrodil nápad napísať jednoduchú utilitu, ktorá automatizuje vyhľadávanie zraniteľností pomocou vyhľadávača (google) a spolieha sa na databázu Google Hack.
Nástroj je skript napísaný v nodejs pomocou phantomjs. Aby sme boli presní, skript je interpretovaný samotnými phantomjs.
Phantomjs je plnohodnotný webový prehliadač bez GUI, poháňaný kódom js a užívateľsky prívetivým API.
Nástroj má celkom zrozumiteľný názov - dorks. Spustením na príkazovom riadku (bez možností) získame krátku pomoc s niekoľkými príkladmi použitia:
Obrázok 1 - Zoznam základných možností dorks
Všeobecná syntax nástroja je dork "príkaz" "zoznam možností".
Podrobný popis všetkých možností je uvedený v tabuľke 4.
Tabuľka 4 - dorks syntax
Príkaz |
Možnosť |
Popis |
ghdb |
-l |
Zobrazte očíslovaný zoznam kategórií dork databázy Google Hack |
-c "číslo alebo názov kategórie" |
Načítajte skladby zadanej kategórie podľa čísla alebo názvu |
|
-q "fráza" |
Stiahnuť dorks nájdené na požiadanie |
|
-o "súbor" |
Uložiť výsledok do súboru (iba s voľbami -c | -q) |
|
google |
-d dork |
Nastavte ľubovoľný dork (túto možnosť je možné použiť mnohokrát, možno ju kombinovať s možnosťou -D) |
-D "súbor" |
Použite dorky zo súboru |
|
-s "stránka" |
Nastaviť lokalitu (túto možnosť je možné použiť mnohokrát, možno ju kombinovať s možnosťou -S) |
|
-S "súbor" |
Použiť stránky zo súboru (brute-force dorks sa vykonajú pre každú stránku nezávisle) |
|
-f "filter" |
Nastaviť ďalšie kľúčové slová (budú pridané ku každému dorka) |
|
-t "počet ms" |
Interval medzi požiadavkami na google |
|
-T "počet ms" |
V prípade nájdenia obrázka captcha vyprší časový limit |
|
-o "súbor" |
Uložiť výsledok do súboru (uložia sa len tie skladby, pre ktoré sa niečo našlo) |
Pomocou príkazu ghdb môžete získať všetky dorky z exploit-db na ľubovoľnú žiadosť alebo špecifikovať celú kategóriu ako celok. Ak zadáte kategóriu 0, uvoľní sa celá databáza (približne 4,5 tisíc dork).
Zoznam aktuálne dostupných kategórií je znázornený na obrázku 2.
Obrázok 2 – Zoznam dostupných kategórií dork GHDB
Príkaz google nahradí každý dork vo vyhľadávači google a analyzuje výsledky na zhody. Cesty, na ktorých sa niečo našlo, sa uložia do súboru.
Nástroj podporuje rôzne režimy vyhľadávania:
1 dork a 1 web;
1 dork a mnoho stránok;
1 stránka a veľa dorks;
veľa stránok a veľa dorks;
Zoznam dork a lokalít je možné špecifikovať buď pomocou argumentu, alebo prostredníctvom súboru.
Ukážka práce
Skúsme vyhľadať prípadné zraniteľnosti na príklade hľadania chybových hlásení. Príkazom: dorks ghdb –c 7 –o errors.dorks budú načítané všetky známe dorks kategórie „Chybové hlásenia“, ako je znázornené na obrázku 3.
Obrázok 3 - Načítavanie všetkých známych správ kategórie "Chybové hlásenia".
Skladby sa načítajú a uložia do súboru. Teraz ich zostáva „nahnevať“ na nejakú stránku (pozri obrázok 4).
Obrázok 4 – Hľadanie zraniteľností záujmovej stránky v google cache
Po určitom čase sa na študovanej lokalite nájde niekoľko stránok s chybami (pozri obrázok 5).
Obrázok 5 - Nájdené chybové hlásenia
Výsledkom je, že v súbore result.txt dostaneme kompletný zoznam dork, ktoré vedú k chybe.
Obrázok 6 zobrazuje výsledok vyhľadávania chýb stránok.
Obrázok 6 - Výsledok vyhľadávania chýb
Vo vyrovnávacej pamäti tohto dorka sa zobrazuje úplná spätná stopa, ktorá odhaľuje absolútne cesty skriptov, systém správy obsahu stránky a typ databázy (pozri obrázok 7).
Obrázok 7 - Zverejnenie informácií o zariadení lokality
Treba však mať na pamäti, že nie všetky dorky z GHDB dávajú skutočný výsledok. Google tiež nemusí nájsť presnú zhodu a zobraziť podobný výsledok.
V tomto prípade je rozumnejšie použiť svoj osobný zoznam dork. Vždy by ste napríklad mali hľadať súbory s „nezvyčajnými“ príponami, ktorých príklady sú znázornené na obrázku 8.
Obrázok 8 – Zoznam prípon súborov, ktoré nie sú typické pre bežný webový zdroj
Výsledkom je, že príkazom dorks google –D extensions.txt –f bank začne Google od prvej požiadavky dávať stránky s „nezvyčajnými“ príponami súborov (pozri obrázok 9).
Obrázok 9 – Vyhľadávanie „zlých“ typov súborov na bankových stránkach
Treba mať na pamäti, že google neprijíma požiadavky dlhšie ako 32 slov.
S intextom dorks google –d: „chyba | upozornenie | upozornenie | syntax“ –f univerzita
chyby interpreta PHP môžete hľadať na vzdelávacích stránkach (pozri obrázok 10).
Obrázok 10 – Vyhľadávanie chýb pri spustení PHP
Niekedy nie je vhodné použiť jednu alebo dve kategórie dork.
Napríklad, ak viete, že stránka beží na wordpress engine, potom potrebujete dorky pre wordpress. V tomto prípade je vhodné použiť vyhľadávanie v databáze Google Hack. Príkaz dorks ghdb –q wordpress –o wordpress_dorks.txt stiahne všetky súbory Wordpress, ako je znázornené na obrázku 11:
Obrázok 11 – Vyhľadajte dorky súvisiace s Wordpressom
Vráťme sa opäť k bankám a pomocou príkazu dorks google –D wordpress_dords.txt –f banka sa pokúsime nájsť niečo zaujímavé, čo súvisí s wordpressom (pozri obrázok 12).
Obrázok 12 – Vyhľadávanie zraniteľností vo Wordpresse
Stojí za zmienku, že vyhľadávanie v databáze Google Hack neakceptuje slová kratšie ako 4 znaky. Napríklad, ak CMS stránky nie je známy, ale jazyk je známy - PHP. V tomto prípade môžete to, čo potrebujete, filtrovať manuálne pomocou potrubia a systémového vyhľadávacieho nástroja dorks –c all | findstr / I php> php_dorks.txt (pozri obrázok 13):
Obrázok 13 – Vyhľadávanie všetkých dork, kde je spomenuté PHP
Vyhľadávanie zraniteľných miest alebo niektorých citlivých informácií vo vyhľadávači by sa malo vyhľadávať iba vtedy, ak je na tejto stránke významný index. Ak má napríklad stránka zaindexovaných 10-15 stránok, tak je hlúposť hľadať niečo takýmto spôsobom. Je ľahké skontrolovať veľkosť indexu – stačí zadať „site: somesite.com“ do vyhľadávacieho poľa Google. Príklad podindexovanej lokality je zobrazený na obrázku 14.
Obrázok 14 - Kontrola veľkosti indexu lokality
Teraz o nepríjemnostiach ... Z času na čas môže google požiadať o captcha - nedá sa nič robiť - budete ho musieť zadať. Napríklad, keď som prechádzal kategóriou „Chybové správy“ (90 dorks), captcha vypadla iba raz.
Stojí za to dodať, že phantomjs podporuje aj prácu cez proxy, a to cez rozhranie http aj socks. Ak chcete povoliť režim proxy, odkomentujte príslušný riadok v dorks.bat alebo dorks.sh.
Nástroj je dostupný ako zdrojový kód
Spustite stiahnutý súbor dvojitým kliknutím (potrebujete mať virtuálny stroj).
3. Anonymita pri kontrole stránky pre SQL injection
Konfigurácia Tor a Privoxy v systéme Kali Linux
[Sekcia vo výstavbe]
Konfigurácia Tor a Privoxy v systéme Windows
[Sekcia vo výstavbe]
Nastavenia pre prácu cez proxy v jSQL Injection
[Sekcia vo výstavbe]
4. Kontrola stránky pre SQL injection pomocou jSQL Injection
Práca s programom je mimoriadne jednoduchá. Stačí zadať adresu stránky a stlačiť ENTER.
Nasledujúca snímka obrazovky ukazuje, že stránka je zraniteľná voči trom typom vstrekovania SQL naraz (informácie o nich sú uvedené v pravom dolnom rohu). Kliknutím na názvy injekcií môžete prepínať použitú metódu:
Existujúce databázy už boli tiež zobrazené.
Môžete vidieť obsah každej tabuľky:
Zvyčajne sú v tabuľkách najzaujímavejšie poverenia správcu.
Ak máte šťastie a našli ste údaje správcu, tak je priskoro na radosť. Musíte tiež nájsť admin panel, kde tieto údaje zadať.
5. Pomocou jSQL Injection vyhľadajte oblasti správcu
Ak to chcete urobiť, prejdite na ďalšiu kartu. Tu nás víta zoznam možných adries. Na kontrolu môžete vybrať jednu alebo niekoľko stránok:
Pohodlie spočíva v tom, že nemusíte používať ďalšie programy.
Bohužiaľ, nie je veľa neopatrných programátorov, ktorí ukladajú heslá v čistom texte. Pomerne často v riadku hesla vidíme niečo ako
8743b52063cd84097a65d1633f5c74f5
Toto je hash. Môžete to dešifrovať hrubou silou. A ... jSQL Injection má vstavanú hrubú silu.
6. Hrubé vynútenie hashov pomocou jSQL Injection
Nepochybnou výhodou je, že nemusíte hľadať ďalšie programy. Má podporu pre mnohé z najpopulárnejších hashov.
Toto nie je najlepšia možnosť. Aby ste sa stali guruom v dekódovaní hashov, odporúča sa kniha „“ v ruštine.
Ale samozrejme, keď nie je po ruke iný program alebo nie je čas sa učiť, príde vhod jSQL Injection so vstavanou funkciou brute-force.
Existujú nastavenia: môžete nastaviť, aké znaky sú zahrnuté v hesle, rozsah dĺžky hesla.
7. Operácie so súbormi po zistení injekcie SQL
Okrem operácií s databázami - ich čítanie a modifikácia, je možné v prípade detekcie SQL injekcií vykonávať nasledujúce operácie so súbormi:
- čítanie súborov na serveri
- nahrávanie nových súborov na server
- nahrávanie shellov na server
A to všetko je implementované v jSQL Injection!
Existujú obmedzenia - server SQL musí mať práva na súbory. Pre rozumných správcov systému sú vypnuté a nebudete môcť získať prístup k súborovému systému.
Existencia privilégií k súborom sa dá ľahko skontrolovať. Prejdite na jednu zo záložiek (čítanie súborov, vytvorenie shellu, nahranie nového súboru) a skúste vykonať jednu zo zadaných operácií.
Ešte veľmi dôležitá poznámka – musíme poznať presnú absolútnu cestu k súboru, s ktorým budeme pracovať – inak nebude fungovať nič.
Pozrite si nasledujúcu snímku obrazovky:
Na každý pokus o prácu so súborom odpovie: Žiadne privilégium FILE(žiadne privilégiá k súborom). A nedá sa s tým nič robiť.
Ak namiesto toho máte inú chybu:
Problém so zápisom do [názov_adresára]
To znamená, že ste nesprávne zadali absolútnu cestu, kam chcete súbor zapísať.
Aby ste mohli predpokladať absolútnu cestu, musíte aspoň poznať operačný systém, na ktorom server beží. Ak to chcete urobiť, prejdite na kartu Sieť.
Takýto záznam (riadok Win64) nám dáva dôvod predpokladať, že máme čo do činenia s operačným systémom Windows:
Keep-Alive: časový limit = 5, max = 99 Server: Apache / 2.4.17 (Win64) PHP / 7.0.0RC6 Pripojenie: Keep-Alive metóda: HTTP / 1,1 200 OK Obsah-Dĺžka: 353 Dátum: Pia, 11. decembra 2015 11:48:31 GMT X-Powered-By: PHP / 7.0.0RC6 Content-Type: text / html; znaková sada = UTF-8
Tu máme nejaký Unix (* BSD, Linux):
Transfer-Encoding: chunked Dátum: Pi, 11 Dec 2015 11:57:02 GMT Metóda: HTTP / 1.1 200 OK Keep-Alive: timeout = 3, max = 100 Connection: keep-alive Content-Type: text / html X- Poháňané: PHP / 5.3.29 Server: Apache / 2.2.31 (Unix)
A tu máme CentOS:
Metóda: HTTP / 1.1 200 OK Platnosť: štvrtok, 19. novembra 1981 08:52:00 GMT Set-Cookie: PHPSESSID = 9p60gtunrv7g41iurr814h9rd0; cesta = / Pripojenie: keep-alive X-Cache-Lookup: MISS z t1.hoster.ru:6666 Server: Apache / 2.2.15 (CentOS) X-Powered-By: PHP / 5.4.37 X-Cache: MISS z t1.hoster.ru Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0 Pragma: no-cache Date: Pi, 11 Dec 2015 12:08:54 GMT Transfer-Encoding: chunked Content-Type: text / html; znaková sada = WINDOWS-1251
V systéme Windows je typický priečinok pre lokality C: \ Server \ data \ htdocs \... Ale v skutočnosti, ak niekto „uvažoval“ o vytvorení servera v systéme Windows, potom s najväčšou pravdepodobnosťou táto osoba nepočula nič o privilégiách. Preto sa oplatí spustiť pokusy priamo z adresára C: / Windows /:
Ako vidíte, všetko prebehlo v poriadku na prvýkrát.
Ale samotné jSQL Injection shell vyvolávajú moje pochybnosti. Ak máte oprávnenia na súbory, môžete jednoducho nahrať niečo z webového rozhrania.
8. Hromadná kontrola stránok pre SQL injection
A dokonca aj jSQL Injection má túto funkciu. Všetko je veľmi jednoduché - načítajte zoznam stránok (môžete importovať zo súboru), vyberte tie, ktoré chcete skontrolovať, a stlačením príslušného tlačidla spustite operáciu.
Záver o jSQL Injection
jSQL Injection je dobrý, výkonný nástroj na nájdenie a následné použitie SQL Injection na stránkach. Jeho nesporné výhody: jednoduché použitie, vstavané súvisiace funkcie. jSQL Injection môže byť najlepším priateľom začiatočníka pri analýze webových stránok.
Z nedostatkov by som poznamenal nemožnosť úpravy databáz (aspoň ja som túto funkcionalitu nenašiel). Ako pri všetkých nástrojoch s grafickým rozhraním, nevýhody tohto programu možno pripísať nemožnosti použitia v skriptoch. Napriek tomu je aj v tomto programe možná určitá automatizácia – vďaka vstavanej funkcii hromadnej kontroly lokality.
Zo stanovenej vzorky a certifikát... So špeciálnou zľavou pre všetky fakulty a kurzy!
Pomer strán 1440 x 900
Rozlíšenia obrazovky monitora
Kedy potrebujem aktualizovať firmvér
Ako premeniť smartfón s Androidom na bezpečnostnú kameru
Ako vyzerá čínska klávesnica (história a fotografie)