Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php
% \4 \; p( e( Q; p7 [6 D+ N漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 ' z! e0 i& v2 g- {5 M
在浏览器中输 入相应的路径,安装Discuz3.4.
& k% h. t. E! J9 b5 L+ T0 A% X
( d' T) X+ U y! X9 w 在创建数据库的界面进行抓包。 / o2 E% C& v, V* A2 Y0 P
 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: 
) J3 O4 m$ R+ _# g7 [' i: N这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
8 u5 m, q. e" j5 K8 K: j7 m ; F0 Z9 A1 M5 o6 X& S
! f( x* U; g/ Z: P3 L% X
9 \ w# N2 P5 w" L7 p' _+ U5 H; ?$ f. k- d! S
$ o+ j) m* Q. u5 T
6 {2 d4 T4 b7 A, o9 }: |5 M9 Y" U7 h7 O
" l: o6 V }) q
3 M( k O M' m5 s/ u. s" @漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
$ i! a, q" Z$ z" y X$ U) H- c/ G# m( k" ~5 m
2 G# p. H# F0 g# T2 G3 }' N0 N
通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数
& j, R' U3 y" y' K ! j4 u* \) \1 I$ H5 `3 _5 P
save_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
* ~) N$ \( L* O8 T1 c7 s6 O判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。
& q2 X( Z) ~8 @这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。
3 ]: b0 [7 }- ^) }# x) I0 y% r8 V5 H' h0 c8 w4 g k
9 n$ f% ~0 N0 {3 v/ \
: h) W \+ m Z7 F1 j4 l判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 . V7 @; r3 c- s; A! k* Q
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。 $ [9 {' M- u% b$ i
8 n3 h+ r+ `; E( @7 n! m4 Q0 {4 S+ q
: w' _: w9 Q; F- r" s9 [我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 ( v5 m3 E: C, q
|