|
Discuz_X3.4最新网站漏洞 影响版本:Discuz_X3.4 漏洞类型:配置文件写入导致代码执行 问题文件: \upload\install\index.php / R' F* x% {" N
漏洞复现: 首先在发布地址下载3.4版本对应的安装包,解压后放入运行环境(我这里是win7+PHP,放入WWW内)。 
]. X3 O8 [' H; n/ D: W在浏览器中输 入相应的路径,安装Discuz3.4. ' O0 L2 ~$ p9 Q( E9 |
+ c9 v6 _8 c. R5 i8 n" X8 \' f
 在创建数据库的界面进行抓包。
& _1 c+ J6 P/ Y8 {* ] 把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();//然后forward,随后开始安装。  安装完毕后在ComsenzDiscuz-DiscuzX-master\DiscuzX\upload\uc_server\data的config.inc.php文件中可以看到如下: ) h6 \3 n; l) y* }$ K @
这里的内容变为我们抓包时修改的内容。在浏览器中访问ComsenzDiscuz-DiscuzX-master/DiscuzX/upload/uc_server/data/config.inc.php可以访问到我们修改后的phpinfo的界面。
2 Z# `2 N' ]# B2 l8 k2 ?6 I: j
- P3 c4 g; w& u% R* e# K5 v, u1 m: W. N
, A% x$ u. ^ B& f v4 F# d, f$ H" K# j9 w- e
, X; b$ ~: j9 a Z# @! M! x* ^- ]+ J% m) m
S G1 K: s P3 o a! E
' F, H6 c" b' |# z6 X5 [! y0 h/ ]
* S! |( h1 e: n4 N1 x& v) |漏洞分析: 漏洞成因:当cms安装过程中对配置文件config进行写入的时候,如果对写入的内容没有进行很好的过滤,就会把参数写入到config的代码总从而被执行。 # `/ G+ ~( m8 g2 V: H9 T' T* q
+ h4 @- ~- F* ?
% Q( a9 \- C- [2 M7 }, \6 h通过查看DiscuzX\upload\install\index.php的配置文件,在代码的357行处发现save_config_file()函数
1 t6 h2 k# d0 V ?8 a# y6 y ) G( e8 {# p$ o) [9 s
save_config_file(ROOT_PATH.CONFIG, $_config, $default_config); - i7 H. D$ ?5 D/ P9 A! e
判断出函数作用是保存写入配置信息,其中,ROOT_PATH.CONFIG为文件的路径,$_config为配置文件的内容,$default_config为默认配置。 * ^! Z6 y9 o5 r
这里我们可以看出,首先判断了默认配置文件是否存在,如果不存在将会抛出错误:退出(‘CONTIGNGULALLUL DEFUCT.PHP丢失,请重新上传该文件。’);否则将配置文件的内容传送给默认配置文件。
; T! j$ S! Z- Z* G! O; I; j5 X
6 [# T$ r8 ]( @/ a7 `) A( K * b4 U; U2 y% w0 }, ^
# A# B" F6 `; e7 P$ h" T
判断是否post里面有内容,如果有的,使用post里面的内容,如果没有的,默认值是空字符串。 ; {6 [+ F/ D/ L1 _2 {
在这里看到了dbinfo的传入,使用$_post方法传入dbinfo中的内容,但是可以看到没有对传入参数有任何过滤,直接把dbinfo中的参数传入进来造成漏洞。
+ N, }* I1 w" j
7 h0 c$ M9 J9 `0 A* X( o' M( N9 t- w" W' \0 T: k
我们在抓包后,把%5Btablepre%5D=后边的内容修改为pre_’);phpinfo();// 即把pre_’);phpinfo();//上传到配置文件中从而使括号闭合‘//‘会注释掉后边自动补充的内容,因此在执行这个配置文件时会跳转到phpinfo的界面。 & Q9 z5 Y4 j$ x! V% g! M5 ~
|