Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php 1 k( d5 Z. a5 i4 y( A
漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 4 y2 L( O. q+ |* E
在浏览器中输 入相应的路径,安装Discuz3.4. - q( ?3 w2 Z/ P+ T; \% {

2 e) l' I2 W+ ~1 E9 I4 l% a% G% M& m 在创建数据库的界面进行抓包。 , h1 k, W% P! ?1 B! d
 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: / k3 ?2 n: |6 j4 Z
这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
9 w* C! j! o7 G6 l ) u w' P5 C- B; w
( V: h- c- @; B* {; ~! @' P: X) W; C
% T1 o. M% b& o$ \
' a3 ]5 D: d7 Z8 V' [% f( z
( S2 v$ J9 u# D+ o B2 V
9 F. r* f- }6 A! k( `" @: W
1 H) U* B/ h& M: V, o+ u1 [9 x
& w: ], q% h; }2 o( k- u漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
' c5 z/ a4 N+ h0 q' T
+ p- P4 p1 F9 A8 q* g. ?7 B$ @
& @! y/ C) v6 n+ w# w通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数
! Z2 g- R3 H6 ^5 o; q5 y
/ W. U9 [1 T3 e4 tsave_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
% g1 _ Y( [5 I# y判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。
4 c2 b, J! j5 q" C这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。
6 s; Z5 r# ^. D: E/ k# Q J" A" a9 A* E

( x8 o% e- e1 s% P
" T( d1 Y6 v/ |7 |6 Q0 E: q) I判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 , I. }2 ~# s; ]/ w+ I0 y4 ]
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。 4 s( a$ B! V' i5 p* @" ?
9 W7 ?) a0 N& D
/ M2 V. l5 Z& z7 A: W8 n9 w
我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。
' ~1 F. i( x0 k: ? |