|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php W* P: r5 B6 b( f, I
漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 
3 @% J6 v3 M; P7 ~5 P- W在浏览器中输 入相应的路径,安装Discuz3.4.
$ [$ v& b) Y4 G( p
7 m/ T% S' `/ n( ^ 在创建数据库的界面进行抓包。 $ B5 `6 \: m h* b# k* c
 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: / f! l' g6 W" w: C# O. n* r d, ?
这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
: m% [0 U; {, t9 P " B6 z2 N& @. \4 S' U. b3 I
' [& p$ c* s5 P5 q4 F4 x
; M0 Q) l0 M3 w
, X g3 q( U! g5 b( k
' U: ?1 @( J u* D! w, G% G0 p0 g" s) `5 x
0 D' ]. A0 l$ L3 i6 I6 `" S% F, R! |' B
6 ]! Z; u6 t1 N& E/ }
" T& I. T; \: m" C" e R漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。 + [# N% T3 T z1 L& _6 u7 e. {
, [/ R) ?) ?! u
) p) j( q- H( I: s6 V$ _5 X q
通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数 + e4 c$ s+ u- I+ @/ j5 F/ f

# Y ~5 ]8 K% K- N$ ~. rsave_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
9 V" H! v0 ~9 E% e& ?判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。
8 c# k$ \1 H/ E! e" s这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。 3 _8 T- _& i/ t. [/ j& _ W: A
4 p3 Y8 U! E$ V; N
5 v- q4 v! t, B. @7 R' H0 O+ n E% w4 f8 g& @. h4 U/ m
判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。
1 ?; L4 k& E0 C5 |在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。
) _- X0 |$ m0 S2 ^ . c, o- X8 l+ T) p( N r
/ x6 M8 X2 ^) u& [5 f; }0 B
我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 ) m5 R) U/ p2 @2 b) ?9 C
|