|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php
5 h. `" Q* k4 _( `' i" X: N漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 5 u' \! ^) Q, s" U8 o
在浏览器中输 入相应的路径,安装Discuz3.4.
& Q, W" V5 k8 l9 ]/ Z4 e
8 x/ u6 {3 a Z3 i6 w* q3 w! S 在创建数据库的界面进行抓包。 " E' f. h: e* R7 H$ b/ B% `9 H2 M
 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: 9 h/ r( y" E4 f ?2 ?' L
这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。 % u, O1 s- W6 F2 h

% z& |' x h ^; R9 e9 _" U
6 U. ?, E9 P4 ^) H7 |2 u! D B8 ^* K7 n9 M: o2 Z, j; P
3 l t: H: N8 X" L- f) T1 i1 O2 r" {" N2 e
: r, F, Y7 }/ b6 ]9 @6 }" ^
" @; L9 O) Z& c4 y4 u, v2 k7 G* x' C+ b: H3 f' Q2 ~, S
6 y# d5 R' f; t% j* D漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
/ f( Q$ `# [" p+ L0 w. @" Y5 y, ]' W6 w/ Q& k$ f0 t; \& O

" _- F; v& M$ H$ |通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数 6 A! A9 z* l$ i, `) z

2 K( e, [3 w5 h9 p$ [save_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
( g* l$ f' F; @9 @3 E) N0 F% C* T2 Q判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。 * P+ V1 \0 o; n
这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。 8 F3 D4 O# j. w
7 d5 `" h3 Y- |$ ?0 W$ e
) R& O- v b8 Q- t. s3 c
6 [% w" P0 p0 U( v3 e判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。
6 b* v' Y6 O! I% r9 W8 n+ J: I在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。
0 x: m) X( s! Z: ?8 M) G& a- v* m; I
+ G/ u- g7 m6 @9 j; S. G# B8 c3 V8 c9 _6 Z0 F; t2 f: y
我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 * ? F- e8 B0 h- _8 a" Q% t, @
|