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

Ссылки с редиректами

При клике на ссылку с редиректом вы окажитесь не на том сайте, куда ведёт эта ссылка, а на каком-то другом. Самый популярный пример таких ссылок — это ссылки, полученные на разных сервисах по сокращению ссылок, пример: http://bit.do/fbb2f

О такой ссылке мало что можно сказать пока по ней не будет сделан переход.

Ссылки с редиректом часто используются на сайтах для маскировки внешних ссылок — пользователю выводится ссылка как будто бы на внутренний ресурс сайта, например, http://hackware.ru/?goto=1, но при клике по ней выполняется переход на внешний ресурс.

Анализ ссылок с редиректом может понадобится в том числе для изучения фишинговых ссылок, либо страниц со множеством редиректов: когда вы открываете сайт в окне браузера, но затем вас перебрасывает на следующую страницу без ваших действий, затем на другую и так далее.

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

Для Linux имеется специальная программа под названием Hoper — она делает именно то, что нас интересует: показывает все сделанные редиректы.

В Kali Linux программа устанавливается следующим образом:

sudo apt install libcurl4-openssl-dev
sudo gem install gemspec hoper

Вполне возможно, что в другие дистрибутивы Linux также удастся выполнить установку этим же способом.

В BlackArch команда устанавливается так:

sudo pacman -S hoper

но в данный момент она не работает в BlackArch (хотя раньше работала):

Использование программы простейшее:

hoper URL

Например:

hoper http://hackware.ru/?goto=1

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

Другие недостатки:

  • требует Ruby
  • не работает в BlackArch
  • не показывает кукиз

Как говориться, если хочешь, чтобы что-то было сделано хорошо — то сделай это сам!

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

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

Но имеются следующие трудности:

  • относительная переадресация: ссылка может быть абсолютной, например https://hackware.ru/, а может быть относительной, например «/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

И скопируйте в него:

#!/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 dest-finder.sh URL

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

Например:

bash dest-finder.sh 'http://hackware.ru/?goto=1'

Теперь нам показаны все четыре редиректа:

Как просмотреть кукиз, которые устанавливают сайты при редиректах

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

Если вам хочется сделать так, чтобы кукиз выводились после каждого редиректа, то вы сможете это сделать немного отредактировав приведённый выше скрипт.

Кстати, если вам просто хочется посмотреть, какие кукиз устанавливает сайт (даже если на странице нет редиректа), то предыдущий скрипт также сработает:

bash dest-finder.sh 'https://www.youtube.com/watch?v=UFEz5fPYqNc'

Онлайн сервис, который показывает куда ведёт ссылка и кукиз сайтов

Выше дан исходный код простого скрипта, который не требует установки и работает без зависимостей. Если вам хочется онлайн сервис, чтобы не возиться даже с запуском скрипта, то вот он: https://suip.biz/ru/?act=hoper

Раньше этот сервис работал на основе Hoper, но теперь он использует мой скрипт.

То есть, он вам подойдёт если:

  • нужно узнать все промежуточные страницы редиректа
  • нужно просто посмотреть кукиз, которые устанавливает веб-страница (даже если на ней нет редиректа)

В общем, пользуйтесь, - если найдёте ошибки в работе, то пишите здесь в комментариях — обязательно поправлю.

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.