Репликация «атаки» удаленного сайта путем принудительной отправки определенных данных формы на страницу

#asp-classic

#asp-classic

Вопрос:

У меня есть эта простая форма:

 <form  method="post" id="theForm" action="user-password.asp">
    <input type="hidden" name="what" value="process" />
    <fieldset>
        <div>
            <label for="email">Username or Email</label>
            <input type="text" class="form-control" id="email" name="email" placeholder="Username or Email" />
        </div>
        <div>
            <button type="submit" class="btn btn-success top10">Submit</button>
        </div>
    </fieldset>
</form>
  

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

 For ix = 1 to Request.Form.Count
    fieldName = Request.Form.Key(ix)
    fieldValue = Request.Form.Item(ix)
    bb = bb amp; fieldName amp; ": " amp; fieldValue amp; vbcrlf
Next

bb = newstr(bb)
  

Для вышеупомянутой страницы страница с ошибкой:

Во внешнем объекте произошла ошибка с возможностью перехвата (C0000005). Скрипт не может продолжить выполнение.

Содержимое формы было таким:

 form: email[$acunetix]: 1
what: process
  

Чтобы улучшить обработку ошибок на странице, я хотел бы иметь возможность копировать загрузку формы с помощью того, что использовалось для генерации ввода формы, из-за которого произошла ошибка страницы — в приведенном выше примере имя поля формы не email является, но есть email[$acunetix] , что, похоже, привело к повреждению страницыкогда он пытается обработать форму.

Однако я не знаю, что было сделано для этого. Тот же IP-адрес потратил около 40 минут, перенося на мои страницы всевозможные материалы, которые в конечном итоге привели к сбою моего сайта, требуя перезагрузки сервера.

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

Комментарии:

1. Я бы рекомендовал curl , но я предполагаю, что вы используете Windows, поэтому вы можете захотеть проверить Postman .

2. Вы пытались изменить имя с помощью javascript в консоли для поля электронной почты на email [$ acunetix] перед его отправкой? Скорее всего, злоумышленник добавил некоторые значения в $acunetix и попытался отправить их в качестве переменной, используя имя, а не фактическое значение поля. Вероятно, надеясь, что он использовался где-то без параметров. Удачи!

3. Привет @DanielNordh — спасибо за ваш ответ! Честно говоря, я не знаю, как это сделать повторно. изменение имени с помощью JS. Я изучал элемент проверки и вижу, что могу изменить там имя, но влияет ли это на то, как будет отправлена фактическая форма? Я хотел бы попытаться воспроизвести сценарий такого типа, но я новичок в том, как это сделать. Все введенные пользователем данные параметризуются с точки зрения того, как они подключаются к SQL-запросам, но что-то еще должно приводить к запуску страницы. Еще раз спасибо

4. @4532066 Я считаю, что это зависит от того, как вы на самом деле отправляете данные. Если вы извлекаете данные из жестко закодированных имен полей, это не сработает, поскольку ни одно имя поля не будет соответствовать тому, что вы пытаетесь сделать. То, как вы собираете данные формы, похоже, что вы делаете это динамически, поэтому вполне возможно, что кто-то может отправлять данные через имя переменной, а не само значение. Я, честно говоря, никогда не пробовал то, о чем говорю, поэтому я мог бы просто давать бесполезные идеи, но это то, что я бы, по крайней мере, протестировал, чтобы посмотреть, что произойдет. Попробуйте изменить с помощью элемента inspect.

5. Прекратите использовать вместо этого динамически назначаемые значения, будьте явными Request.Form("email") , чтобы избежать отправки скриптовых детишек через любые поля, которые они пожелают. Кроме того, присвоение имени странице обработки формы user-password.asp вызывает проблемы.