|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php
2 Q7 W! B. v- }' E漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 6 H/ ~( k- _$ n8 E
在浏览器中输 入相应的路径,安装Discuz3.4. * t3 E2 X& h8 J: b8 O% o
$ _1 p6 l J4 j8 `' t- D
 在创建数据库的界面进行抓包。 - i, X! u% i( Z, {$ C; r7 S
 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: 
$ b- `: |/ F6 J: A% T0 p这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
9 M/ @6 C( s6 w) z" V8 ~ 5 X. h) Q# A% G) L6 p$ U8 N% \
# e) c9 a% G! h& g; g
3 M. X9 D/ C, u0 r; j6 f2 u
8 k" q0 J3 n- h1 \- `, c
, r/ F) ?4 d1 t* g# J7 I- G. e
$ j6 f: I$ c/ \* K4 S) k: p
, N# I6 M5 n& e
$ w9 g- C/ V( q. j4 | y( J% D2 _' u4 C
漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。 * u; M% B5 P; x0 {! A" q7 N
T5 r( c) U" ?, p - o7 f* }4 h% R8 s( r1 V2 a
通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数
8 f4 ? N0 ]2 X' K; u9 k" P2 c
" n) B3 ~$ v8 R9 r4 S9 ssave_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
/ d" V1 t" d2 t7 \' g/ _" C判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。 ( r- Q/ V1 g; L! h- l8 m
这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。 ( q+ \. D% b1 g7 @8 Z6 E3 O4 g1 I
9 F1 @3 P \; m) o6 G6 T! m0 q
1 r3 W$ T, v) m3 s4 \# G
2 r& R& f) {/ Y' w判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 : i3 ^7 y3 @6 U5 i
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。 9 l) |6 }' }8 P1 c
# \/ W9 t& l) L9 m7 }# R
_ c. ~1 _" Q A" _& S$ a8 x我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 4 }7 @! R, c! ~
|