|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php ( z) \( K/ Z6 j& ^
漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 
) p& v! b& m# n在浏览器中输 入相应的路径,安装Discuz3.4. 7 n, ~; l) i- ~9 T

1 D% {, m: d9 @- t3 L' T8 X" I, R 在创建数据库的界面进行抓包。
, _8 W! U4 Y7 X y2 F 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: ; f3 d6 S7 r9 X: k0 _ _8 g
这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。 1 i! O1 \- f/ ^3 K; E) G( U' m

1 x3 s$ H |7 K* E
) C2 v& N- X+ W( ?
3 J3 k6 g; D" ~, L0 l! K$ V* w5 y# H" D
- Y' h9 {; D% L" s! s
0 l1 y. u# e+ i6 d! w
: E% L, H$ V. F) L) t6 t1 |# I2 G
! F* [9 j5 T$ \7 s- R0 T% e* O9 ~& h
漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
* B! O- }, Y- a( H' P; V
; j9 O2 b- x X4 D+ s 2 U0 v# ~ s) y J2 W
通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数 - j; p; F+ P1 w; L

* R+ B2 |0 Z T% z6 s" e- nsave_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
9 a3 G1 b; y2 G. B' ~; p判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。
2 ^0 I8 f/ {0 C4 x) E这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。
: I7 H3 Q* D( j' q) n. M' [. i" e0 Q+ a! X1 K1 ?" `4 J

% ^3 ]& F8 S; F+ {& h
; r6 ~; g" }) j* q判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。
" A) M& w0 b( L. v ?" s+ u+ q在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。
6 I$ j! C: N, M4 K, C9 c: N
" b) f0 j% e( A+ I6 ^: \! l" i# L, R, A% M& U, b% L3 W
我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。
! [. [5 p- {$ A$ ]0 {) c# i |