• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Сбор информации об IP и пробиваем номер сотового. [Python для хакера] Часть 3

Ciao, дорогие участники нашего форума) Давненько от меня не выходило статей. Но это все по тому, что я совместно с @BadBlackHat и @r0hack создаем курс по веб пентесту. Думаю вам понравится. А теперь перейдем непосредственно к сути. Сегодня, мы напишем 2 не больших скрипта на Python, которые не много облегчат вам сбор информации. Первый скрипт получает информацию об IP, а второй не много о номере сотового.

[1] - Сбор информации об IP.

Для начала определимся с тем, какую информацию хотим получить. В основном, это будет город, страна, континент (а вдруг) и провайдер. Также не плохо было бы получить информацию whois. Для написания нашего скрипта, я составил простенький алгоритм.

Код:
1. Взять на вход IP адрес
2. Составить URL адрес по типу: http://ipinfo.io/<IP>/json
3. Запросить JSON данные обратившись по этому адресу
4. Изменяем из JSON формата в словарь на языке Python
5. По средством Python выполним команду в терминале whois <IP>
6. Прочтем данные из пункта выше
7. В читабельном виде выведем полученную информацию

Для начала разберемся с сервисом ipinfo.io - он предоставляет нам информацию об указанном вами IP адресе. Но что же такое JSON? Это всего то один из способов ранения данных. Мы же этот способ переформируем в словарь. Чтобы лучше понять, давайте пропишем в адресной строке вашего браузера следующий URL

Код:
https://ipinfo.io/101.50.1.2/json

Прописав этот URL, вы как будто говорите серверу "Предоставь мне информацию об IP адресе 101.50.1.2 в виде JSON". Данный IP является прокси сервером.

6234512_stock-vector-hand-with-a-syringe-injection-vaccination-medicine.jpg


Так вот, когда мы из JSON переформируем данные в словарь, то чтобы получить, например информацию о городе, существует ключ "city". Более обширная информация о регионе, то ключ "region". Надеюсь, что на этом моменте все понятно. Приступим к написанию непосредственно кода.

Первым делом импортируем необходимые библиотеки. Мы воспользуемся библиотеками json - для обработки информации, urllib.request - для отправки запросов на ресурс и получении данных и os - для выполнения команд в терминале Linux.

Python:
import urllib.request
import json
import os

Теперь же, нам необходимо запросить у пользователя IP адрес, о котором собственно и будет собрана информация.

Код:
getIP = input("[+] Enter IP --> ")

Составляем необходимый URL, дабы в дальнейшем запросить с него информацию.

Код:
url = "https://ipinfo.io/" + getIP + "/json"

Запрашиваем информацию и записываем ее в переменную getInfo. Но, для выявления ошибок, заключаем наш запрос в конструкцию try --> except

Код:
try:
    getInfo = urllib.request.urlopen( url )
except:
    print( "\n[!] - IP not found! - [!]\n" )

Как раз, после выполнения данной строки, если IP был найден в базе сайта и мы корректно подключились к нему, нужно преобразовать данные из JSON в словарь. Для этого воспользуемся опять таки одной строкой))

Код:
infoList = json.load(getInfo)

Данные получены, но не спешите выводить всю информацию, это мы сделаем в последнюю очередь. А теперь получаем whois информацию. Здесь все еще проще.

Код:
myComand = "whois " + getIP
whoisInfo = os.popen( myComand ).read()

После того, как мы собрали всю информацию, нам необходимо красиво вывести ее.

Код:
print( "-" * 60 )

print( "IP: ", infoList["ip"] )
print( "City: ", infoList["city"] )
print( "Region: ", infoList["region"] )
print( "Country: ", infoList["country"] )
print( "Hostname: ", infoList["hostname"] )

print( "-" * 60 )
print( whoisInfo )
print( "-" * 60)

Код я не много видоизменил и "продекорировал". Вот, что получилось в итоге

Код:
import urllib.request
import json
import os

getIP = input("[+] Enter IP --> ")
url = "https://ipinfo.io/" + getIP + "/json"

try:
    getInfo = urllib.request.urlopen( url )

except:
    print( "\n[!] - IP not found! - [!]\n" )

infoList = json.load(getInfo)

def whoisIPinfo(ip):

    try:

        myComand = "whois " + getIP
        whoisInfo = os.popen( myComand ).read()
        return whoisInfo

    except:

        return "\n [!] -- Error -- [!] \n"

     
print( "-" * 60 )

print( "IP: ", infoList["ip"] )
print( "City: ", infoList["city"] )
print( "Region: ", infoList["region"] )
print( "Country: ", infoList["country"] )
print( "Hostname: ", infoList["hostname"] )

print( "-" * 60 )
print( whoisIPinfo ( getIP ) )
print( "-" * 60)

Snimok_Ekrana_Ot_2018-07-16_17-54-43.png


[2] - Пробиваем номер сотового.

Здесь, все строиться практически на таком же алгоритме. За исключением whois))) В число интересующей нас информации входит город, страна, сотовый оператор.
Брать информацию мы будем в виде JSON. Для начала, посмотрим на ее "внешний вид". Для этого пропишите какой-либо номер используя следующий URL.

Код:
https://htmlweb.ru/geo/api.php?json&telcod=<ТЕЛЕФОН>

Я возьму телефон с ресурса onlinesim.

060a40c2afe46ffb448e754d465d9381.png


Думаю, что при конвертации этого из JSON получится многомерный словарь)) Т.е. нужно будет использовать ключи 2 раза. Например словарь[key1][key2]
Приступим конечно же к кодингу. Ничего не меняется, мы импортируем все те же библиотеки, за исключением os.

Код:
import urllib.request
import json

Далее, запрашиваем у пользователя номер сотового телефона

Код:
phone = input("Enter phone: ")

Формируем URL для запроса

Код:
getInfo = "https://htmlweb.ru/geo/api.php?json&telcod=" + phone

Запрашиваем у ресурса информацию о сотовом в json формате

Код:
try:
    infoPhone = urllib.request.urlopen( getInfo )
except:
    print( "\n[!] - Phone not found - [!]\n" )

Из полученной информации, которая храниться в виде json создаем многомерный словарь)

Код:
infoPhone = json.load( infoPhone )

И, конечно, красиво выводим все полученную информацию.

Код:
print( u"Номер сотового --->", "+" + phone )
print( u"Страна ---> ", infoPhone["country"]["name"] )
print( u"Регион ---> ", infoPhone["region"]["name"] )
print( u"Округ ---> ", infoPhone["region"]["okrug"] )
print( u"Оператор ---> ", infoPhone["0"]["oper"] )
print( u"Часть света ---> ", infoPhone["country"]["location"] )

На вход программе давайте номер сотового, но без +

989.jpg


А на этом, друзья, все)

P.S: А не начать ли нам, в следующей части, писать свой сканер web - ресурсов, для сбора информации?
 
Последнее редактирование:

rink0

Green Team
28.11.2017
62
65
BIT
0
Урааа, я уж думал ты совсем забыл про данную серию статьей.
Спасибо большое за информацию!
С меня лайк) Я надеюсь следующая статья выйдет скоро, а не через 5 месяцев :)

Один вопрос :3
почему использовал библиотеку urlib.request, а не requests? Она лучше и шустрее, лично проверено
 
  • Нравится
Реакции: nikos

vag4b0nd

Green Team
24.05.2017
303
1 472
BIT
30
Один вопрос :3
почему использовал библиотеку urlib.request, а не requests? Она лучше и шустрее, лично проверено
Я знаю про requests. Просто старая привычка)

Урааа, я уж думал ты совсем забыл про данную серию статьей.
Спасибо большое за информацию!
С меня лайк) Я надеюсь следующая статья выйдет скоро, а не через 5 месяцев :)
Следующая статья из этого цикла выйдет завтра. Начнем писать свой не большой фреймворк (возможно) для сбора информации о веб ресурсах.
 

SooLFaa

Platinum
15.07.2016
898
1 559
BIT
19
Ну что позволю себе покритиковать. Статейка конечно имеет право на жизнь. Но уровень, дернуть апи сервиса и вывести результат на экран такой себе. Далее по IP, надеюсь все понимают, что вы пробиваете локацию провайдера из информации whois? Определялка телефонов тоже так себе. Лучше уж подключился бы к базе get_contact.
1531805272999.png


Итог. Как бы хекерского в этой статье я ничего не увидел. Пробива как такого тоже.
 
Последнее редактирование:

nikos

Green Team
25.12.2016
507
198
BIT
0
Ну что позволю себе покритиковать. Статейка конечно имеет право на жизнь. Но уровень, дернуть апи сервиса и вывести результат на экран такой себе. Далее по IP, надеюсь все понимают, что вы пробиваете локацию провайдера из информации whois? Определялка телефонов тоже так себе. Лучше уж подключился бы к базе get_contact. Посмотреть вложение 20385
Так и работет сбор информации в интернете:) Да мало но хоть что-то собрать можно.
Хотя можно по больше конечно получить. Если нужно.
 
Последнее редактирование:
P

Paeon

Немного критики :devilish:
Ну использовать ipinfo такой себе вариант, ибо после 1000 запросов, он тупо перестанет работать, а вдруг, например, кто-то захочет автоматизировать фильтрацию списка Ip. А вот если бы ты взял регулярочку, вытянул все нужные значения с whois, вот это, мне кажется, уже был бы интересный урок :)
 

DefWolf

Green Team
24.10.2017
288
794
BIT
0
Я тоже присоединюсь к критике, но это довольно просто, отсылать информацию на сайт и просто красиво выводить )) . Я бы лучше почитал об использование библиотеке beautifulsoup. Я пожалуй о ней вскоре и напишу )
 
J

Jeronimo

У меня выдаёт typeerror: the JSON object must be str, not 'bytes'
 

makar

Green Team
08.09.2016
236
150
BIT
0
ну вот говорит что переменная типа неправильная должна быть строковой а типа байт

могу быть не прав с python не разбирался
 

makar

Green Team
08.09.2016
236
150
BIT
0
номер строки есть? в которой ошибка? если да меняем тип байт на строковый то есть на str
ps код не смотрел с телефона не оч удобно
 
J

Jeronimo

номер строки есть? в которой ошибка? если да меняем тип байт на строковый то есть на str
ps код не смотрел с телефона не оч удобно
там по сути нет как таковой строки. там весь скрипт нацелен на то, чтобы вытащить инфу со страницы и красиво её оформить
Код:
import urllib.request
import json

phone = input("Enter phone: ")

getInfo = "https://htmlweb.ru/geo/api.php?json&telcod=" + phone

try:
        infoPhone = urllib.request.urlopen( getInfo )
       

except:
        print( "\n[!] - Phone not found - [!]\n" )

infoPhone = json.load( infoPhone )

print( u"Number --->", "+" + phone )
print( u"Country --->", infoPhone["country"]["name"] )
print( u"Region --->", infoPhone["region"]["name"] )
print( u"Okrug --->", infoPhone["region"]["okrug"] )
print( u"Operator --->", infoPhone["0"]["oper"] )
print( u"World --->", infoPhone["country"]["location"] )
 

SooLFaa

Platinum
15.07.2016
898
1 559
BIT
19
Так и работет сбор информации в интернете:) Да мало но хоть что-то собрать можно.
Хотя можно по больше конечно получить. Если нужно.
Не так он работает. Причем совсем не так. Эвристический анализ, чек баз слитых, пробивка dns, ip оружения, сервисы. Вот так, не вхуизом дернуть имя провайдера.
 

puff

One Level
03.11.2016
7
4
BIT
0
по мне так безсмысленно потраченое время, зачем делать велосипед если его довно изобрели? заходиш на 2ip и он тебе всю инфу по ip покажет, и по сотовым достаточно просто погуглить, так и живём нечего нового не придумываем а просто переделываем старое....поменял руль от велосипеда и название сменил, думаю статья написана была просто для галочки
 
  • Нравится
Реакции: DefWolf и _Fallen404_

vag4b0nd

Green Team
24.05.2017
303
1 472
BIT
30
по мне так безсмысленно потраченое время, зачем делать велосипед если его довно изобрели? заходиш на 2ip и он тебе всю инфу по ip покажет, и по сотовым достаточно просто погуглить, так и живём нечего нового не придумываем а просто переделываем старое....поменял руль от велосипеда и название сменил, думаю статья написана была просто для галочки
Отчасти, ты, конечно, прав. А зачем делают вилосипеты, если уже есть много разных навороченых авто? Это чтоб пишком не ходить человеку, который не может позволить себе машину. Т.е.: простое упрощение действий. А вот про ничего нового я бы поспорил. Правда вот, более новую информацию я публикую в закрытом разделе. Люблю критику, но если вам что-то не нравится, то напишите как бы вы видели эту статью, чем бы дополнили (а не просто прийти на форум, критиковать и ничего более не делать, если критикуете, думаю знаний достаточно).

Для галочки? Я пишу это тем, кому нравятся мои статьи. Стараюсь не забывать про них и выкладывать почаще т.к. сейчас времени не много.
 
N

ntnseverov

Не знаю как в других странах, но монополист в Казахстане - это Казахтелеком.
Как у них там заверчено, но
Мой внешний IP , сервис в разные дни определяет как
город на 1000 км западнее меня
город на 1000 км восточнее меня
Пару раз город определил точно
Вот сейчас определил город на 1500 км юго западнее
 
Мы в соцсетях:

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