某高校校园卡网站模拟登陆(php)
来源:互联网 发布:php微交易源码 编辑:程序博客网 时间:2024/04/28 23:20
让我们先来看登陆界面,这里可以使用卡号或学号,这里我们使用卡号,其实是一样的
输入卡号后,点击密码输入框,弹出一个密码键盘
输入密码以后,点击验证码框出现验证码
输入验证码以后正常登陆
下面来看看这个登陆界面的几个特点
1,必须使用密码键盘输入密码才能登陆成功,关闭键盘,直接输入密码不可以登陆
2,验证码获取不随机
从图片可以看出,rand后面的数字与验证码上面的数字一样,说明只要我们改变数字求请求验证码,就可以得到相应数字的验证码
尝试如图
根据上面的分析,我们再尝试抓包
可以看出传递的地址与参数,分析其中passwd参数与我实际选择的密码不同
于是推测,密码实际是密码键盘上面生成的,也就是说你实际的密码并没有使用到
每次请求会得到一张密码键盘图,其实传送的密码,是根据你点击的键盘坐标生成的
例如下图,假设你的密码是123456,那么你在键盘上点击以后生成的实际密码是
284902,对应关系是1=>2,2=>8,3=>4,4=>9,5=>0,6=>2
可以看出实际是根据键盘坐标对应的,无论键盘上的图片是几,第一个代表的就是0,第二个是1,依次类推
根据上面的结论,我总结模拟登陆的思路:
首先获取密码键盘表,根据每个按钮的坐标,截取里面的数字,确定每个数字图片代表的是几,这里为了代码编写方便,使用md5把截取出来的二进制图片加密,生成32字符便于比较
首先保存一张密码键盘图片,使用切片工具确定坐标,把每个数字切出来,下面使用php实现切片
下面是总结的对应关系
9=>1c08ef360c36e3a85efb2ca279802461
0=>bfc4992573880df8e374807c443e8401
1=>eb24abcd7028ac9d03848d35ca4376f2
3=>486d19dccda9cae742bb376f257c7eb9
2=>da4c60c456ba8d60001da697ecd65a7d
5=>34d28f6f4f6638cecf8e01df5f8c1cf9
6=>40333b61dea66ec76af47efc467d7722
8=>4ed3428507225abf5dc1f0b0624fbbdc
4=>c230847e76231e5efad5c558544ceb56
7=>353519ea4fb442c8d23244e66d3bd4bd
下面的步骤是:
获取键盘图片,根据上面的方法,确定原密码对应的新密码
获取验证码图片,这个可以构造自己的验证码,所以基本就是绕过
根据新密码,验证码等信息,提交表单给登陆地址,模拟登陆
直接贴代码说明
输入卡号后,点击密码输入框,弹出一个密码键盘
输入密码以后,点击验证码框出现验证码
输入验证码以后正常登陆
下面来看看这个登陆界面的几个特点
1,必须使用密码键盘输入密码才能登陆成功,关闭键盘,直接输入密码不可以登陆
2,验证码获取不随机
从图片可以看出,rand后面的数字与验证码上面的数字一样,说明只要我们改变数字求请求验证码,就可以得到相应数字的验证码
尝试如图
根据上面的分析,我们再尝试抓包
可以看出传递的地址与参数,分析其中passwd参数与我实际选择的密码不同
于是推测,密码实际是密码键盘上面生成的,也就是说你实际的密码并没有使用到
每次请求会得到一张密码键盘图,其实传送的密码,是根据你点击的键盘坐标生成的
例如下图,假设你的密码是123456,那么你在键盘上点击以后生成的实际密码是
284902,对应关系是1=>2,2=>8,3=>4,4=>9,5=>0,6=>2
可以看出实际是根据键盘坐标对应的,无论键盘上的图片是几,第一个代表的就是0,第二个是1,依次类推
根据上面的结论,我总结模拟登陆的思路:
首先获取密码键盘表,根据每个按钮的坐标,截取里面的数字,确定每个数字图片代表的是几,这里为了代码编写方便,使用md5把截取出来的二进制图片加密,生成32字符便于比较
首先保存一张密码键盘图片,使用切片工具确定坐标,把每个数字切出来,下面使用php实现切片
<?php //获取键盘图片 $imgsrc = "pan.png"; //创建键盘图片数据 $source = imagecreatefrompng($imgsrc); //设置新图片画布 $tagurl = "first.png"; //这里设置长宽为25px,因为根据切片工具看,每个数字图片的长宽为25px $w = $h = 25; //创建画布,为画数字图片做准备 $tag = imagecreatetruecolor($w,$h); //根据具体坐标,截取键盘图片部分,生成数字图片 imagecopy($tag,$source,0,0,9,143,$w,$h); imagepng($tag,$tagurl); //读取数字图片,将二进制数据md5加密,获得唯一对应值 $zuobiao = md5(file_get_contents($tagurl));?>附一张截取出来的数字图片
下面是总结的对应关系
9=>1c08ef360c36e3a85efb2ca279802461
0=>bfc4992573880df8e374807c443e8401
1=>eb24abcd7028ac9d03848d35ca4376f2
3=>486d19dccda9cae742bb376f257c7eb9
2=>da4c60c456ba8d60001da697ecd65a7d
5=>34d28f6f4f6638cecf8e01df5f8c1cf9
6=>40333b61dea66ec76af47efc467d7722
8=>4ed3428507225abf5dc1f0b0624fbbdc
4=>c230847e76231e5efad5c558544ceb56
7=>353519ea4fb442c8d23244e66d3bd4bd
下面的步骤是:
获取键盘图片,根据上面的方法,确定原密码对应的新密码
获取验证码图片,这个可以构造自己的验证码,所以基本就是绕过
根据新密码,验证码等信息,提交表单给登陆地址,模拟登陆
直接贴代码说明
<?php /* *根据你原来的密码与密码键盘生成新密码 */ function getpwd($imgsrc = "pan.png",$pwd){ //数字图片横纵坐标 $width = array(9,45,81); $height = array(35,71,107); //数字图片对应的数字 $old = array( "1c08ef360c36e3a85efb2ca279802461" => 9, "bfc4992573880df8e374807c443e8401" => 0, "eb24abcd7028ac9d03848d35ca4376f2" => 1, "486d19dccda9cae742bb376f257c7eb9" => 3, "da4c60c456ba8d60001da697ecd65a7d" => 2, "34d28f6f4f6638cecf8e01df5f8c1cf9" => 5, "40333b61dea66ec76af47efc467d7722" => 6, "4ed3428507225abf5dc1f0b0624fbbdc" => 8, "c230847e76231e5efad5c558544ceb56" => 4, "353519ea4fb442c8d23244e66d3bd4bd" => 7, ); //获取原图片 $source = imagecreatefrompng($imgsrc); $arr = array(); //设置新图片画布 $tagurl = "first.png"; $w = $h = 25; $k = 0; //根据你请求到的键盘图片,生成新密码 for($i = 0; $i < count($height); $i++){ for($j = 0; $j < count($width); $j++){ $tag = imagecreatetruecolor($w,$h); imagecopy($tag,$source,0,0,$width[$j],$height[$i],$w,$h); imagepng($tag,$tagurl); $zuobiao = md5(file_get_contents($tagurl)); $arr[$old[$zuobiao]] = $k; $k++; } } //这里是最后一个,因为后两个不是数字,是删除键,关闭键,所以对于最后一个数字单独提取 $tag = imagecreatetruecolor($w,$h); imagecopy($tag,$source,0,0,9,143,$w,$h); imagepng($tag,$tagurl); $zuobiao = md5(file_get_contents($tagurl)); $arr[$old[$zuobiao]] = $k; //连接出新密码 $realpwd = ""; for($i = 0; $i < strlen($pwd); $i++){ $realpwd .= $arr[$pwd{$i}]; } return $realpwd; } function login(){ //cookie保存位置 $cookie_jar = dirname(__FILE__)."/pic.cookie"; //获取键盘图片,记得携带cookie $ch = curl_init(); $panurl = "http://card.jnu.edu.cn:8080/getpasswdPhoto.action"; curl_setopt($ch,CURLOPT_URL,$panurl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); $pan = curl_exec($ch); file_put_contents("pan.png",$pan); //根据密码图片与原密码,获取新密码 $pwd = getpwd("pan.png","原密码"); //获取验证码图片,记得带上cookie $imgurl = "http://card.jnu.edu.cn:8080/getCheckpic.action?rand=8080."; curl_setopt($ch,CURLOPT_URL,$imgurl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); $img = curl_exec($ch); file_put_contents("a.jpg",$img); //模拟登陆 $url = "http://card.jnu.edu.cn:8080/loginstudent.action"; $post = array('name'=>'你的卡号','loginType'=>'1','passwd'=>$pwd,'rand'=>'8080','userType'=>'1'); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); $res = curl_exec($ch); if (curl_errno($ch)) { print curl_error($ch); } //模拟登陆成功以后,携带cookie登陆校园卡信息界面 $url = "http://card.jnu.edu.cn:8080/accountcardUser.action"; curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); $res = curl_exec($ch); echo $res; if (curl_errno($ch)) { print curl_error($ch); } curl_close($ch); } login(); ?>
0 0
- 某高校校园卡网站模拟登陆(php)
- PHP网站模拟登陆
- 某高校校园卡余额接口2
- 网站模拟登陆备忘(php + python)
- Apache HttpClient模拟登陆网站(待续)
- 模拟网站登陆
- Winform模拟登陆网站
- Wininet模拟登陆网站
- python模拟登陆网站
- C# 模拟网站登陆
- python模拟网站登陆
- php curl模拟登陆
- php 模拟登陆
- php实现模拟登陆
- PHP HttpClient模拟登陆
- php模拟登陆
- PHP 模拟登陆实例
- php 模拟登陆
- 实验二 JSP内置对象
- 【非技术】我为什么想成为一名程序员
- Java类之间的关联关系
- 【操作系统】进程状态,状态转换图,状态转换条件
- kali linux安装遇到的问题
- 某高校校园卡网站模拟登陆(php)
- instrumentation中ActivityInstrumentationTestCase2学习笔记(3)
- MongoDB NoSQL面试
- 【操作系统】进程和线程的区别
- Spring excel视图导出时进度条设计
- 数据结构-----栈的实现(1)
- Python3.2官方文档翻译--实例对象和方法对象
- 【操作系统】进程的通信方式
- EOJ 1864 Playing With Cubes