Shell脚本(或Python)卷曲成带有Forge保护的登录表单

2024-04-25 13:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表格里面有一个隐藏的-csrf字段。该值是一个随机生成的数字,每次点击页面时都会发生变化。我做了大量的阅读和测试,我的尝试都失败了。人们似乎已经克服了php的类似问题,但是我希望从命令行来解决这个问题,所以我正在寻找一个shell脚本解决方案,或者python中的解决方案,我可以从命令行调用它。在

在登录到表单后,它将创建一个cookie,我需要在以后的后续POST命令中引用它。在

失败的脚本示例:

#!/bin/bash
urloutput=$(curl -c ./curlcookie https://foo.com/login)
echo -e "$urloutput"
csrf=$(echo -c "$urloutput" | sed 's/.*csrf" value="//' | sed 's/"><p class=".*//')
echo -e "$csrf"
curl -b ./curlcookie -X POST -d username=user -d password=pw -d _csrf=$csrf https://foo.com/login/attempt

我试过上面剧本的许多变体。我尝试了/login/login/attempt(表单的post位置)。我也尝试过-F而不是-d,还有{}有无媒体。您还可以看到,我尝试了-c和{},但是它们实际上没有做任何事情,因为cookie是在表单登录之后才创建的。因此,我还尝试从第一个命令中删除-c,并用-c替换-b,但是没有成功,最后一个命令仍然得到Forbidden, invalid csrf token.。所以问题是,如何获得csrf值并使用同一会话提交它。我在手册页上没有发现任何特别的东西。我是怎么做到这一点的?在

表单看起来是:

^{pr2}$

我还注意到,如果我在chrome inspector中编辑了∗csrf值,然后提交,那么我得到的响应与从失败的curl命令得到的响应类似。在

卷曲可能不够?如何使用Python实现它?

在尝试提交时,登录尝试似乎得到了不同的csrf。即使我查看cookie中的值并尝试使用它,也会发生这种情况。第二个命令有自己的csrf。我打开我的请求,让它可以由shell运行,也可以通过python运行,就像我可以从shell调用python一样。关键是,如果使用python,那么我需要一种方法来获取所创建的cookie,以便在发布后使用curl,或者在登录后在python脚本中执行顺序POST命令。在


Tags: 命令行https命令echo脚本表单cookielogin