• XSS.stack #1 – первый литературный журнал от юзеров форума

Как узнать куда ведёт ссылка с редиректами: все промежуточные сайты и cookies

tabac

CPU register
Пользователь
Регистрация
30.09.2018
Сообщения
1 610
Решения
1
Реакции
3 332
При клике на ссылку с редиректом вы окажитесь не на том сайте, куда ведёт эта ссылка, а на каком-то другом. Самый популярный пример таких ссылок — это ссылки, полученные на разных сервисах по сокращению ссылок.

Как определить все редиректы страницы

Для Linux имеется специальная программа под названием Hoper — она делает именно то, что нас интересует: показывает все сделанные редиректы. В Kali Linux программа устанавливается следующим образом:
Bash:
sudo apt install libcurl4-openssl-dev
sudo gem install gemspec hoper
Вполне возможно, что в другие дистрибутивы Linux также удастся выполнить установку этим же способом.

В BlackArch команда устанавливается так:
Bash:
sudo pacman -S hoper
но в данный момент она не работает в BlackArch (хотя раньше работала):
hoper.png

Использование программы простейшее:
Bash:
hoper URL
У программы hoper имеется ряд проблем — главная из них: она показывает не все переходы, которые делает ссылка.

Другие недостатки:
  • требует Ruby
  • не работает в BlackArch
  • не показывает кукиз
Как говориться, если хочешь, чтобы что-то было сделано хорошо — то сделай это сам!


Программа для определения всех редиректов

Задача кажется довольно простой — нужно перейти по ссылке, посмотреть куда она ведёт, перейти туда, посмотреть куда ведёт следующая ссылка и так по кругу.

Но имеются следующие трудности:
  • относительная переадресация: ссылка может быть абсолютной, а может быть относительной, например «/blog» или «/». По относительной ссылкам нельзя просто перейти — нужно правильно составить абсолютную ссылку (видимо, Hoper не умеет этого)
  • разные коды ответов: имеется несколько HTTP кодов ответов с редиректами, они имеют вид 3xx. Это нужно учитывать при написании парсера. При этом нельзя ориентироваться на код ответа 200 для прекращения обхода ссылок, поскольку код ответа 404 или 403 и другие также означают, что нужно остановиться
  • переадресация с кукиз: некоторые сайты устанавливают кукиз и действуют исходя из них
  • некоторые сервисы активно противодействуют ботам
  • редиректы могут выполняться не только с помощью HTTP заголовков, но и методами JavaScript и HTML.
Пример редиректа с помощью <meta http-equiv='refresh':
Код:
<meta http-equiv='refresh' content='1;url=https://pay2u.space/d/5d9a67e7a054c'>
Пример редиректа с помощью JavaScript:
Код:
<script>window.location.href = "http://fara.host/?o08z";</script>
Пример редиректа с помощью JavaScript и с дополнительной обфускацией:
Код:
<body><script>function ready(callback){ if(document.readyState!='loading') callback(); else if (document.addEventListener) document.addEventListener('DOMContentLoaded', callback); else document.attachEvent('onreadystatechange', function(){if (document.readyState=='complete') callback();});}ready(function(){ var options = { excludes: {canvas: true, fonts:true} }; Fingerprint2.get(options, function(components) { var fingerprint = Fingerprint2.x64hash128(components.map(function (pair) { return pair.value }).join(), 64); location.href = window.location.protocol + "//" + window.location.host + '/check-unique/index?unique_code='+fingerprint+'&link_type=partner&code=5d9a67e7a054c&u=&url=http://goldenreceiptwin.top/&upgrade=9c69cd6a8a0c0'})});</script></body>
Первые три проблемы я решил в своём скрипте, четвёртая решена только частично. Пятая также решена частично — можно добавить больше паттернов для поиска редиректов, но окончательно побороть обфускацию невозможно. Кстати, если вы хотите дополнить примеры редиректов для добавления их в этот скрипт, то пишите в комментариях.

Чтобы использовать скрипт создайте файл dest-finder.sh:
Код:
gedit dest-finder.sh
И скопируйте в него:
Bash:
#!/bin/bash
 
LINK=$1
COUNTER=1
 
rm /tmp/cookies.txt 2>/dev/null
 
echo "Получена для анализа ссылка: $LINK"
echo
while (( 1 )); do
      HEADER=`curl -s -I -A 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36' --cookie-jar /tmp/cookies.txt -b /tmp/cookies.txt "$LINK"`
      LOCATION=`echo "$HEADER" | grep -E -i '^Location: ' | sed 's/Location: //' | sed 's/location: //' | sed 's/[[:space:]]\+//g'`
      CODE=`echo "$HEADER" | head -n 1`
    if [[ -z "$LOCATION" ]]; then
 
        BODY=`curl -s -A 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36' --cookie-jar /tmp/cookies.txt -b /tmp/cookies.txt "$LINK"`
        LOCATION=`echo "$BODY" | grep -E "(location.href)|(meta http\-equiv='refresh')" | grep -E -o "http(:|s)[^']+" | head -n 1 | sed 's/";<\/script>//'`
        if [[ -z "$LOCATION" ]]; then
            echo "Конечный пункт назначения: $LINK"
            echo
            echo "Во время переадресаций были установлены следующие кукиз: "
            cat /tmp/cookies.txt | awk '$1 != "#"'
            exit
        fi
    fi
    echo "Переадресация номер: $COUNTER"
    echo "Получен код ответа: $CODE"
    echo "Выполнена переадресация на $LOCATION"
          echo ""
 
    if [[ -z "`echo \"$LOCATION\" | grep -E '(^http)'`" ]]; then
        if [[ "$LOCATION" == "/" ]]; then
        LOCATION=''
        fi
    LINK="`echo "$LINK" | grep -E -o '[^?]*' | head -n 1`""$LOCATION"
    else
        LINK="$LOCATION"
    fi
    COUNTER=$(($COUNTER+1))
done
Использование:
Bash:
bash dest-finder.sh URL
Ссылки рекомендуется помещать в кавычки, поскольку они могут содержать символы, имеющие специальное значение для оболочки Bash.

Например:
Код:
bash dest-finder.sh 'http://hackware.ru/?goto=1'
Теперь нам показаны все четыре редиректа:

dest-finder.sh_.png


взято с hackware.ru
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх