黑帽联盟

标题: curl模拟登录网页(定位原创发布) [打印本页]

作者: yun    时间: 2016-10-21 20:09
标题: curl模拟登录网页(定位原创发布)
本帖最后由 yun 于 2016-10-21 20:17 编辑

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

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

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

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

1、先保存用户变量
[color=rgb(51, 51, 51) !important]复制代码

2、访问百度,取得cookie,保存到cookies. 查看文件可知cookie名为BAIDUID
[color=rgb(51, 51, 51) !important]复制代码

以下是cookies的内容:
a1.jpg


3、带着cookie访问这个地址,得到$TOKEN$
[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



作者: ckey    时间: 2016-10-21 21:39
谢谢分享




欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) Powered by Discuz! X2.5