|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php + _8 p0 k, x# d4 V; q
漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 
+ G1 k4 I M( b2 k) b& C+ t0 [在浏览器中输 入相应的路径,安装Discuz3.4.
. V# M1 X1 F5 Q2 E* W/ G/ X
% i7 w$ g5 D7 c* ~6 p" L% S 在创建数据库的界面进行抓包。 ! |) J* ?" P# y6 S6 X
 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: 
; E% k& Q: \3 J* v2 X这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
3 }9 H' L! z0 [8 a) t8 J2 } / J# ?( t2 J* K6 Q7 l& i* d
6 v. w1 R9 J5 E" u
3 i' M4 j; P7 ~: z" ?" W5 Q2 ]/ B# O$ o2 a+ [3 v ]* \' H
Z( O, r# I8 M' U3 z- B' c
# J8 r8 O; g* S9 K6 k: d2 {% Z7 A1 y
0 {" V0 A' F/ Z6 m3 K) R3 T
9 \4 `/ R! a/ b/ W4 w$ I漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
) n' A- ]* b/ P8 \3 E. y5 J! j, S& t. M6 C4 @; Q( @

3 i! }+ R# C% I% x通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数 * w, @* d; `9 Q

, @* V/ X, @3 Z8 F- ?+ l$ p- K( ksave_config_file(ROOT_PATH.CONFIG, $_config, $default_config); + o) p4 O4 I. E0 P
判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。 9 M0 T% T" I- d! g
这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。 1 h: _7 p+ D8 T! u$ H
/ a4 e: O( j; Z1 D, E/ Z

) Y( z8 w8 }6 M/ `0 T( D" o8 X; b1 H: o1 f( ]7 `
判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 % R! k7 g$ B! L. O9 f- i4 y' P7 l1 |
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。
. _" f( D2 Y6 @5 ~ ' V6 u, p2 q' I \
, ~' `; T( u) C8 [. K
我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。
; G. q2 u5 G' ]2 \' ~# U |