Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php
7 m5 F& w1 Q0 R) z4 c漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。
" c) x6 j8 X, ~7 P* W* `1 @在浏览器中输 入相应的路径,安装Discuz3.4.
1 q; _ S2 v+ Z( M9 X* g- ]6 I, l$ F2 D1 n( X1 G
在创建数据库的界面进行抓包。
) g8 O: L4 I4 m% F. A把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。 安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: 1 X; p! \: P3 L. }: t
这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。 / h, O# Q1 P4 z0 H! N9 u* Q
2 d! \5 ^& b: |& P9 y- N
( D/ v* f4 `; l& ~8 D* x: Q
( F( R4 Y" z V2 Z" Z7 {) S0 p
& ^2 ?" M, f3 b* v' x7 q/ o0 d
9 V9 o D- z( Z* ~% \; p$ K2 T4 x! L1 d5 i- \% e9 A8 h4 M
1 `5 T: Z3 Y% f0 }( }; [) x
0 s7 ?6 c. a5 h# f8 N
% l1 H' D2 H/ K, Z% m& O
漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
0 `7 T' h7 w' c0 C1 L, w
+ M2 A% e. z4 U1 B" {9 R2 D1 x1 _' U/ h% X
通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数
( o6 J0 z/ L1 a8 d# I! V& e2 V9 \1 f% H& A
save_config_file(ROOT_PATH.CONFIG, $_config, $default_config); 6 @$ [4 P2 p. T
判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。 / z. s$ Z, R7 a6 P, P- W
这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。
$ y% I1 ~. o6 R) {3 `
7 ?/ K3 V) @' R) A. R* U, A
' j/ e% I5 i; e2 V8 |* L: @0 _4 [" v' ^1 _
判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 : h+ u: T0 s- f
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。 / F, _, `- X" e, O
7 V* e- c! v: K) b0 N+ L
9 @. m3 B0 `! P! U) j我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 4 [& {$ I+ q+ K0 |5 e
|