|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php
t7 Z1 P) ~! l/ }" s4 K漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 ; B+ z1 o& _4 `( N( g
在浏览器中输 入相应的路径,安装Discuz3.4. 8 O1 e3 a z+ `$ j
* n3 M4 b' U* z/ @" _
 在创建数据库的界面进行抓包。
) G& U0 k: p$ I9 C3 f3 s( M 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: 2 ^. q! y4 e$ }, U _
这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
" p9 s/ Q3 t" V3 X( w
! o* z" ^/ X/ o! Y0 n" F# R1 h
; T4 U) R, N G- s3 q
]% U _! M7 g2 S0 v; @( `: ?+ V6 y' P
% c+ c B7 K* O- |. S3 G; g
( I8 t; {- C( p8 u
6 A- J2 Z3 d% _/ [3 v
- ^1 |: ^. B* H( C' {! e8 }漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。
7 w" S3 ?% l! Y9 x9 L! H6 K+ {6 G& K6 D: q9 t) m8 {

( f2 }' D3 U( M1 `% z b通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数
6 m, ~6 S+ D5 u9 [' j) N Z
u; m6 D) X0 h: G: asave_config_file(ROOT_PATH.CONFIG, $_config, $default_config);
6 p. S3 ^5 l: q% O判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。
- V9 n. M# ], E6 m: ~这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。
5 M \( M* H* w3 o( }% O
6 x, l6 H' i2 Y3 y" F
4 R M$ u3 V& r. i7 i' |+ T8 ]7 L% {* D9 q* k# P+ e" \' H
判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 5 U& ?. ]$ x; p$ D9 g* T
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。 3 V1 B& ?6 \# x

8 D3 {: ^ T3 z! o! N8 ~, X3 L& ?# S1 q0 I x9 ]. [1 G; A& i
我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 " f& H7 y1 X8 B
|