Életjel
Írta: Kerekes Attila
Jul/090
Pörög a nyár. Voltunk már nyaralni, és most új melóm is van. Sajnos elég sok időt elvesz, és esténként olyan fáradtan esek haza, hogy már nincs erőm blogot írni, viszont cserébe nagyon érdekes témákkal foglalkozhatok, és a perl nyelvvel is közelebbről megismerkedhettem. De azért megpróbálom megerőltetni magam a napokban, írni 1-2 dologról. A sors úgy hozta, hogy a kedvenc vízforralónk levágta a biztosítékot, ami egy dd-wrts router lelki világában komoly segmentation faultokhoz vezető kárt okozott. Jövő héten ha lesz időm megpróbálom újratelepíteni, és pontosan dokumentálni a lépéseket. Egész jó kis cikk is összejöhet ebből még. Addig is mindenkinek jó nyaralást.~
#eof
Aircrack-ng és Intel PRO/Wireless 3945ABG
Írta: Kerekes Attila
Jun/091
Végre sikerült egy kis időt találnom a blogra is. Reményeim szerint ez lesz az első része egy komolyabb cikk sorozatnak, amelyekben vezeték nélküli hálózatok támadásával szeretnék foglalkozni. Az ilyen támadásokhoz általában egy speciális drivert kell használnunk a wifi kártyánkhoz, hogy nem egészen szabványos csomagokat is tudjunk küldeni, illetve a nem nekünk címzett csomagokat is fogadhassuk. Kezdésnek egy ilyen driver beszerzéséről és beüzemeléséről lesz szó, méghozzá az Intel PRO/Wireless 3945ABG kártyákhoz, ismertebb nevén az ipw3945-höz. A környezet továbbra is Debian.
Feltételezzük, hogy a sima ipw3945 drivert alapból sikerült felinstallálnunk. Azért egy-két tipp: /etc/apt/sources.list -be szükséges lesz berakni a non-free csomagokat is. Például így kéne, hogy kinézzen egy sor:
deb http://ftp.hu.debian.org/debian/ lenny main contrib non-free
Egy apt-get update után már látnunk kéne a firmware-iwlwifi csomagot. Ezt kell installálnunk (apt-get install firmware-iwlwifi), ezek után már gond nélkül kéne, hogy működjön minden.
Ezzel a driverrel ha elindítjuk a kismetet vagy akár az airodump-ng-t sajnos nem fogunk látni mindent, amire kíváncsiak lehetünk, illetve az aireplay-ng is felejtős még. Emiatt van szükség egy másik driverre, méghozzá az “ipwraw“-ra, amit innen lehet beszerezni: http://homepages.tu-darmstadt.de/~p_larbig/wlan/. A driver forrásának letöltése után még szükségünk lesz a kernel headerekre az aktuális kernelünkhöz. Mivel nálam épp a gyári 2.6.26-2-686 -os Debian kernel fut, ezért ezt a következő paranccsal tehetem meg:
apt-get install linux-headers-2.6.26-2-686
Ha ez is megvolt lépjünk az ipwraw forrás könyvtárába és jöhet a make, make install, make install_ucode. Arra figyeljünk, hogy ugyanahhoz a hardverhez két driverünk lesz a gépen, ezzel nem árt, ha tisztában vagyunk. Sajnos nem túl kényelmes, de ha netezni akarunk, akkor a gyári driverre lesz szükségünk, míg egyéb felhasználáshoz az ipwraw driverre. A gyári driver neve iwl3945, míg a másiknak ipwraw (meglepő?). Átállás a hackelt driverre így történik:
modprobe -r iwl3945 modprobe ipwraw
Ha minden sikeresen ment akkor az airodump-ng is egészen új képet mutat majd nekünk a vezeték nélküli világról. Az előbbi driver betöltéshez jár egy script is az ipwraw forrással, az Intel_files könyvtárban a load nevezetű fájl. Bár nagyon gyönyörű script, valamiért mégis írtam egy sajátot is, kiegészítve egy wpa_supplicant killel az ipwraw driver betöltésekor, nekem ez jól szokott jönni:
#!/bin/bash
startit() {
echo -n "Killing wpa_supplicant if present: "
(killall -9 wpa_supplicant) 2> /dev/null
echo "done."
echo -n "Unloading ipw3945 driver: "
modprobe -r iwl3945
echo "done."
echo -n "Loading ipwraw driver: "
modprobe ipwraw
echo "done."
sleep 4
iwconfig wifi0 rate 1M
iwconfig wifi0 txpower 16
iwconfig
}
stopit() {
echo -n "Unloading ipwraw driver: "
modprobe -r ipwraw
echo "done."
echo -n "Loading ipw3945 driver: "
modprobe iwl3945
echo "done."
sleep 2
iwconfig
}
case $1 in
start) startit ;;
stop) stopit ;;
*) echo "Usage: ipwchange <start|stop>";;
esac
Nagyrészt sajnos emlékezetből írtam le mindent, ha valami nem megy, csak szóljatok, és jobban utána nézek, javítok. A következőkben szépen végig sétálunk majd remélem a wep és wpa psk -t használó hálózatok “biztonsági tesztelésén” az ipwraw driverrel ellátott Intel PRO/Wireless 3945ABG kártyánk segítségével.
Ajánlott irodalom:
http://homepages.tu-darmstadt.de/~p_larbig/wlan/
http://www.aircrack-ng.org/doku.php?id=ipw3945
#eof
Cowpatty 4.5
Írta: Kerekes Attila
Jun/092
Újra eljött a világ vége, legalábbis a wireless hálózatok számára. Itt a Cowpatty 4.5 (és bekerült a backtrack 4-be is). Még nem írtam részletes erről a programról, de amint lesz időm, fogok. Az új verzió egy nagyon nagyon kemény új funkcióval bővült, méghozzá a 4 lépéses handshake helyett elég a handshake első két lépése is egy wireless hálózat feltöréséhez (aircrack-ng-be is remélem hamarosan berakják). Ez pedig igencsak nem mindegy, ahogy azt a mellékelt ábra is mutatja:
Teljesen új lehetőségek nyílnak meg. Airdump-al végzett megfigyelések közben láthatjuk, milyen essid-vel ellátott hálózatokra próbál csatlakozni egy kliens. Ezt felhasználva, vagy egyéb szerzett ismeretek alapján létrehozhatunk fake AP-ket, amelyekhez az átlagos wireless kliens megpróbál majd autómatikusan kapcsolódni jobb esetben. Természetesen ez nem fog sikerülni neki, de a handshake első két lépését megszerezhetjük, és ennyi elég is a WPA kulcs visszafejtésének kísérletéhez. Egy kis szerencsével és ügyességgel az adott célgépen tárolt összes általa ismert vezeték nélküli hálózat hozzáférését megszerezhetjük.
Ajánlott irodalom:
http://www.willhackforsushi.com/?p=284
#eof
Rainbowcrack meg a Debian
Írta: Kerekes Attila
Jun/091
Mivel egyre aktívabban foglalkozom szivárványtáblás kódvisszafejtésekkel, gondoltam beszerzem a RainbowCrack programcsomagot is. Leginkább nem is az rcrack hanem az rtgen miatt. Linuxra ahogy néztem az 1.2-es verzió érhető el a hivatalos honlapról. Letöltöttem, kicsomagoltam, majd a readme alapján nekifutottam egy make -f makefile.linux paranccsal. Az eredmény lenyűgöző volt:
rogue:~/tools/rainbowcrack-1.2-src/src# make -f makefile.linux
g++ Public.cpp ChainWalkContext.cpp HashAlgorithm.cpp HashRoutine.cpp RainbowTableGenerate.cpp -lssl -O3 -o rtgen
In file included from Public.cpp:11:
Public.h:25: error: u_int64_t does not name a type
Public.h:26: error: u_int64_t does not name a type
Public.h:37: error: u_int64_t was not declared in this scope
Public.h:38: error: u_int64_t was not declared in this scope
Public.cpp:113: error: redefinition of std::string uint64tostr
Public.h:37: error: std::string uint64tostr previously declared here
Public.cpp:113: error: u_int64_t was not declared in this scope
Public.cpp:126: error: redefinition of std::string uint64tohexstr
Public.h:38: error: std::string uint64tohexstr previously declared here
Public.cpp:126: error: u_int64_t was not declared in this scope
In file included from ChainWalkContext.h:11,
from ChainWalkContext.cpp:11:
Public.h:25: error: u_int64_t does not name a type
Public.h:26: error: u_int64_t does not name a type
Public.h:37: error: u_int64_t was not declared in this scope
Public.h:38: error: u_int64_t was not declared in this scope
In file included from ChainWalkContext.cpp:11:
ChainWalkContext.h:30: error: u_int64_t does not name a type
ChainWalkContext.h:31: error: u_int64_t does not name a type
ChainWalkContext.h:34: error: u_int64_t does not name a type
ChainWalkContext.h:37: error: u_int64_t does not name a type
ChainWalkContext.h:56: error: u_int64_t does not name a type
ChainWalkContext.h:61: error: u_int64_t has not been declared
ChainWalkContext.h:68: error: u_int64_t does not name a type
ChainWalkContext.cpp:31: error: u_int64_t CChainWalkContext::m_nPlainSpaceUpToX [257] is not a static member of class CChainWalkContext
ChainWalkContext.cpp:32: error: u_int64_t CChainWalkContext::m_nPlainSpaceTotal is not a static member of class CChainWalkContext
ChainWalkContext.cpp:35: error: u_int64_t CChainWalkContext::m_nReduceOffset is not a static member of class CChainWalkContext
ChainWalkContext.cpp: In static member function static bool CChainWalkContext::LoadCharset(std::string):
ChainWalkContext.cpp:119: error: memcpy was not declared in this scope
ChainWalkContext.cpp: In static member function static bool CChainWalkContext::SetPlainCharset(std::string, int, int):
ChainWalkContext.cpp:165: error: m_nPlainSpaceUpToX was not declared in this scope
ChainWalkContext.cpp:178: error: m_nPlainSpaceTotal was not declared in this scope
ChainWalkContext.cpp: In static member function static bool CChainWalkContext::SetRainbowTableIndex(int):
ChainWalkContext.cpp:188: error: m_nReduceOffset was not declared in this scope
ChainWalkContext.cpp: At global scope:
ChainWalkContext.cpp:303: error: no u_int64_t CChainWalkContext::GetPlainSpaceTotal() member function declared in class CChainWalkContext
ChainWalkContext.cpp: In static member function static void CChainWalkContext::Dump():
ChainWalkContext.cpp:339: error: m_nPlainSpaceTotal was not declared in this scope
ChainWalkContext.cpp:342: error: m_nReduceOffset was not declared in this scope
ChainWalkContext.cpp: In member function void CChainWalkContext::GenerateRandomIndex():
ChainWalkContext.cpp:348: error: m_nIndex was not declared in this scope
ChainWalkContext.cpp:349: error: m_nPlainSpaceTotal was not declared in this scope
ChainWalkContext.cpp: At global scope:
ChainWalkContext.cpp:352: error: prototype for void CChainWalkContext::SetIndex(u_int64_t) does not match any in class CChainWalkContext
ChainWalkContext.h:61: error: candidate is: void CChainWalkContext::SetIndex(int)
ChainWalkContext.cpp: In member function void CChainWalkContext::SetHash(unsigned char*):
ChainWalkContext.cpp:359: error: memcpy was not declared in this scope
ChainWalkContext.cpp: In member function void CChainWalkContext::IndexToPlain():
ChainWalkContext.cpp:367: error: m_nIndex was not declared in this scope
ChainWalkContext.cpp:367: error: m_nPlainSpaceUpToX was not declared in this scope
ChainWalkContext.cpp:374: error: m_nIndex was not declared in this scope
ChainWalkContext.cpp:374: error: m_nPlainSpaceUpToX was not declared in this scope
ChainWalkContext.cpp: In member function void CChainWalkContext::HashToIndex(int):
ChainWalkContext.cpp:438: error: m_nIndex was not declared in this scope
ChainWalkContext.cpp:438: error: m_nReduceOffset was not declared in this scope
ChainWalkContext.cpp:438: error: m_nPlainSpaceTotal was not declared in this scope
ChainWalkContext.cpp: At global scope:
ChainWalkContext.cpp:441: error: no u_int64_t CChainWalkContext::GetIndex() member function declared in class CChainWalkContext
ChainWalkContext.cpp: In member function bool CChainWalkContext::CheckHash(unsigned char*):
ChainWalkContext.cpp:491: error: memcmp was not declared in this scope
In file included from ChainWalkContext.h:11,
from RainbowTableGenerate.cpp:18:
Public.h:25: error: u_int64_t does not name a type
Public.h:26: error: u_int64_t does not name a type
Public.h:37: error: u_int64_t was not declared in this scope
Public.h:38: error: u_int64_t was not declared in this scope
In file included from RainbowTableGenerate.cpp:18:
ChainWalkContext.h:30: error: u_int64_t does not name a type
ChainWalkContext.h:31: error: u_int64_t does not name a type
ChainWalkContext.h:34: error: u_int64_t does not name a type
ChainWalkContext.h:37: error: u_int64_t does not name a type
ChainWalkContext.h:56: error: u_int64_t does not name a type
ChainWalkContext.h:61: error: u_int64_t has not been declared
ChainWalkContext.h:68: error: u_int64_t does not name a type
RainbowTableGenerate.cpp: In function int main(int, char**):
RainbowTableGenerate.cpp:113: error: strcmp was not declared in this scope
RainbowTableGenerate.cpp:115: error: atoi was not declared in this scope
RainbowTableGenerate.cpp:128: error: atoi was not declared in this scope
RainbowTableGenerate.cpp:207: error: u_int64_t was not declared in this scope
RainbowTableGenerate.cpp:207: error: expected `;' before nIndex
RainbowTableGenerate.cpp:208: error: nIndex was not declared in this scope
RainbowTableGenerate.cpp:222: error: nIndex was not declared in this scope
RainbowTableGenerate.cpp:222: error: class CChainWalkContext has no member named GetIndex
make: *** [rtgen] Error 1
Vajon az idő járt el a forrás felett, vagy sose fordult csak úgy Debianon? Mindenesetre kicsit komolyabban átnézve a logot, egyértelmű volt, hogy a Public.h -ban nem stimmel valami, amihez bizony az u_int64_t -nek is köze van. Azonnal elő is kaptam kedvenc vim editorom, és néztem vajon mik hiányoznak. A fájl elején az #include-k között kell keresni a hibát:
rogue:~/tools/rainbowcrack-1.2-src/src# vi Public.h ... #include <stdio.h> #include <string> #include <vector> #include <list> ...
Ami innét hiányzik nekünk az a cstdlib és a cstring. Orvosoljuk a hibát, a header fájl eleje így nézzen ki:
rogue:~/tools/rainbowcrack-1.2-src/src# vi Public.h ... #include <stdio.h> #include <string> #include <vector> #include <list> #include <cstring> #include <cstdlib> ...
Ezek után nekifutva a fordításnak ezt kapjuk:
rogue:~/tools/rainbowcrack-1.2-src/src# make -f makefile.linux g++ Public.cpp ChainWalkContext.cpp HashAlgorithm.cpp HashRoutine.cpp RainbowTableGenerate.cpp -lssl -O3 -o rtgen g++ Public.cpp ChainWalkContext.cpp HashAlgorithm.cpp HashRoutine.cpp RainbowTableDump.cpp -lssl -o rtdump g++ Public.cpp RainbowTableSort.cpp -o rtsort RainbowTableSort.cpp: In function ‘int QuickSortPartition(RainbowChain*, int, int)’: RainbowTableSort.cpp:37: warning: integer overflow in expression g++ Public.cpp ChainWalkContext.cpp HashAlgorithm.cpp HashRoutine.cpp HashSet.cpp MemoryPool.cpp ChainWalkSet.cpp CrackEngine.cpp RainbowCrack.cpp -lssl -O3 -o rcrack
És már működik is minden, nyugodtan generálhatjuk a szivárvány táblázatainkat a nagyvilágnak :)
#eof
Rogue GNU/Linux 0.1
Írta: Kerekes Attila
Jun/090
Egyre többet dolgozgatok a saját linux rendszeremen. Kiindulási alapnak egy Debian lenny-t vettem, minimális telepítéssel. Majd telepakoltam svn-ből összeszedett biztonságtechnikával kapcsolatos programokkal. Eddig egész jól haladok vele, talán egy szép napon sikerül egy Backtrack klónt összehoznom, amiben kicsit kevesebb a cenzúra. Ha már kialakult egy stabil köre a programcsomagoknak, amiket szeretnék benne látni, megpróbálom átrakni az egészet LFS alapra. De azthiszem ez még odébb van. Nézzük eddig mi került bele, nagy vonalakban:
- Grafikai felület: Fluxbox, urxvt, firefox + több plugin, rdesktop… (Bár sokat gondolkodtam, hogy legyen e egyáltalán xorg a rendszeren, több program kezelhetőségéhez létfontosságúnak bizonyult. pl: rdekstop.)
- Exploitokhoz pár tool: metasploit, w3af, evilgrade…
- Hálózati támadásokhoz: ettercap, dsniff csomag, sslstrip, wireshark, nmap, Nkiller2 (lol!)
- Wifi támadásokhoz: aircrack-ng, cowpatty, mdk3, kismet, módosított driverek.
- Jelszavak támadásához: john, Ophcrack, Hydra, Medusa (utóbbi kettő még mindig lehet efektív nagyon sok helyen, bár nem túl finom.)
- Windowsos programok jelszavak könnyű kifejtésére.
- Szivárvány táblák, hash táblák, szólisták. (Sajnos ezek már most rengeteg helyet foglalnak…)
- Rootkitek, logfile tisztítók, backdoor programok
- Postgresql szerver.
- Saját programok, scriptek.
Kitudja, talán egyszer egy komoly security related disztribúció lesz az egészből, vagy csak megmarad örökre nekem. :) Mindezek mellett egy Rogue GNU/BSD sem lenne rossz…
#eof
IT-Security
Írta: Kerekes Attila
Jun/090
Pörögnek a napjaim, rengeteg új témával foglalkozom. Ma a Balabit IT-Securitytől járt nálunk egy úriember és tartott egy rövid 1 napos bemutató a Zorp felépítéséről és működéséről. Nagyon élveztem az előadást, de sajnos a vége előtt el kellett mennem vizsgázni róla. Bár nagyon érdekes megoldást alkalmaznak a biztonságos protokollok megfigyelésére, azért a zorp esetében sem nézhetünk csak úgy büntetlenül a titkosított adat forgalomba. Sok új tapasztalattal és 2 IT-Securitys bögrével gazdagabban hagyhattam el a szakirány labort.
Jobban utánajártam, hogyan érdemes nekiállni bruteforce módszerrel jelszavakat erősségét tesztelni. Teljesen meglepődve tapasztaltam mennyi előre legyártott szivárvány tábla létezik. DVD-ken rendelhetünk 2-3 gigás tábláktól egészen az 500gigás csomagig mindent. De a számomra legérdekesebb amit találtam egy olyan gyűjtemény, mely 1000 különböző ssid-re tartalmaz 1 000 000 darabos jelszó gyűjteményből álló táblákat. Az egész cucc 33 gigát foglalna, ami nekem nagyon sok, de a népszerű ssidkhez gyártott táblákat azért beszereztem (default, d-link, linksys, belkin54g, smc…). A gyűjtemény összeállításához többek között Kevin Mitnick is hozzájárult, ami miatt aztán tényleg nagyon hype számomra az egész. Pár teszt menetet toltam eddig aircrack-ng-vel, 80 000 kulcs/sec körül van a határ a laptopom procija mellett. Az itthoni “gyenge” 9 véletlen alfanumerikus karaktert tartalmazó kulcsunk igenhamar megkerült. De persze szivárványtáblák nem csak wpa-hoz léteznek, XP és Vista számára további 500gb-nyi tábla letölthető már illetve megrendelhető internetről. Az egyetemen pihen egy cluster ami épp nem csinál semmit, ha lenne pár terra tárhely hozzá, már tudom mire lehetne használni… :)
Olvasgatva john és aircrack-ng man oldalait vettem észre, hogy míg john stdoutra tudja küldeni a különböző módszerekkel generált jelszavakat, addig aircack stdinről is tudja olvasni a tesztelendő kulcsokat. Persze én is arra gondoltam itt amire előttem már sokan, és jó páran már meg is valósítottak….
john --stdout --wordlist=specialrules.lst --rules | aircrack-ng -e test -a 2 -w - /root/capture/wpa.cap
Az aircrack-ng dokumentáció is felhívja a figyelmünket, hogy a wpa szabványos kulcsok hossza 8-63 karakter, így megfontolandó, hogy érdemes e a szótár fájlban benthagyni a rövidebb kifejezéseket… És talán az, mivel ha maga a “bodri” nem is használható jelszó, a “bodri123″ már az, amit a john jobb esetben le is generál nekünk, de csak akkor, ha az eredeti 5 betűs formája is szerepel a szótárban.
Ajánlott irodalom:
http://www.renderlab.net/projects/WPA-tables/
http://www.freerainbowtables.com
http://project-rainbowcrack.com
http://www.aircrack-ng.org/doku.php?id=aircrack-ng
#eof
Wireless insecurity
Írta: Kerekes Attila
Jun/090
A napokban a figyelmem újra a vezeték nélküli hálózatokhoz kapcsolódó biztonsági hibák felé fordult. Talán már túl rég óta hanyagoltam a témát, hisz elég nagy előrelépéseket tettek sokan a témában utolsó wardriveom óta.
Teljesen meglepődve tapasztaltam, hogy már az ipw3945-ös wifi kártyákkal is megy az aireplay-ng, az ipwraw drivernek hála. Így már saját magunk is generálhatunk egy kis adatforgalmat a hálózaton, ami segítségével hatékonyan törhető a WEP, illetve WPA esetén leválaszthatjuk a klienseket az AP-jükről, így elérve, hogy rögzíthessük azok bejelentkezését egy bruteforce támadáshoz.
Rátaláltam az mdk3 nevű programra is. Bár tesztelni még nem volt időm, “jót” még nem hallottam róla :) .
Mivel IT-Security témában tartok egy előadást júliusban az egyetemen, nekiálltam összerakni egy debian alapú linuxot felszerelve pár számomra hasznos eszközzel a bemutatóra. Tudom ottvan a kész backtrack (amit amúgy nagyon jónak tartok), de ugyanakkor az nem tartalmaz mindent, illetve kedvem sincs végigböngészni mi mindent raktak bele a készítők. Pár dolog amit a saját linuxomba eddig összeszedtem:
- fluxbox, conky, eterm …
- metasploit, w3af, evilgrade…
- ettercap, dsniff, sslstrip, wireshark…
- aircrack-ng, kismet, mdk3, cowpatty…
- Szivárvány táblák, szólisták..
- saját programok, scriptek
Nagyon gondolkozom, hogy mindezt össze lehetne rakni egy freebsd-be is. Két dolog tart vissza. Az egyik a iptables iránti érzelmeim, a másik a wireless driver. Talán majd egyszer…
Pár leírást is tervezek összehozni az oldalra, ha minden jól megy wep, wpa, mdk3, ettercap és exploitok témákban.~
Ajánlott irodalom:
http://homepages.tu-darmstadt.de/~p_larbig/wlan/
#eof
DD-WRT + OpenVPN
Írta: Kerekes Attila
Jun/090
Ha már annyi hasznos szolgáltatást sikerült összehoznom a kis ASUS routeremen, gondoltam egy openvpn kliens is még simán belefér. Meglepődve tapasztaltam, hogy a dd-wrt alapból tartalmazza az openvpn klienst és szervert is. Hát az egyetemi vpn fájljait gyorsan fel is dobáltam rá, majd indítottam is a programot shellből:
openvpn --daemon --config nyme.ovpn
És már megy is. Ha az openvpn fellülírta a default gatewayt azt nem árthat visszaállítani, hacsak nem akarjuk az egész adatforgalmunkat a vpn-en keresztül küldeni. Elsőre nézzük meg mi volt az eredeti. Használjuk a route -n parancsot, majd keressünk egy olyan útvonalat, ahol a destination mező az openvpn szerverünk ipjével egyezik, a gateway pedig nem 10.8.0.1. Innét másoljuk ki a gateway mezőt. Nálam ez 86.101.107.254. Majd:
root@Mainstream:~# route del default gw 10.8.0.1 root@Mainstream:~# route add default gw 86.101.107.254
Hogy a kis otthoni hálózatunk is tudjon csatlakozni az egyetemi gépekhez nemárt még beállítani egy SNAT-ot. Nézzük milyen alhálózatok kerültek be hozzánk:
root@Mainstream:/opt/root/nymevpn# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface ... 172.16.4.0 10.8.0.1 255.255.255.0 UG 0 0 0 tap0 172.16.115.0 10.8.0.1 255.255.255.0 UG 0 0 0 tap0 ...
Ezek a sorok gyanúsak. a 172.16.4.0/24-es és a 172.16.115.0/24-es rangekre lesz szükség adott esetben. Szóval:
iptables -t nat -A POSTROUTING -o tap0 -d 172.16.4.0/24 -j SNAT --to-source 10.8.0.2 iptables -t nat -A POSTROUTING -o tap0 -d 172.16.115.0/24 -j SNAT --to-source 10.8.0.2
Kész is vagyunk. Az otthoni hálózatunk gépeiről már gond nélkül küldhetjük az exploitokat az egyetemre :)
Ajánlott irodalom:
http://www.dd-wrt.com/wiki/index.php/OpenVPN
#eof
DD-WRT + Dircproxy
Írta: Kerekes Attila
Jun/090
Pár hónapja vettem egy ASUS WL-500G Premium v2-es routert itthonra. Pár nap hackelés után sikerült egész használhatóvá tennem egy dd-wrt-vel és pár optware csomaggal (nmap, transmission, xinetd, samba, swat, mc, nano, netcat, gsed…). Ha lesz időm, majd írogatok az utóbbiak installálásáról is, bár angolul nagyon jól dokumentálva vannak a dd-wrt wikin. Most a dircproxyról lesz szó, amit sikerült ugyancsak felhegesztenem rá. Nézzük hogy is álljunk neki. Feltételezzük, hogy az optwaret már sikerült működésre bírni a routeren:
ipkg-opt install dircproxy
Hát ez nem volt túl nehéz, de nézzük hogyan lesz használhatóbb az egész. Elsőre is csináljunk magunknak egy alap configfájlt:
cp /opt/share/dircproxy/dircproxyrc /opt/etc/
Majd szépen szaladjunk végig rajta, állítsuk be amit kell. Itt elvileg elérhettek egy minta cfg-t, amit összekalapáltam. A jelszavunkat a dircproxy-crypt paranccsal generálhatjuk le (bepötyögjük a jelszót, kiköpi a kódolt változatot, azt meg a dircproxyrc-be másoljuk a jelszavas mezőbe). Ha ez is megvan, és szeretnénk, hogy a dircproxy a routeren automatikusan elinduljon, hozzunk még létre a következő fájlt:
touch /opt/etc/init.d/S60dircproxy
és másoljuk bele ezt:
killall dircproxy 2>/dev/null /opt/bin/dircproxy -f /opt/etc/dircproxyrc
Ezután már indíthatjuk is a bouncerünket:
./opt/etc/init.d/S60dircproxy
Ha mindent jól csináltunk akkor a routerünk megadott portjára csatlakozva beléphetünk a bouncerre, ami azután csatlakozik az irc szerverhez.
Ajánlott irodalom:
http://www.dd-wrt.com/wiki/index.php/WL500G_Premium_v2
http://code.google.com/p/dircproxy/wiki/ManDircproxy
http://www.dd-wrt.com/wiki/index.php/USB_on_ASUS_WL500GPV2
#eof
Netcat proxy második nekifutás
Írta: Kerekes Attila
May/090
Előző gondolatmenetet kicsit tovább vittem. Tegyük fel, hogy állandóan proxyzni szeretnénk egy porton. Ha az alábbi parancsot használjuk:
nc -l -p 31337 0<backstream | nc google.hu 80 1>backstream
akkor ha csatlakozunk a böngészőnkkel, bejön a google.hu, de a program ki is lép a routeren, így ha másodikra is próbálkozunk, nem fog már bejönni a honlap. Mit tehetünk ilyenkor? Erre találták ki a inetd-t vagy Xinetd-t. Én most a Xinetd-s megoldást fogom vázolni. Elsőre is az /etc/services fájlban létre kéne hozni az új szolgáltatásunkat. Ezt az alábbi sorral tehetjük meg:
duckroll 31337/tcp # duckrolling nc
Létre is hoztuk a duckroll servicet, ami bizony a 31337-es tcp portot használja. Ezekután jöhet a Xinetd bejegyzés. Hozzunk létre egy filet az /etc/xinetd.d/-ben:
touch /etc/xinetd.d/duckroll
És másoljuk bele a következőt:
service duckroll
{
flags = Reuse
socket_type = stream
wait = no
user = root
protocol = tcp
server = /root/duckroll.sh
only_from = localhost 10.0.0.0/8
disable = no
}
Az only_from mezőt értelemszerűen töltsük ki, hogy a saját hálónkról is be tudjunk lépni (pl 192.168.0.0/24). Nézzük mi is kerüljön a /root/duckroll.sh-ba:
#!/bin/bash /bin/nc google.hu 80
Ezekután már akárhányszor csatlakozunk a 31337-es portunkra, mindig a google.hu fog bejönni.
Oké, de mi az értelme ennek az egésznek. Elmélkedjünk rajt egy kicsit. Lényegében az adatforgalmat átdobtuk egy shell scripten, amiben össze vissza loggolhatjuk és átírhatjuk az egészet. Nézzünk egy példát:
#!/bin/bash /bin/tee -a forgalom.log | /bin/nc google.hu 80
Most a forgalom.log-ba már láthatjuk is a böngészőnk által küldött kérést. Nézzük tovább:
#!/bin/bash /bin/sed -u s/duckroll/rickroll/ | /bin/nc google.hu 80
Lehet tippelni. Ha esetleg valaki a hálón rákeresne a duckrollra, akkor rickroll eredményét fogja megkapni. Persze miért írná be bárki is a google.hu cím helyett a routerünk címét, ráadásul a 31337-es porttal utána. Ez így elég furcsa… De egy iptables szabály segíthet a problémán:
iptables -t nat -A PREROUTING -p tcp --dport 80 -d google.hu -j REDIRECT --to-port 31337
A REDIRECT mindig a routernek a –to-port-ban megadott portjára küldi a csomagokat tovább. Így már ha simán a google.hu-ra vagyunk kiváncsiak is a proxyzott, shell scripten átfuttatott oldalt kapjuk.
Ez szép és jó, de most már igazán nézhetnénk valami hasznos példát az egészre… Tegyük fel, hogy egy adott torrent oldalon például az arányunkkal akarunk játszani. Mi minden kéne:
- iptables-ben egy szabály ami a torrent oldal felé haladó kapcsolatokat beszipkázza.
- egy script ami az adatokat megfelelően módosítja
Az iptables szabály valahogy így nézne ki:
iptables -t nat -A PREROUTING -p tcp --dport PORT -d HOST -j REDIRECT --to-port 31337
PORT: a torrent tracker portja (pl 11337)
HOST: a torrent tracker címe (pl … :)
A duckroll.sh scriptünk valami ilyesmi is lehetne, ha mondjuk az általunk letöltött mennyiséget szeretnénk kinullázni (freeleech):
#!/bin/bash /bin/sed -u 's/downloaded=.*\&left/downloaded=0\&left/' | /bin/nc HOST PORT
És kész is vagyunk. Innéttől ha a torrent kliensünk kapcsolódni akar a trackerhez, a kapcsolatot elkapja a routerünk, átírja benne az általunk letöltött mennyiséget nullára, majd továbbítja az adatokat. Persze a trackerek nagyrésze az ilyen ügyeskedéseket figyeli, és bannolja a csalókat. Egy bonyolultabb scripttel akár ésszerű feltöltést is lehet szimulálni.
Gondoljuk csak végig, milyen könnyen és milyen kevés alap unix eszközzel sikerült ezt elérnünk. Hasonló módszerrel különböző adatfolyamokat manipulálhat bárki, ezt kombinálva mitm támadásokkal könnyedén lehet rosszindulatú kódot bejuttatni egyes adatfolyamokba…
Ajánlott irodalom:
http://www.linuxfocus.org/English/November2000/article175.shtml
http://www.stearns.org/doc/nc-intro.v0.80.html
#eof
