Цель взлома: взломать зашифрованный пароль для входа в систему трояна asp, взломать пароль трояна asp. Поскольку описания версии трояна нет, то и конкретного названия трояна я не знаю.
Существует два метода взлома: замена зашифрованного текста зашифрованным паролем и использование зашифрованного текста и алгоритма шифрования для расшифровки пароля. Первое на самом деле вообще не трещина.
Цель взлома: просто ради развлечения.
Если я не смогу получить исходный код ASP, у меня не будет шансов взломать пароль. Друг из Китая сообщил, что получил доступ к веб-странице, но не смог изменить домашнюю страницу. Он обнаружил, что на ней был троян ASP, но пароль был зашифрован. Тогда есть эта анимация. Ладно, слишком много ерунды, так что будьте готовы, это объяснение будет довольно длинным.
Код ключа для проверки пароля для входа в систему asp Trojan выглядит следующим образом:
если Epass(trim(request.form("пароль")))="q_ux624q|p" тогда
response.cookies("пароль")="8811748"
...
<%
конец выбора
функция Epass(пройти)
temppass=StrReverse(left(pass&"zxcvbnm,./",10))
Templen=len(пройти)
ммпароль=""
для j=от 1 до 10
mmpassword=mmpassword+chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
следующий
Epass=replace(mmpassword,"'","B")
конечная функция
%>
Очевидно, что функция Epass используется для шифрования введенного пароля, а затем полученный зашифрованный текст сравнивается с исходным зашифрованным текстом. Если у вас есть хоть какие-то навыки программирования, особенно VB, то алгоритм шифрования в Epass будет понятен с первого взгляда. Если нет, то это не имеет значения, я думаю, вы поймете это вскоре после моего объяснения. В функции передается переменная, содержащая пароль. pass&"zxcvbnm,./" Соедините содержимое прохода с zxcvbnm,./, чтобы получить новую строку. left(pass&"zxcvbnm,./",10) принимает первые 10 цифр. Функция StrReverse меняет порядок результирующей 10-значной строки. len(pass) получает длину пароля. Ниже находится петля. Возьмите Ascii-код каждого бита полученной строки — длина пароля + округление (позиция символа * 1,1), а затем преобразуйте полученное значение в символы и переподключитесь. Наконец, замените все символы ' в полученной строке на B, чтобы сгенерировать зашифрованный текст. Если мы извлекем алгоритм шифрования и заменим исходный зашифрованный текст нашим собственным, соответствующий пароль также станет вашим паролем. Но, как я уже сказал, на самом деле это не трещина.
Если мы входим в любовь, процесс шифрования выглядит следующим образом:
любовь
lovezxcvbnm,./ 'Подключиться
lovezxcvbn 'Возьми топ-10
nbvcxzevol 'Порядок отменен
н
110(ascii)-4(цифры)+int(1(позиция)*1.1)=107
Код ASCII 107 — это k и т. д. Окончательный зашифрованный текст:
k`ucy|hztsМы
можем вычислить пароль с помощью зашифрованного текста и алгоритма шифрования. Начните с последнего шага алгоритма и продвигайтесь вверх. Последний шаг – заменить все ' на B. Необходимо ли заменить B обратно на '? Ответ – нет. Пока мы можем получить окончательный зашифрованный текст, вполне возможно, что пароль другой. Если имеется 10 B, то количество исходных паролей равно 2 в 10-й степени. Хотя исходный пароль только один, все 1024 пароля верны. Если вы хотите взломать его идеально, вы можете попробовать написать все комбинации самостоятельно.
Тогда этот шаг можно проигнорировать.
Приведенный выше алгоритм очень ясен:
chr(asc(mid(temppass,j,1))-templen+int(j*1.1))
нам просто нужно просто заменить + и -.
chr(asc(mid(temppass,j,1))+templen-int(j*1.1))
Но есть еще одна проблема: мы не знаем заранее длину пароля. К счастью, это не имеет значения. пароль содержит от 1 до 10 цифр.
Затем мы можем использовать цикл от 1 до 10, чтобы найти все возможные пароли, а затем использовать функцию StrReverse, чтобы изменить порядок.
Так как же нам определить, какой пароль мы наконец получили? Вы можете использовать pass&"zxcvbnm,./", чтобы узнать, есть ли первые цифры zxvbnm,./ в конце пароля.
Ну это настоящий пароль. Тогда если пароль будет 10-значным, он всегда будет правильным, потому что соединения потом не будет. Итак, мы можем получить два ответа.
Ниже приведена функция дешифрования, которую я написал:
функцияCcode(код)
для храмаn1=от 1 до 10
ммкод=""
для j=от 1 до 10
mmcode=mmcode+chr(asc(mid(code,j,1))+templen1-int(j*1.1))
следующий
Ccode=strReverse(ммкод)
response.write "Пароль"&templen1&":"&Ccode&"<br>"
if middle(Ccode,templen1+1,10-templen1)=left("zxcvbnm,./",10-templen1) и Templen1<>10 тогда
результат = влево (Ccode, templen1)
следующий
response.write "Последний пароль:"&result
Конечная функция
готова. Алгоритм может быть не полностью освоен за такой короткий срок. Это нормально. Тогда я прикреплю документацию и зашифрованный и расшифрованный исходный код ASP в сжатом виде. изучите его внимательно. Аналогично, пароль 10 всегда правильный. Затем мы возьмем исходный зашифрованный текст в asp и посмотрим, каким будет результат. Хорошо, вы можете войти с обоими паролями. Для тестирования я предположил локальный IIS. Если веб-сервер невозможно настроить локально, вы можете связаться со мной и написать его на других языках.