黑帽联盟

 找回密码
 会员注册
查看: 2238|回复: 1

[基础服务] curl模拟登录网页(定位原创发布)

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

    本帖最后由 yun 于 2016-10-21 20:17 编辑

    首先声明:此测试,本人亲测成功,可用!

    目地:了解curl命令的使用,以及用途,功能的强大

    有时在批量抓取网站页面内容时,是需要处于登录状态的,否则无法获取。curl这个强大的工具可以完成这个工作。之前最好也先了解一下http POST方法,网站登录大都是用这个办法。

    这里是以百度为例(下面是我个人的测试):

    1、先保存用户变量
    • [root@cbh4 /]# ACCOUNT=qasxc5  (这里的qasxc5是我的百度用户名)
    • [root@cbh4 /]# PASS=cnblackhat  (这里的cnblackhat换成你的百度用户密码)
    • [root@cbh4 /]# echo $ACCOUNT


    [color=rgb(51, 51, 51) !important]复制代码

    2、访问百度,取得cookie,保存到cookies. 查看文件可知cookie名为BAIDUID
    • [root@cbh4 /]# curl -c cookies www.baidu.com
    • 以上命令回车会出现一大堆代码信息,不要去理会,与此同时,在你的执行目录下会生成一个文件名为:cookies

    [color=rgb(51, 51, 51) !important]复制代码

    以下是cookies的内容:
    a1.jpg



    3、带着cookie访问这个地址,得到$TOKEN$
    • [root@cbh4 /]# TOKEN=$(curl -b cookies -sS "https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&class=login&tt=$(date +%s)&logintype=dialogLogin" | tr "'" '"' | json_pp -t dumper -json_opt pretty | grep token | cut -d\' -f4)
    • [root@cbh4 /]# echo $?
    • 0
    • 执行以上命令,执行之后,检测命令执行成功,返回状态是0


    [color=rgb(51, 51, 51) !important]复制代码

    以上你运行第一条命令你可能会遇到错误:-bash: json_pp command not found
    json_pp依赖perl安装包,你下载个perl安装包安装即可,yum直接安装不行,已测过。

    perl安装包下载地址(版本是5.16.3):


    首先声明:此测试,本人亲测成功,可用!

    目地:了解curl命令的使用,以及用途,功能的强大

    有时在批量抓取网站页面内容时,是需要处于登录状态的,否则无法获取。curl这个强大的工具可以完成这个工作。之前最好也先了解一下http POST方法,网站登录大都是用这个办法。

    这里是以百度为例(下面是我个人的测试):

    1、先保存用户变量
    • [root@cbh4 /]# ACCOUNT=qasxc5  (这里的qasxc5是我的百度用户名)
    • [root@cbh4 /]# PASS=cnblackhat  (这里的cnblackhat换成你的百度用户密码)
    • [root@cbh4 /]# echo $ACCOUNT


    [color=rgb(51, 51, 51) !important]复制代码

    2、访问百度,取得cookie,保存到cookies. 查看文件可知cookie名为BAIDUID
    • [root@cbh4 /]# curl -c cookies www.baidu.com
    • 以上命令回车会出现一大堆代码信息,不要去理会,与此同时,在你的执行目录下会生成一个文件名为:cookies

    [color=rgb(51, 51, 51) !important]复制代码

    以下是cookies的内容:
    a2.jpg



    3、带着cookie访问这个地址,得到$TOKEN$
    • [root@cbh4 /]# TOKEN=$(curl -b cookies -sS "https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&class=login&tt=$(date +%s)&logintype=dialogLogin" | tr "'" '"' | json_pp -t dumper -json_opt pretty | grep token | cut -d\' -f4)
    • [root@cbh4 /]# echo $?
    • 0
    • 执行以上命令,执行之后,检测命令执行成功,返回状态是0


    [color=rgb(51, 51, 51) !important]复制代码

    以上你运行第一条命令你可能会遇到错误:-bash: json_pp command not found
    json_pp依赖perl安装包,你下载个perl安装包安装即可,yum直接安装不行,已测过。

    perl安装包下载地址(版本是5.16.3):
    游客,如果您要查看本帖隐藏内容请回复



    perl安装步骤:
    • [root@cbh4 perl-5.16.3]# ./configure.gnu
    • [root@cbh4 perl-5.16.3]# make
    • [root@cbh4 perl-5.16.3]# make test
    • [root@cbh4 perl-5.16.3]# make install

    [color=rgb(51, 51, 51) !important]复制代码

    安装完之后,在执行前面那条命令就不会报错了。


    4、带着cookie , $TOKEN$对这个地址访问
    • [root@cbh4 /]# curl -b cookies -c cookies https://passport.baidu.com/v2/api/?logincheck&token=$TOKEN[        DISCUZ_CODE_4        ]amp;tpl=mn&apiver=v3&tt=$(date +%s)&username=$ACCOUNT&isphone=false
    • [1] 20919
    • [2] 20920
    • [3] 20921
    • [4] 20922
    • [5] 20923
    • [6] 20924
    • [root@cbh4 /]# ({"errno":0,"codestring":null,"index":null})
    • [1]   Done                    curl -b cookies -c cookies https://passport.baidu.com/v2/api/?logincheck
    • [2]   Done                    token=$TOKEN$
    • [3]   Done                    tpl=mn
    • [4]   Done                    apiver=v3
    • [5]-  Done                    tt=$(date +%s)
    • [6]+  Done                    username=$ACCOUNT
    • [root@cbh4 /]#

    [color=rgb(51, 51, 51) !important]复制代码

    返回下面内容:
    ({"errno":0,"codestring":null,"index":null})

    (#curl -b 和 -c 参数同时使用表示当前目录下的cookies文件读取 cookie 数据,如果接收新的到的 cookie,就写到同一个文件里去


    5、使用用户信息登陆百度网盘:
    • [root@cbh4 /]# curl -b cookies -c cookies --compressed -sS 'https://passport.baidu.com/v2/api/?login' -H 'Content-Type: application/x-www-form-urlencoded' --data "staticpage=http%3A%2F%2Fpan.baidu.com%2Fres%2Fstatic%2Fthirdparty%2Fpass_v3_jump.html&charset=utf-8&token=$TOKEN&tpl=mn&apiver=v3&tt=$(date +%s083)&codestring=&safeflg=0&u=http%3A%2F%2Fpan.baidu.com%2F&isPhone=false&quick_user=0&logintype=basicLogin&username=$ACCOUNT&password=$PASS&verifycode=&mem_pass=on&ppui_logintime=57495&callback=parent.bd__pcbs__ax1ysj" | grep -F err_no


    [color=rgb(51, 51, 51) !important]复制代码

    会返回以下信息:
    a3.jpg


    我这里错误码显示为0,表示成功,可能是别的值



    6、登陆成功之后就可以调用网盘 API了,验证是否成功

    6.1   获取容量:
    • <span style="line-height: 1.5;">[root@cbh4 /]#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/quota'

    [color=rgb(51, 51, 51) !important]复制代码

    返回如下信息:
    a4.jpg


    信息解释:
    used:1200946201297       (容量使用了多少)
    total:2209223802880       (总共容量为多大)


    6.2   列出根目录下的文件信息:
    • <span style="line-height: 1.5;">[root@cbh4 /]#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/list' | json_pp

    [color=rgb(51, 51, 51) !important]复制代码

    以下是我网盘里面的内容(如下,内容比较多,就不一一列举了):
    a5.jpg




    a6.jpg



    6.3   当然也可以针对指定目录列出内容:
    • <span style="line-height: 1.5;">[root@cbh4 /]#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/list?dir=/黑帽远控入门教程' | json_pp

    [color=rgb(51, 51, 51) !important]复制代码

    以下是我根目录下面的目录:比如这里的“黑帽远控入门教程”目录,内容如下:
    a7.jpg


    a8.jpg



    6.4   这里也可以新建目录
    • <span style="line-height: 1.5;">[root@cbh4 /]#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/create' -F path=/黑帽官网bbs.cnblackhat.com -F isdir=1 -F size= -F block_list='[]' -F method=post

    [color=rgb(51, 51, 51) !important]复制代码

    返回如下信息(以下涉及到字符编码问题,中文在平台上不显示,中文已被替换,但在下面检查的时候,是存在的):
    a9.jpg


    这里我新建的目录是“黑帽官网bbs.cnblackhat.com”
    到浏览器上查看一下,目录成功创建与否:





    附注:
    • 第二步中取得TOKEN时,要解析返回的json数据,可以不用json_pp, 也可以用别的工具,网上可以搜到不少,作者原文用的是jshon
    • 第四步登录中的用户信息,各字段如下(参考原作):
      staticpage:http://www.baidu.com/cache/user/html/v3Jump.html // baidu登录后跳转的地址
      charset:UTF-8 // 编码字符集
      token:$TOKEN$
      tpl:mn
      apiver:v3 //apiver 的值是固定的 API的版本号
      tt:当前时间
      codestring:留空
      isPhone:false //如果用手机号码登录则ture 否则为 false
      safeflg:0
      u:http://www.baidu.com/
      quick_user:0
      usernamelogin:1
      splogin:rate
      username:用户名
      password:密码明文
      verifycode: //验证码,如果没要求验证码,就为空
      mem_pass:on //记住密码
      ppui_logintime:5000 //是一些登录用时间的,给个7000~10000的随机数就好了
      callback:parent.bdpcbsoa36qm


    0

    主题

    0

    听众

    66

    积分

    黑帽菜鸟

    Rank: 1

  • TA的每日心情
    奋斗
    2018-7-5 17:37
  • 签到天数: 60 天

    [LV.6]常住居民II

    谢谢分享
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部