Массовая проверка вебшелов на валидность

Smiile

Carder
Messages
50
Reputation
9
Reaction score
14
Points
8
Дело было ночью, дел было навалом, а тут стучит Гармошка, который притаранил около 20к вебшелов по дешевке .
Но сразу предупредил, что половина не валидных, а проверять даже 1к шелов руками, работы на полдня, стало ясно, что нужна чекалка. Селлер вебшелов предложил купить ее за 200$, цена была явно не адекватной и покупать никто, конечно, не стал.

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

Этап 1.

Поскольку количество шелов было не шуточным и половина была мертвая, на первом этапе нужно было их просто прочекать на http код - 200 ок.
Который говорит о том, что по данному урлу есть какая-то страница. Для реализации задачи был выбран обычный bash, php конечно гораздо универсальнее, но писать на нем дольше и на хостинге всеравно запустить не получиться, время работы скрипта почти везде ограничено. Вот листинг готового скрипта:

#!/usr/local/bin/bash

links="/root/links.txt" # Файл со всеми имеющимися линками.
result="/root/valid.txt" # Файл с линками, где имеется какая-то страница (200 ок).


if [ -r "$links" ]; then
if [ -w "$result" ]; then
for address in $(cat $links); do
if (wget -t 1 -T 5 --spider $address &>/dev/null); then
echo $address; # Показываем линки со страницей
echo $address >> $result;
fi
done
else
echo Cannot open $result for writing or file does not exist.
fi
else
echo Cannot open $links for reading or file does not exist.
fi
"wget -t 1 -T 5" говорит о том, что пробывать соединиться с адресом мы будем 1 раз и установим таймаут 5 секунд. В противном случае проверка может затянуться на несколько суток. Если хотите видеть на консоле подробный отчет, а не готовые линки удалите "&>/dev/nul".

После примерно 5 часов проверки, скрипт закончил работу, и получился файл с половиной всех имеющихся вебшелов до этого. Поглядев ссылки руками, стало понятно, что мусора там очень много. Например вместо шела страница с посланием - "а не ох*ел ли ты нас ломать?" Чекать полученные ссылки руками, было абсурдно. Поэтому я перешел ко второму этапу.

Этап 2.

У нас есть список ссылок, где имеется какая-то страница, теперь же нужно определить, шел там стоит или какая-то ерунда. Поскольку 99% всех вебшелов были от rst, было решено, скачивать страницу и делать grep по нужной инфе, в данном случае r57shell. Вот листинг:

#!/usr/local/bin/bash

links="/root/valid.txt" # Файл со всеми имеющимися линками.
result="/root/result.txt" # Файл с линками, где стоит вебшелл.

keyword="r57shell" # Keyword

if [ -r "$links" ]; then
if [ -w "$result" ]; then
for address in $(cat $links); do
if ( (wget -T 5 -t 1 $address -O - | grep -m 1 $keyword) &>/dev/null); then
echo $address; # Shows good links
echo $address >> $result;
fi
done
else
echo Cannot open $result for writing or file does not exist.
fi
else
echo Cannot open $links for reading or file does not exist.

fi
Как видите это тот же скрипт, только wget скачивает файл, а дальше делается grep на предмет r57shell. После еще 4 часов проверки, мы получили на выходе только готовые и валидные вебшелы. Вуаля.

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

Справочная информация:

1) Для работы скрипта, в системе должен быть установлен bash. Если в линуксе он стоит обычно по дефотлу, то во bsd его надо поставить, вот так: whereis bash, cd /urs/ports/.., make && make install
2) Путь до bash у вас может быть другим, узнать где он стоит можно так - locate bash.
3) Перед запуском скрипта, нужно создать файл куда будет записан результат, сделать это можно командой touch file и поправить путь в скрипте.
3) Перед запуском скрипта, нужно сделать chmod 755 на него и запускать из этой же директории вот так "./script"
4) Не советую запускать с обычного сервера, лучше если это будет антиабуз или хостинг с ssh.
Автор не притендует на полноту изложения данной проблемы, он описал свой частный опыт быстрого решения возникшей проблемы по массовой проверке вебшелов на валидность, простым и доступным способом. Дополнения к статье приветствуются, критика с конкретными примерами лучшей реализации - тоже.


Права на статью принадлежат её автору. Перепечатка, использование отдельных частей и т.д. в личных целях на других ресурсах разрешена только с устного соглашения автора.

Copyright (C) Emptiness
 
Top