• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Help! Скрипт не понимает Post запрос на кириллице!

  • Автор темы gromadaigor
  • Дата начала
G

gromadaigor

Привет всем! Скачал в буржунете скрипт автореспондера (автоматическая почтовая рассылка). Работает хорошо. Письма приходят на кириллице, но вот при введении в форму подписки имени пользователя на кириллице выдает ошибку: "Все поля обязательны для заполнения!". Такое впечатление что он вообще кириллицу не видит (или на ходу преобразовывает все буквы в пробелы). ПОМОГИТЕ ПОЖАЛУЙСТА!
Скрипт можно взять в приложеном архиве.
 

Вложения

  • sw_aresp15.zip
    41,8 КБ · Просмотры: 163
V

Vovochka

Честно скачал, честно открыл и так же честно закрыл.
С таким объмом да без наводок работать однозначно не хочется.

Но дам вам совет:
Сделайте поиск по фразе, выдаваемой при неправильном вводе.
Так возможно вам удастся найти место проверки вводимых значений, а дальше все просто. :rolleyes:
 
G

gromadaigor

И по фразе ошибки искал, и по имени поля формы в которое вбивается кириллическое значение. Нашел место где скрипт обрабатывае данные формы, но так как в программировании не силен и нагуглить ничего не удалось, то дальше дело не зашло. Ниже приведу свои соображения:

Вот форма для ввода :

[codebox]<form method="POST" action="http://www.my-domain.ru/cgi-bin/aresp15/swars.cgi">
<input type="hidden" name="mode" value="register"><input type="hidden" name="ar" value=earn>
<div align="center"><center><table border="1" >
<tr><td >Имя:</td><td> <input type="text" name="user" size="20"></td></tr><tr><td >
<font face="Tahoma" size="2">Email:</font></td><td>
<input type="text" name="email" size="20"> </td></tr><tr><td align="right" colspan="2">
<div > <p>
<input type="submit" value="Subscribe" name="B1"> </td></tr></table> </div>
</form>[/codebox]

Тут, в файле swars.cgi, скрипт обрабатывае данные формы:

[codebox]@pairs = split(/&/, $input);
foreach $pair (@pairs) {($name, $value) = split(/=/, $pair);

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\n/ /g;
$FORM{$name} = $value;[/codebox]

А вот код ошибки если имя подписчика вбивать на кириллице:

[codebox]sendmail($FORM{'email'},$subject,$body,$FORM{'ar'},$ftoattach,1,$FORM{'user'});
} else {error "Both fields are required!"};[/codebox]


Посмотрите пожалуйста что можно сделать. Заранеее большое спасибо!
 
V

Vovochka

Код:
$FORM{'user'}=~/^\s*(\w{1,20})\s*(\w{0,20}).*$/;
my($sec)=$2;
if ($sec ne ""){$sec=" \u$sec"};
$FORM{'user'}="\u$1$sec";

Смысл в этих строках.
А точнее в этой.
$FORM{'user'}=~/^\s*(\w{1,20})\s*(\w{0,20}).*$/;

Потом скажу на что заменить. Сейчас просто нет времени.
 
V

Vovochka

Можешь заменить на:
$FORM{'user'}=~/^\s*(\S{1,20})\s*(\S{0,20}).*$/;

Но тогда в имя, фамилия могут быть внесены любые не пробельные символы.
 
G

gromadaigor

Можешь заменить на:
$FORM{'user'}=~/^\s*(\S{1,20})\s*(\S{0,20}).*$/;

Спасибо за совет. Заменил, но все осталось как было. Например, если ввожу в форму кириллические символы вместе с латинскими то скрипт "запоминает" только латинские. Как я уже говорил, как будто заменяет их на пробелы.
Подскажите пожалуйста по каким ключевым словам поискать информацию в гугле.
 
V

Vovochka

Гуглить на тему регулярных выражений.

Объясню смысл этого регулярного выражения (то что /"выражение"/ ):
^ - Символ, обозначающий начало строки.
\s* - Любое количество пробельных символов (в том числе и нулевое).
\w{1,20} - От 1 до 20 , так сказать, символьных символов (включают в себя латиницу, цифры и еще несколько симовол типа "-", "_" и т. д.)
() - скобки, группировка. То что заключено в скобки потом будет доступно через определенные переменные.
Я предложил:
\S{1,20} - Это любые не проблельные символы. Так же от 1 до 20.

Так что работать должно. Может это не тот кусок кода? Поищите еще такие куски :)
 
G

gromadaigor

Спасибо за разъяснения! Будем искать нужные куски :)

Ха-ха! Искать пришлось не долго. В скрипте три таких строки. Заменил все. Теперь все работает, даже если имя с пробелами :). Большое спасибо Vovochka за помощь!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!