|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php
0 z! S, D7 I* C7 _+ \, f漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 
: `- y9 P* j2 E# F8 G在浏览器中输 入相应的路径,安装Discuz3.4.
6 {& C' y. Y" u) u ? & x! ~( r; H7 G5 x. a
 在创建数据库的界面进行抓包。 % m3 x, r5 b+ ?8 _+ ]
 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: 
m/ g0 d8 @: T2 X% e* q4 V, l/ V这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
8 s' z/ X E4 H! u L$ r% k: X6 F* ^+ y/ X4 v
1 o- }$ v9 Q5 S' E% {/ b
( ]# t( X( X7 Q/ O5 b6 I U5 a) C) o2 A; c# x
/ @# t7 c. f$ n: u( Y* Q* R" F* T8 l% y: w3 n- ]5 P j
' w, b: c: ?1 [
: S! N$ q0 g& @: l' b! |7 U0 n* k! _$ v2 \6 d8 i4 V
漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
6 g9 F: h2 |; l- N: v
7 G! ~" a1 {. ^1 I2 u) F
6 n' D8 X2 E- l' l4 z& }' s7 U通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数
; n; J1 h- Y# L 9 [; N, \1 q/ h* j0 h$ V
save_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
; C- v4 z; i' ]$ C) s判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。
2 x- Z) C, C0 j+ l8 D% q" H: O7 c这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。
9 O2 s2 K7 v, G& i, n9 {
8 {: ~+ ~4 A" J3 M
% \; A5 X: }+ q2 c. O) G
) h1 H1 v4 q4 _; h, U" E判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 0 s! v& r w& v' o$ l5 ^
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。 ! l( \5 X5 V$ v+ }8 Y: r/ Y, E; q
9 |* u. [! J8 n+ |- i
! Z( d3 O+ p0 g8 p; P. r我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 ; ?% s0 {& ?- Y. k' P
|